Google Trends MCP Server
Google Trends MCP Server
Размещённый сервер Model Context Protocol (MCP), который даёт Claude, Cursor, Windsurf и любому другому MCP-клиенту один инструмент Google Trends. Получайте интерес с течением времени, интерес по регионам, а также растущие и популярные связанные запросы и темы для любого термина — всё в виде структурированного JSON, без библиотеки для скрапинга, которую нужно поддерживать, и без аккаунта Google.
https://mcp.hasdata.com/api/mcp?apis=google_trends
Contents
Related MCP server: HasData MCP Server
Что вам нужно
Вам понадобятся MCP-клиент и ключ API HasData из панели управления, который можно создать бесплатно без карты; пробный период покрывает около 200 вызовов по тарифу 5 кредитов. Это удалённый сервер, поэтому самый простой путь — URL-адрес и заголовок x-api-key, без контейнера для запуска и без аккаунта Google в процессе. Клиент, который говорит только на stdio, подключается к нему через тонкий лаунчер, опубликованный как @hasdata/google-trends-mcp на npm и hasdata-google-trends-mcp на PyPI, как показано ниже.
Быстрый старт
URL сервера одинаков для всех клиентов. Мы запускаем его вживую в Claude Code и Claude Desktop. Остальные блоки следуют задокументированному формату каждого клиента для удалённого сервера.
Поле | Значение |
URL |
|
Транспорт | HTTP, потоковый |
Заголовок авторизации |
|
Клиенты с поддержкой OAuth могут добавить тот же URL как коннектор и войти, не помещая ключ в конфигурационный файл.
claude mcp add --transport http google-trends "https://mcp.hasdata.com/api/mcp?apis=google_trends" \
--header "x-api-key: HASDATA_API_KEY"Настройки, затем Коннекторы, затем Добавить пользовательский коннектор, затем вставьте https://mcp.hasdata.com/api/mcp?apis=google_trends и войдите.
Для пути через конфигурационный файл: Claude Desktop загружает только локальные (stdio) серверы, поэтому он обращается к удалённому серверу через stdio-лаунчер. Пакет @hasdata/google-trends-mcp и есть этот лаунчер, и он читает ключ из окружения. Добавьте это в claude_desktop_config.json:
{
"mcpServers": {
"google-trends": {
"command": "npx",
"args": ["-y", "@hasdata/google-trends-mcp"],
"env": { "HASDATA_API_KEY": "YOUR_KEY" }
}
}
}Для Python вместо Node замените лаунчер на пакет PyPI, который uvx запускает без ручной установки:
{
"mcpServers": {
"google-trends": {
"command": "uvx",
"args": ["hasdata-google-trends-mcp"],
"env": { "HASDATA_API_KEY": "YOUR_KEY" }
}
}
}~/.cursor/mcp.json для всех проектов или .cursor/mcp.json для одного:
{
"mcpServers": {
"google-trends": {
"url": "https://mcp.hasdata.com/api/mcp?apis=google_trends",
"headers": { "x-api-key": "HASDATA_API_KEY" }
}
}
}~/.codeium/windsurf/mcp_config.json. Windsurf называет поле serverUrl, а не url:
{
"mcpServers": {
"google-trends": {
"serverUrl": "https://mcp.hasdata.com/api/mcp?apis=google_trends",
"headers": { "x-api-key": "HASDATA_API_KEY" }
}
}
}.vscode/mcp.json в рабочей области:
{
"servers": {
"google-trends": {
"type": "http",
"url": "https://mcp.hasdata.com/api/mcp?apis=google_trends",
"headers": { "x-api-key": "HASDATA_API_KEY" }
}
}
}Примеры промптов
Промпты, а не код. Вставьте один — и агент сам выберет инструмент. Каждый снабжён пометкой о том, сколько вызовов он требует, потому что каждый успешный вызов стоит 5 кредитов.
Постройте график интереса к "cold brew coffee" в США за последние 12 месяцев и скажите, на каких неделях он достиг пика.
Один вызов, 5 кредитов. Недельный ряд возвращается одним запросом.
Для "cold brew coffee" в США покажите растущие связанные запросы и отметьте те, что помечены как Breakout.
Один вызов, 5 кредитов.
Сравните интерес к "cold brew" и "iced coffee" по всему миру за пять лет и скажите, какой из них растёт.
Один вызов, 5 кредитов. Инструмент принимает несколько терминов в одном запросе timeseries.
Покажите интерес к "sunscreen" по штатам США за последние 90 дней, чтобы я увидел, где спрос самый высокий.
Один вызов, 5 кредитов. Это представление интереса по регионам с детализацией до штата.
Сравнение нескольких терминов проходит в одном вызове timeseries. Разбивка по регионам, связанные запросы и связанные темы — каждый свой dataType, поэтому промпт, которому нужны и график, и растущие запросы, — это два вызова.
Инструменты
Один инструмент, только чтение. Пример ниже сокращён из реального вызова, и числа меняются вместе с трендом. Воспринимайте его как форму. Имя инструмента ведёт на справочник по эндпоинту, в котором есть полный список параметров.
Пример — это полезная нагрузка, а не весь ответ. Результат tools/call содержит один текстовый блок, и этот текст сам является JSON с полями url, status, text и json, а данные, полученные скрапингом, лежат в json. В сыром ответе JSON-RPC путь такой: result.content[0].text, затем парсинг, затем .json. Чат-клиент разворачивает это за вас, а код, обращающийся к эндпоинту напрямую, — нет.
Получить данные Google Trends
hasdata_google_trends_search_getTrendsData
Интерес с течением времени, по регионам или связанные запросы и темы для термина.
Параметр | Тип | Обязателен | Примечания |
| string | да | Искомый термин. |
| string | По умолчанию | |
| string | Окно вроде | |
| string | Код местоположения, например | |
| string | Детализация только для | |
| string | Идентификатор категории для уточнения термина. | |
| string | Свойство Google: | |
| number | Смещение часового пояса в минутах, по умолчанию |
Ключ ответа зависит от dataType. timeseries возвращает interestOverTime.timelineData, geoMap возвращает интерес по регионам, а типы related возвращают relatedQueries или relatedTopics, каждый из которых разделён на rising и top. Читайте ключ, соответствующий запрошенному типу.
timeseries (по умолчанию) возвращает значение от 0 до 100 для каждой точки — и строкой, и уже разобранным в extractedValue. Самая последняя точка часто содержит isPartial: true, то есть неделя ещё заполняется. Отбрасывайте её перед вычислением тренда, иначе последний столбец будет выглядеть как спад, которого на самом деле нет.
{
"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 разделяется на rising и top. Растущая запись выглядит как процент, например +300%, или как Breakout для скачка, слишком большого для оценки, а extractedValue даёт число за ней. Breakout возвращается со сторожевым extractedValue, значительно превышающим любой реальный процент, поэтому сортируйте по строковой метке, а не по сырому числу.
{
"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" }
]
}
}В справочнике эндпоинта перечислены все форматы geo, cat и дат, которые принимает инструмент.
Ошибки и сценарии сбоев
Ваш клиент почти никогда не видит HTTP-код ошибки от вызова инструмента. Слой MCP отвечает кодом 200 и помещает сбой внутрь результата, с isError, установленным в true, и причиной в виде текста. Агент читает сообщение там, где вы могли бы ожидать строку статуса.
Неверный ключ проявляется как вывод инструмента, а не как неудачное подключение. tools/list принимает любой непустой ключ и возвращает инструмент, поэтому клиент завершает рукопожатие и показывает зелёный индикатор. Тогда первый вызов инструмента возвращается с isError: true и текстом HasData API error: 401 Unauthorized. Следите за этой строкой, потому что ничто раньше в процессе не сообщает о проблеме.
Отсутствующий ключ — это единственная настоящая HTTP-ошибка. Авторизация выполняется перед любым инструментом, и само подключение завершается с кодом 401. Заголовки CORS присутствуют, и браузерный клиент видит статус, а не непрозрачный сетевой сбой.
Аргумент, нарушающий схему инструмента, отклоняется до того, как превратится в скрапинг. Сервер отвечает isError: true и текстом MCP error -32602: Input validation error, называя поле, вызвавшее ошибку. Ничего не загружается и не списывается.
Термин со слишком малым объёмом поиска возвращает успешный результат с пустыми массивами данных, а не ошибку. Google Trends нечего показать для редкого термина, и requestMetadata.status по-прежнему равен ok. Проверяйте наличие точек перед построением графика.
Идентификатор, отклонённый платформой, возвращает 400 с requestMetadata.status, установленным в error. Обычно это происходит при неизвестном значении geo или cat.
Результаты с данными также содержат requestMetadata.id, который стоит указать в обращении в поддержку.
Цены, бесплатный тариф и лимиты
Каждый вызов Google Trends стоит 5 кредитов за успешный вызов. Размер ответа не меняет цену. Недельный ряд за пять лет стоит столько же, сколько одна неделя.
Бесплатный пробный период — 1 000 кредитов на 30 дней без карты, это 200 вызовов Google Trends. После этого активный аккаунт продолжает получать пополнение на 100 кредитов каждый день, когда его баланс опускается ниже 100, так что агент с низким объёмом работает на бесплатном тарифе бесконечно.
Платные тарифы начинаются с $49 в месяц за 200 000 кредитов, то есть 40 000 вызовов. Цена за единицу снижается с объёмом: от $1.23 за 1 000 вызовов на начальном тарифе до $0.50 на Business, $0.42 на Growth и $0.37 на самых крупных высокообъёмных тарифах.
Ваш тариф также задаёт уровень параллелизма. Бесплатная пробная версия допускает 1 запрос одновременно, Startup — 15, Business — 30, Growth — 50, а высокообъёмные тарифы — от 200 до 1,500. В любом автоматическом сценарии обрабатывайте случай превышения лимита защитным образом.
Запрос, вернувшийся с кодом не 200, не тарифицируется. Успешный вызов, который ничего не нашёл, всё равно считается вызовом.
Выбор инструментов
Параметр запроса apis определяет, какие инструменты видит ваш агент. Чем меньше инструментов, тем меньше контекста тратится на определения инструментов и тем меньше шансов, что модель выберет не тот.
?apis=google_trends the one tool in this repo
?apis=google_trends,google_serp add Google search
?apis=google_trends,youtube trends plus YouTubeПараметр принимает имена провайдеров, такие как google_trends, и отдельные имена API. Имена с опечатками игнорируются. Если все имена указаны неверно, запрос завершается ошибкой 400, а в теле ответа перечислены и то, что не удалось распознать, и все допустимые значения. Если опустить параметр, тот же эндпоинт откроет доступ ко всем 57 инструментам HasData.
Сравнение
Google не публикует публичного API Trends. Два распространённых пути — неофициальная библиотека pytrends, которая на основе реверс-инжиниринга использует те же внутренние эндпоинты и ломается, когда Google их меняет или ограничивает частоту запросов, а также собственный скрейпер. Этот сервер выполняет эту работу за стабильной схемой.
pytrends / DIY | Этот сервер | |
Официальная поддержка | Нет, Google не предоставляет API Trends | Поддерживаемая схема поверх тех же данных |
Ограничения частоты и 429 | Частые, и разбираться с ними приходится вам | Обрабатываются за эндпоинтом |
Вывод | Фреймы Pandas или сырые ответы, требующие преобразования | Структурированный JSON, значения уже разобраны |
Настройка | Среда Python и поддержка при поломках | Один ключ и один URL |
Стоимость | Бесплатно, пока работает | Платно после пробного периода, 5 кредитов за вызов |
Если вы уже используете pytrends при низких объёмах и не против чинить его, когда он ломается, это остаётся бесплатным решением. Этот сервер — для агентов и пайплайнов, которым нужно, чтобы данные всегда приходили в одном и том же виде.
FAQ
Существует ли официальный Google Trends API?
Нет. Google никогда не выпускал публичного API Trends. Все варианты используют те же внутренние эндпоинты, что и сайт trends.google.com. Этот вариант поддерживается HasData и возвращает результат в виде структурированного JSON.
Что такое MCP-сервер Google Trends?
Это сервер, который предоставляет Google Trends как инструмент, вызываемый ИИ-клиентом. Клиент отправляет вызов инструмента по протоколу Model Context Protocol, сервер получает данные и возвращает структурированный JSON, а клиент работает с результатом. Этот сервер предоставляет один инструмент и работает удалённо, поэтому клиент подключается по URL и не запускает никаких локальных процессов.
Означают ли числа абсолютный объём поиска?
Нет, и в самом Google Trends тоже. Значения — это относительный интерес по шкале от 0 до 100 в пределах запрошенных вами запроса, периода и региона. Используйте их для оценки формы и сравнения, а не как количество поисков.
Почему последняя точка данных ниже остальных?
Самый свежий сегмент обычно ещё заполняется и возвращается с isPartial: true. Отбросьте его перед вычислением тренда.
Можно ли сравнивать несколько запросов одновременно?
Да, в timeseries и geoMap. Передайте запросы через запятую в q. Типы related-query и related-topic принимают один запрос.
Можно ли использовать это вместе с другими API HasData?
Да. Параметр apis принимает список, а ?apis=google_trends,google_serp даёт вашему агенту Trends плюс поиск Google. Уберите параметр — и вы получите всё.
Соответствие требованиям и персональные данные
HasData обращается только к общедоступным данным. Условия платформы могут ограничивать автоматический доступ, и вы сами отвечаете за соблюдение требований.
Ссылки HasData
Страница продукта и конструктор запросов | |
Документация сервера | |
Все 57 инструментов в одном сервере | |
Инструкции для клиентов | |
Всё остальное, что мы парсим | |
Тарифы и стоимость кредитов | |
Ключи и использование | |
Лаунчер для Node на npm | |
Лаунчер для Python на PyPI |
Разработка
Этот репозиторий — конфигурация и документация для удалённого сервера. Здесь нет шага сборки и нечего контейнеризировать.
Тесты в test/ проверяют контракт инструмента — ту часть, которая может сломаться без коммита здесь. Они проверяют, что ?apis=google_trends возвращает ровно один инструмент, что он по-прежнему объявляет свой обязательный параметр, что имя не изменилось и что используемый ключ действительно принимается. Последняя проверка по-настоящему вызывает инструмент и стоит 5 кредитов — это цена канарейки, которая может упасть по правильной причине.
# macOS and Linux
HASDATA_API_KEY=your_key_here npm test
# Windows PowerShell
$env:HASDATA_API_KEY="your_key_here"; npm testТот же набор тестов запускается в CI при каждом пуше и раз в неделю по расписанию, потому что исходный список инструментов может измениться, даже если никто не трогает этот репозиторий. Сбой означает, что список инструментов изменился, ключ перестал работать или эндпоинт был недоступен, и в сообщении проверки указано, что именно.
Участие в разработке
Наиболее полезный вклад — исправления таблицы параметров и примера ответа, потому что именно эти части расходятся с реальностью. Приложите выполненный вами вызов и полученный ответ. Pull request из форков запускает набор тестов без ключа, и «живые» проверки пропускаются, а не становятся красными.
Лицензия
MIT. См. LICENSE.
Available Tools
1 toolhasdata_google_trends_search_getTrendsDatagoogle_trends_search: GET /AInspect
Get Google Trends Data
Pulls Google Trends data for one or more queries with geo targeting, region granularity (country/subregion/metro/city), date range, category, time zone, Google property (web, images, news, shopping, YouTube), and dataType (timeseries, geoMap, relatedTopics, relatedQueries). Returns interest-over-time series, geo-level breakdowns, and rising/top related topics/queries with relative scores. Use for keyword/content strategy, demand forecasting, seasonality analysis, topic discovery, campaign timing, and adding live-trend signals to marketing or research agents.
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | Specify the search term for which you want to retrieve trends data. | |
| tz | No | Defines a time zone offset in minutes. The default value is 420 (Pacific Daylight Time (PDT): UTC-7). The valid range for this parameter is from -1439 to 1439. To calculate the `tz` value for a specific time zone, you can use the time difference between UTC +0 and the desired time zone. Examples: - `420`: Pacific Daylight Time (PDT) - `60`: Central European Time (CET) - `-540`: Japan Standard Time | |
| cat | No | Category of the search term. The default value is 0 ("All categories"). Provide one exact documented value (1133 allowed), e.g. `0`, `3`. | |
| geo | No | Specifies the location for the search. Defaults to Worldwide if not set or empty. Provide one exact documented value (3517 allowed), e.g. `AF`, `AF-BDS`. | |
| date | No | Defines a date range for the search. Available options: - `now 1-H`: Past hour - `now 4-H`: Past 4 hours - `now 1-d`: Past day - `now 7-d`: Past 7 days - `today 1-m`: Past 30 days - `today 3-m`: Past 90 days - `today 12-m`: Past 12 months - `today 5-y`: Past 5 years - `all`: 2004 - present You can also specify a custom date range using one of the following formats: - `yyyy-mm-dd yyyy-mm-dd` - (e.g. 2021-10-15 2022-05-25) for dates from 2004 to present. - `yyyy-mm-ddThh yyyy-mm-ddThh` - (e.g. 2022-05-19T10 2022-05-24T22) for dates with hours within a week range. The hours will be calculated based on the tz (time zone) parameter. | |
| gprop | No | Sorts results by a specific property. The default property is Web Search (applied when the gprop parameter is not set or empty). Available options: - `images`: Image Search - `news`: News Search - `froogle`: Google Shopping - `youtube`: YouTube Search | |
| region | No | Used to get more specific results when using "Interest by region" data type. Other data types do not accept this parameter. The default value depends on the geo location that is set. Available options: - `country`: Country - `region`: Subregion - `dma`: Metro - `city`: City Note: Not all region options will return results for every geo location. | |
| dataType | No | Defines the type of search to perform. Available options: - `timeseries`: Interest over time (default). Accepts both single and multiple queries per search. - `geoMap`: Interest by region. Accepts both single and multiple queries per search. - `relatedTopics`: Related topics. Accepts only single query per search. - `relatedQueries`: Related queries. Accepts only single query per search. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of explaining behavior. It implies a read-only data retrieval operation through words like 'Pulls' and 'Returns', and mentions no destructive side effects. However, it does not explicitly state that the operation is read-only, nor does it mention authentication, rate limits, or potential errors, leaving some behavioral aspects implicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the core purpose, followed by a compact summary of parameters and use cases. It avoids redundancy and stays focused, though the final list of use cases adds length without critical operational detail. Overall it is well-structured and not overly verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Without an output schema, the description gives a reasonable overview of expected outputs (interest-over-time series, geo-level breakdowns, related topics/queries with relative scores). It also covers parameter capabilities and domain use cases. It does not describe response formats, pagination, or error conditions, but given the tool's complexity and lack of output schema, the description is fairly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All eight parameters have detailed descriptions, covering defaults, allowed values, and format examples. The q parameter is described as a singular 'search term' while the main description says 'one or more queries', leaving ambiguity about how to pass multiple terms. Most other parameters are very well explained, but this minor gap prevents a perfect score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves Google Trends data, enumerates the key parameters (geo, region, date, category, time zone, property, dataType), and distinguishes it from sibling tools by focusing specifically on Trends. The verb 'Pulls' and the listed outputs make the tool's purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit use cases such as keyword/content strategy, demand forecasting, seasonality analysis, and topic discovery, which strongly signal when an agent should select this tool. It does not explicitly mention when not to use it or point to alternatives, but given there is no other Google Trends sibling tool, the guidance is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
v1.0.0- First observed
hasdata_google_trends_search_getTrendsData
TDQS
Scored across 1 tool
With only a single tool, there is no risk of overlapping purposes or misselection. The single tool's scope and parameters are clearly described, making the tool's purpose immediately identifiable.
The tool name combines snake_case and camelCase ('getTrendsData') with a vendor-specific prefix, so the naming style is internally inconsistent. With only one tool, there is no broader pattern for the server to enforce.
One tool for a specialized Google Trends server is borderline. The tool is very broad and covers multiple data types, so it is usable, but it places a large command surface into a single entry point that might be easier to split into multiple focused tools.
The tool covers the full Google Trends feature set: timeseries, geo maps, related topics/queries, various filters, and property selection. No obvious major gap in the domain space.
Maintenance
Related MCP Connectors
Google Trends data as JSON: interest over time, rising and top queries, regions, Trending Now.
1Google Trends: Search, Images, News, Shopping over time, growth metrics. Free key at trendsmcp.ai
Google Trends Scraper API: Interest and Trending Now
Bulk Google Trends: interest over time, regions, rising queries and plain-English trend summaries.
Related MCP Servers
- AlicenseAqualityAmaintenanceA Model Context Protocol (MCP) server that provides web search capabilities through DuckDuckGo, with additional features for content fetching and parsing.321,863 PyPI1,546MIT

HasData MCP Serverofficial
AlicenseAqualityAmaintenanceDirect access to 40+ scraping and search tools. Extract structured data from Google (Search, Maps, Trends), Amazon, Airbnb, Social Media, and any web page directly into your AI agent.6320MIT- AlicenseBqualityDmaintenanceProvides access to Google Trends data including status, trending questions, and trending topics via MCP tools.321 npm34MIT
- AlicenseNot gradedqualityBmaintenanceProvides Google Search trend data as an MCP tool, with historical series, growth percentages, and live trending searches, no scraping or rate limits.1MIT