HasData Google Trends MCP Server
Interesse do Google Trends ao longo do tempo, interesse por região e consultas relacionadas em alta e principais, como JSON.
Documentação
Servidor MCP do Google Trends
Um servidor hospedado do Model Context Protocol (MCP) que dá ao Claude, Cursor, Windsurf e qualquer outro cliente MCP uma ferramenta do Google Trends. Obtenha interesse ao longo do tempo, interesse por região e as consultas e tópicos relacionados em alta e principais para qualquer termo, tudo como JSON estruturado, sem biblioteca de scraping para manter e sem conta do Google.
https://mcp.hasdata.com/api/mcp?apis=google_trends
Conteúdo
- O que você precisa
- Início rápido
- Exemplos de prompts
- Ferramentas
- Erros e caminhos de falha
- Preços, plano gratuito e limites
- Seleção de ferramentas
- Como se compara
- FAQ
- Links do HasData
- Desenvolvimento
- Contribuindo
- Licença
O que você precisa
Um cliente MCP e uma chave de API do HasData do painel, gratuita para criar sem cartão, e o teste cobre cerca de 200 chamadas na taxa de 5 créditos. Este é um servidor remoto, então o caminho mais simples é uma URL e um cabeçalho x-api-key, sem contêiner para executar e sem conta do Google em nenhum lugar do fluxo. Um cliente que só fala stdio o acessa por meio de um lançador leve, publicado como @hasdata/google-trends-mcp no npm e hasdata-google-trends-mcp no PyPI, mostrado abaixo.
Início rápido
A URL do servidor é a mesma para todos os clientes. Nós o executamos na prática no Claude Code e no Claude Desktop. Os outros blocos seguem o formato documentado de cada cliente para um servidor remoto.
| Campo | Valor |
|---|---|
| URL | https://mcp.hasdata.com/api/mcp?apis=google_trends |
| Transporte | HTTP, transmissível |
| Cabeçalho de autenticação | x-api-key: HASDATA_API_KEY |
Clientes com suporte a OAuth podem adicionar a mesma URL como um conector e entrar sem colocar uma chave em um arquivo de configuração.
Claude Code
claude mcp add --transport http google-trends "https://mcp.hasdata.com/api/mcp?apis=google_trends" \
--header "x-api-key: HASDATA_API_KEY"
Claude Desktop
Configurações, depois Conectores, depois Adicionar conector personalizado, depois cole https://mcp.hasdata.com/api/mcp?apis=google_trends e entre.
Para o caminho do arquivo de configuração, o Claude Desktop carrega apenas servidores locais (stdio), então ele acessa um servidor remoto por meio de um lançador stdio. O pacote @hasdata/google-trends-mcp é esse lançador, e ele lê a chave do ambiente. Adicione isto a claude_desktop_config.json:
{
"mcpServers": {
"google-trends": {
"command": "npx",
"args": ["-y", "@hasdata/google-trends-mcp"],
"env": { "HASDATA_API_KEY": "YOUR_KEY" }
}
}
}
Para Python em vez de Node, troque o lançador pelo pacote PyPI, que o uvx executa sem instalação manual:
{
"mcpServers": {
"google-trends": {
"command": "uvx",
"args": ["hasdata-google-trends-mcp"],
"env": { "HASDATA_API_KEY": "YOUR_KEY" }
}
}
}
Cursor
~/.cursor/mcp.json para cada projeto, ou .cursor/mcp.json para um único:
{
"mcpServers": {
"google-trends": {
"url": "https://mcp.hasdata.com/api/mcp?apis=google_trends",
"headers": { "x-api-key": "HASDATA_API_KEY" }
}
}
}
Windsurf
~/.codeium/windsurf/mcp_config.json. O Windsurf chama o campo de serverUrl, não de url:
{
"mcpServers": {
"google-trends": {
"serverUrl": "https://mcp.hasdata.com/api/mcp?apis=google_trends",
"headers": { "x-api-key": "HASDATA_API_KEY" }
}
}
}
VS Code
.vscode/mcp.json no espaço de trabalho:
{
"servers": {
"google-trends": {
"type": "http",
"url": "https://mcp.hasdata.com/api/mcp?apis=google_trends",
"headers": { "x-api-key": "HASDATA_API_KEY" }
}
}
}
Exemplos de prompts
Prompts, não código. Cole um e o agente escolhe a ferramenta por conta própria. Cada um é anotado com as chamadas que faz, porque cada chamada bem-sucedida custa 5 créditos.
Faça um gráfico do interesse em "cold brew coffee" nos EUA nos últimos 12 meses e me diga em quais semanas atingiu o pico.
Uma chamada, 5 créditos. A série semanal volta em uma única solicitação.
Para "cold brew coffee" nos EUA, me dê as consultas relacionadas em alta e sinalize as marcadas como Breakout.
Uma chamada, 5 créditos.
Compare o interesse em "cold brew" com "iced coffee" no mundo todo ao longo de cinco anos e diga qual está crescendo.
Uma chamada, 5 créditos. A ferramenta aceita vários termos em uma única solicitação de série temporal.
Mostre-me o interesse em "sunscreen" por estado dos EUA nos últimos 90 dias para que eu possa ver onde a demanda é maior.
Uma chamada, 5 créditos. Esta é a visão de interesse por região na granularidade de estado.
Uma comparação entre termos cabe em uma única chamada de timeseries. Divisões por região, consultas relacionadas e tópicos relacionados são cada uma uma dataType própria, então um prompt que quer um gráfico mais suas consultas em alta são duas chamadas.
Ferramentas
Uma ferramenta, somente leitura. A amostra abaixo é extraída de uma chamada real, e os números mudam conforme a tendência muda. Leia-a como uma forma. O nome da ferramenta leva à referência do endpoint, que traz a lista completa de parâmetros.
A amostra é o payload, não a resposta inteira. Um resultado de tools/call carrega um bloco de texto, e esse texto é em si JSON contendo url, status, text e json, com os dados extraídos sob json. De uma resposta JSON-RPC bruta, o caminho é result.content[0].text, analisado, depois .json. Um cliente de chat desembrulha isso para você, e código que fala diretamente com o endpoint não faz.
Obter dados do Google Trends
hasdata_google_trends_search_getTrendsData
Interesse ao longo do tempo, por região, ou as consultas e tópicos relacionados para um termo.
| Parâmetro | Tipo | Obrigatório | Observações |
|---|---|---|---|
q | string | sim | O termo de busca. timeseries e geoMap aceitam até 5 termos separados por vírgula para comparar, e um sexto é rejeitado com 400 |
dataType | string | timeseries por padrão, além de geoMap, relatedTopics e relatedQueries. Os dois tipos relacionados aceitam apenas um único termo | |
date | string | Uma janela como now 7-d, today 12-m, today 5-y ou all, ou um intervalo personalizado de yyyy-mm-dd yyyy-mm-dd | |
geo | string | Um código de localização como US ou US-CA. Mundial quando vazio | |
region | string | Granularidade apenas para geoMap: country, region (sub-região), dma (metrô) ou city. O padrão depende de geo, country mundial e mais fino uma vez que um geo é definido | |
cat | string | ID de categoria para restringir o termo. 0 é todas as categorias | |
gprop | string | A propriedade do Google: images, news, froogle (Shopping) ou youtube. Pesquisa na web quando vazio | |
tz | number | Deslocamento de fuso horário em minutos, padrão 420 (PDT). Muda como os intervalos horários são agrupados |
A chave da resposta depende de dataType. timeseries retorna interestOverTime.timelineData, geoMap retorna interesse por região, e os tipos relacionados retornam relatedQueries ou relatedTopics, cada um dividido em rising e top. Leia a chave que corresponde ao tipo que você solicitou.
timeseries (o padrão) retorna um valor de 0 a 100 para cada ponto, tanto como string quanto pré-analisado em extractedValue. O ponto mais recente frequentemente carrega isPartial: true, significando que a semana ainda está sendo preenchida. Descarte-o antes de calcular uma tendência, ou a última barra parecerá uma queda que não é real.
{
"interestOverTime": {
"timelineData": [
{ "date": "Apr 12 – 18, 2026", "timestamp": "1775952000", "isPartial": false,
"values": [{ "query": "cold brew coffee", "value": "100", "extractedValue": 100, "hasData": true }] },
{ "date": "Aug 23 – 29, 2026", "timestamp": "1787443200", "isPartial": true,
"values": [{ "query": "cold brew coffee", "value": "44", "extractedValue": 44, "hasData": true }] }
]
}
}
relatedQueries divide em rising e top. Uma entrada em alta aparece como uma porcentagem como +300%, ou Breakout para um salto grande demais para pontuar, e extractedValue dá o número por trás dele. Um Breakout volta com um sentinela extractedValue bem acima de qualquer porcentagem real, então ordene pelo rótulo da string, não pelo número bruto.
{
"relatedQueries": {
"rising": [
{ "query": "organic cold brew coffee", "value": "+300%", "extractedValue": 300, "link": "https://trends.google.com/trends/explore?q=organic+cold+brew+coffee&date=today+12-m&geo=US" }
],
"top": [
{ "query": "how to cold brew coffee", "value": "100", "extractedValue": 100, "link": "https://trends.google.com/trends/explore?q=how+to+cold+brew+coffee&date=today+12-m&geo=US" }
]
}
}
A referência do endpoint lista todos os geo, cat e formatos de data que a ferramenta aceita.
Erros e caminhos de falha
Seu cliente quase nunca vê um código de erro HTTP de uma chamada de ferramenta. A camada MCP responde 200 e coloca a falha dentro do resultado, com isError definido como true e o motivo como texto. O agente lê uma mensagem onde você poderia esperar uma linha de status.
Uma chave errada aparece como saída da ferramenta, não como uma conexão falha. tools/list aceita qualquer chave não vazia e retorna a ferramenta, então o cliente completa o handshake e mostra verde. A primeira chamada de ferramenta então volta com isError: true e o texto HasData API error: 401 Unauthorized. Fique atento a essa string, porque nada antes no fluxo relata o problema.
Uma chave ausente é o único erro HTTP real. A autorização roda antes de qualquer ferramenta, e a própria conexão falha com 401. Cabeçalhos CORS estão presentes, e um cliente de navegador lê o status e não uma falha de rede opaca.
Um argumento que quebra o esquema da ferramenta é rejeitado antes de virar uma extração. O servidor responde com isError: true e o texto MCP error -32602: Input validation error, nomeando o campo ofensor. Nada é buscado e nada é cobrado.
Um termo com volume de busca muito baixo retorna um resultado bem-sucedido com os arrays de dados vazios, não um erro. O Google Trends não tem nada para mostrar para um termo raro, e requestMetadata.status ainda lê ok. Teste os pontos antes de criar gráficos com eles.
Um identificador que a plataforma rejeita retorna 400 com requestMetadata.status definido como error. Um valor desconhecido de geo ou cat é a maneira usual de ver isso.
Resultados que carregam dados também carregam um requestMetadata.id que vale citar no suporte.
Preços, plano gratuito e limites
Cada chamada do Google Trends custa 5 créditos por chamada bem-sucedida. O tamanho da resposta não muda o preço. Uma série semanal de cinco anos custa o mesmo que uma única semana.
O teste gratuito é de 1.000 créditos por 30 dias sem cartão, o que equivale a 200 chamadas do Google Trends. Depois disso, uma conta ativa continua recebendo 100 créditos recarregados diariamente sempre que o saldo cair abaixo de 100, então um agente de baixo volume roda no plano gratuito indefinidamente.
Os planos pagos começam em US$ 49 por mês por 200.000 créditos, o que equivale a 40.000 chamadas. O preço unitário cai com o volume, de US$ 1,23 por 1.000 chamadas no plano inicial para US$ 0,50 no Business, US$ 0,42 no Growth e US$ 0,37 nos maiores planos de alto volume.
Seu plano também define a concorrência. O teste gratuito permite 1 solicitação por vez, Startup 15, Business 30, Growth 50, e os planos de alto volume vão de 200 a 1.500. Trate o caso de estouro defensivamente em qualquer coisa não supervisionada.
Uma solicitação que volta com status diferente de 200 não é cobrada. Uma chamada bem-sucedida que não encontra nada ainda é uma chamada.
Seleção de ferramentas
O parâmetro de consulta apis decide quais ferramentas seu agente vê. Menos ferramentas significa menos contexto gasto em definições de ferramentas e menos chances de o modelo alcançar a errada.
?apis=google_trends the one tool in this repo
?apis=google_trends,google_serp add Google search
?apis=google_trends,youtube trends plus YouTube
O parâmetro aceita nomes de provedores como google_trends e nomes individuais de APIs. Nomes com erro de digitação são ignorados. Se todos os nomes estiverem errados, a solicitação falha com 400, e o corpo lista tanto o que não foi reconhecido quanto todos os valores válidos. Remova o parâmetro e o mesmo endpoint expõe todas as 57 ferramentas do HasData.
Como se compara
O Google não publica uma API pública de Trends. As duas rotas comuns são a biblioteca não oficial pytrends, que faz engenharia reversa dos mesmos endpoints internos e quebra quando o Google os altera ou limita a taxa do chamador, e criar seu próprio scraper. Este servidor faz esse trabalho por trás de um esquema estável.
| pytrends / DIY | Este servidor | |
|---|---|---|
| Suporte oficial | Nenhum, o Google não oferece API de Trends | Esquema mantido sobre os mesmos dados |
| Limites de taxa e 429s | Frequentes e seus para gerenciar | Tratados por trás do endpoint |
| Saída | Frames do Pandas ou payloads brutos para remodelar | JSON estruturado, valores pré-analisados |
| Configuração | Um ambiente Python e manutenção conforme quebra | Uma chave e uma URL |
| Custo | Grátis, quando funciona | Pago após o teste, 5 créditos por chamada |
Se você já executa pytrends em baixo volume e não se importa em corrigi-lo quando quebrar, essa continua sendo a resposta gratuita. Este servidor é para agentes e pipelines que precisam que os dados cheguem sempre no mesmo formato. |
FAQ
Existe uma API oficial do Google Trends?
Não. O Google nunca disponibilizou uma API pública de Trends. Todas as opções leem os mesmos endpoints internos que o site trends.google.com utiliza. Este é mantido pela HasData e retorna o resultado como JSON estruturado.
O que é um servidor MCP do Google Trends?
Um servidor que expõe o Google Trends como uma ferramenta que um cliente de IA pode chamar. O cliente envia uma chamada de ferramenta pelo Model Context Protocol, o servidor busca os dados e retorna JSON estruturado, e o modelo trabalha com o resultado. Este expõe uma única ferramenta e roda remotamente, então o cliente se conecta a uma URL e não inicia nenhum processo local.
Os números significam volume absoluto de buscas?
Não, e o próprio Google Trends também não. Os valores são interesse relativo escalado de 0 a 100 dentro da consulta, janela e região que você solicitou. Use-os para forma e comparação, não como uma contagem de buscas.
Por que o último ponto de dados é menor que os demais?
O bucket mais recente geralmente ainda está sendo preenchido e retorna com isPartial: true. Descarte-o antes de calcular uma tendência.
Posso comparar vários termos de uma vez?
Sim, em timeseries e geoMap. Passe os termos separados por vírgula em q. Os tipos de consulta relacionada e tópico relacionado aceitam um único termo.
Posso usar isso junto com outras APIs da HasData?
Sim. O parâmetro apis aceita uma lista, e ?apis=google_trends,google_serp dá ao seu agente Trends mais busca do Google. Remova o parâmetro e você obtém tudo.
Conformidade e dados pessoais
A HasData acessa apenas dados publicamente disponíveis. Os termos de uma plataforma podem restringir acesso automatizado, e você é responsável pela sua própria conformidade.
Links da HasData
| Página do produto e construtor de solicitações | Google Trends API |
| Documentação do servidor | MCP server docs |
| Todas as 57 ferramentas em um servidor | HasData/hasdata-mcp |
| Tutoriais para clientes | MCP clients and integrations |
| Todo o resto que extraímos | Google Trends API and 54 more |
| Planos e custos de créditos | Plans and credit costs |
| Chaves e uso | HasData dashboard |
| Lançador Node no npm | @hasdata/google-trends-mcp |
| Lançador Python no PyPI | hasdata-google-trends-mcp |
Desenvolvimento
Este repositório é configuração e documentação para um servidor remoto. Não há etapa de build e nada para containerizar.
Os testes em test/ verificam o contrato da ferramenta, a parte que pode quebrar sem um commit aqui. Eles verificam que ?apis=google_trends retorna exatamente uma ferramenta, que ela ainda declara seu parâmetro obrigatório, que o nome não mudou e que a chave em uso é realmente aceita. Essa última verificação chama a ferramenta de verdade e custa 5 créditos, que é o preço de um canário que pode falhar pelo motivo certo.
# macOS and Linux
HASDATA_API_KEY=your_key_here npm test
# Windows PowerShell
$env:HASDATA_API_KEY="your_key_here"; npm test
A mesma suíte roda em CI a cada push e uma vez por semana em agendamento, porque a lista de ferramentas upstream pode mudar sem que ninguém toque neste repositório. Uma falha significa que a lista de ferramentas mudou, a chave parou de funcionar ou o endpoint ficou inacessível, e a mensagem de asserção indica qual.
Contribuindo
Correções na tabela de parâmetros e na amostra de resposta são a contribuição mais útil, porque são as partes que mais divergem. Inclua a chamada que você fez e a resposta que obteve. Pull requests de forks rodam a suíte sem chave, e as verificações ao vivo são puladas em vez de ficarem vermelhas.
Licença
MIT. Veja LICENSE.