Google Trends MCP Server
Размещаемый сервер Model Context Protocol (MCP), который предоставляет Claude, Cursor, Windsurf и любому другому MCP-клиенту один инструмент для работы с Google Trends. Получайте данные об интересе с течением времени и по регионам, а также популярные и быстро набирающие популярность связанные запросы и темы для любого поискового термина в виде структурированного JSON. Не нужно поддерживать библиотеку для скрейпинга или иметь аккаунт Google.
1 000 бесплатных кредитов ежемесячно, банковская карта не требуется — этого хватит на 100 вызовов Google Trends.
https://mcp.hasdata.com/mcp?apis=google_trends
Содержание
-
Что понадобится
-
Быстрый старт
-
Примеры запросов
-
Инструменты
-
Ошибки и сценарии сбоя
-
Стоимость, бесплатный тариф и ограничения
-
Выбор инструмента
-
Сравнение с аналогами
-
Часто задаваемые вопросы
-
Ссылки HasData
-
Разработка
-
Участие в проекте
-
Лицензия
Что понадобится
MCP-клиент и API-ключ HasData, который можно бесплатно получить в панели управления без банковской карты. Бесплатного тарифа хватит примерно на 200 вызовов в месяц при стоимости 5 кредитов за вызов. Это удалённый сервер, поэтому самый простой способ подключения — указать URL и заголовок x-api-key. Не нужно запускать контейнер, а аккаунт Google не требуется ни на одном этапе. Клиентам, поддерживающим только stdio, поможет лёгкий лаунчер, опубликованный в npm как @hasdata/google-trends-mcp и в PyPI как hasdata-google-trends-mcp. Он описан ниже.
Быстрый старт
URL сервера одинаков для всех клиентов. Мы проверили подключение в Claude Code и Claude Desktop. Остальные примеры соответствуют документированному формату удалённых серверов для каждого клиента.
| Поле | Значение |
|---|---|
| URL | https://mcp.hasdata.com/mcp?apis=google_trends |
| Транспорт | HTTP, с потоковой передачей |
| Заголовок авторизации | x-api-key: HASDATA_API_KEY |
Клиенты с поддержкой OAuth можно подключить по тому же URL и авторизовать без добавления ключа в файл конфигурации.
Claude Code
claude mcp add --transport http google-trends "https://mcp.hasdata.com/mcp?apis=google_trends" \
--header "x-api-key: HASDATA_API_KEY"
Claude Desktop
Откройте Settings, затем Connectors, выберите Add custom connector, вставьте https://mcp.hasdata.com/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" }
}
}
}
Вместо Node можно использовать Python: укажите пакет из PyPI, который uvx запускает без предварительной установки:
{
"mcpServers": {
"google-trends": {
"command": "uvx",
"args": ["hasdata-google-trends-mcp"],
"env": { "HASDATA_API_KEY": "YOUR_KEY" }
}
}
}
Cursor
Используйте ~/.cursor/mcp.json, чтобы настроить сервер для всех проектов, или .cursor/mcp.json — для одного проекта:
{
"mcpServers": {
"google-trends": {
"url": "https://mcp.hasdata.com/mcp?apis=google_trends",
"headers": { "x-api-key": "HASDATA_API_KEY" }
}
}
}
Windsurf
Файл конфигурации — ~/.codeium/windsurf/mcp_config.json. В Windsurf поле называется serverUrl, а не url:
{
"mcpServers": {
"google-trends": {
"serverUrl": "https://mcp.hasdata.com/mcp?apis=google_trends",
"headers": { "x-api-key": "HASDATA_API_KEY" }
}
}
}
VS Code
Добавьте конфигурацию в .vscode/mcp.json в рабочей области:
{
"servers": {
"google-trends": {
"type": "http",
"url": "https://mcp.hasdata.com/mcp?apis=google_trends",
"headers": { "x-api-key": "HASDATA_API_KEY" }
}
}
}
Примеры запросов
Это запросы, а не код. Просто вставьте любой из них — агент сам выберет подходящий инструмент. Для каждого указано количество вызовов: один успешный вызов стоит 10 кредитов.
Построй график интереса к «cold brew coffee» в США за последние 12 месяцев и укажи, в какие недели он достигал пика.
Один вызов, 10 кредитов. Недельный ряд данных возвращается одним запросом.
Покажи быстро набирающие популярность связанные запросы для «cold brew coffee» в США и отметь те, у которых есть статус Breakout.
Один вызов, 10 кредитов.
Сравни интерес к «cold brew» и «iced coffee» во всём мире за последние пять лет и укажи, какой из запросов набирает популярность.
Один вызов, 10 кредитов. Инструмент принимает несколько поисковых терминов в одном запросе timeseries.
Покажи интерес к «sunscreen» по штатам США за последние 90 дней, чтобы было видно, где спрос выше всего.
Один вызов, 10 кредитов. Это данные об интересе по регионам с разбивкой по штатам.
Сравнение нескольких поисковых терминов выполняется одним вызовом timeseries. Данные по регионам, связанные запросы и связанные темы передаются через отдельные значения dataType. Поэтому для запроса, который требует построить график и показать связанные запросы, нужно два вызова.
Инструменты
| Инструмент | Результат |
|---|---|
hasdata_google_trends_search_getTrendsData | Данные об интересе с течением времени, разбивка по географическому уровню, а также популярные и быстро набирающие популярность связанные темы и запросы с относительными оценками. 10 кредитов за вызов |
Инструмент только один, и он работает в режиме чтения. Ниже приведён пример, сокращённый на основе реального вызова; значения меняются вместе с трендами. Воспринимайте его как иллюстрацию структуры данных. Название инструмента ведёт к справке по его конечной точке с полным списком параметров.
В примере показана полезная нагрузка, а не весь ответ. Результат tools/call содержит один текстовый блок, в котором находится JSON с полями url, status, text и json; данные скрейпинга находятся в json. В необработанном ответе JSON-RPC путь к этим данным — result.content[0].text: сначала разберите его, затем обратитесь к .json. Чат-клиент выполнит эту распаковку автоматически, а в коде, который напрямую обращается к конечной точке, её нужно сделать самостоятельно.
Получение данных Google Trends
hasdata_google_trends_search_getTrendsData
Динамика интереса во времени, по регионам, а также связанные запросы и темы для указанного термина.
| Параметр | Тип | Обязательный | Примечания |
|---|---|---|---|
q | string | да | Поисковый запрос. Для timeseries и geoMap можно указать до 5 запросов через запятую, чтобы сравнить их. Шестой запрос приведёт к ошибке 400 |
dataType | string | По умолчанию используется timeseries; также доступны geoMap, relatedTopics и relatedQueries. Для двух типов связанных данных можно указать только один запрос | |
date | string | Период, например now 7-d, today 12-m, today 5-y или all, либо пользовательский диапазон в формате yyyy-mm-dd yyyy-mm-dd | |
geo | string | Код местоположения, например US или US-CA. Если параметр не указан, используются данные по всему миру | |
region | string | Уровень детализации только для geoMap: country (страна), region (субрегион), dma (метрополитенский регион) или city (город). Значение по умолчанию зависит от geo: для всего мира используется уровень country, а после указания geo — более точный | |
cat | string | Идентификатор категории для уточнения запроса. Значение 0 означает все категории | |
gprop | string | Ресурс Google: images, news, froogle (Shopping) или youtube. Если параметр не указан, выполняется поиск в интернете | |
tz | number | Смещение часового пояса в минутах; по умолчанию 420 (PDT). Влияет на распределение данных по часовым интервалам |
Ключ в ответе зависит от значения dataType. Тип timeseries возвращает данные в interestOverTime.timelineData, geoMap — данные об интересе по регионам, а связанные типы — 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. Значение для запроса из rising указывается в процентах, например +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" }
]
}
}
В справочнике по endpoint перечислены все допустимые значения 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. Перед построением графика проверьте, есть ли точки данных.
Идентификатор, отсутствующий в документированном списке, отклоняется до запуска скрейпинга. Параметры geo и cat принимают только значения из перечисления. Неизвестное значение приводит к ошибке 422 с указанием поля и перечнем допустимых вариантов, а не к незаметному отсутствию результатов.
В результатах с данными также указывается requestMetadata.id. Его полезно приводить при обращении в службу поддержки.
Стоимость, бесплатный тариф и ограничения
Каждый успешный вызов Google Trends стоит 10 кредитов. Размер ответа на стоимость не влияет: пятилетний ряд с недельной детализацией стоит столько же, сколько данные за одну неделю.
Бесплатный тариф включает 1 000 кредитов в месяц без привязки карты — этого хватит на 100 вызовов Google Trends. Кредиты обновляются с каждым расчётным циклом, поэтому агент с небольшим объёмом запросов может пользоваться бесплатным тарифом неограниченно долго.
Стоимость платных тарифов начинается от $59 в месяц за 200 000 кредитов — это 20 000 вызовов. Чем больше объём, тем ниже цена: от $1.48 за 1 000 вызовов на начальном тарифе до $0.60 на Basic и $0.41 на тарифах Growth. Актуальные цены указаны на странице тарифов.
Тариф также определяет уровень параллелизма. Бесплатный тариф допускает 1 запрос одновременно, Startup — 5, Basic — 15, а тарифы Growth — от 50 до 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. В теле ответа будут перечислены нераспознанные значения и все допустимые варианты. Если не указывать параметр, тот же endpoint предоставит доступ ко всем 57 инструментам HasData.
Сравнение с альтернативами
Google не предоставляет общедоступный API для Google Trends. Обычно используют один из двух способов: неофициальную библиотеку pytrends, которая обращается к тем же внутренним endpoint и перестаёт работать, когда Google меняет их или ограничивает частоту запросов, либо создают собственный скрейпер. Этот сервер выполняет эту работу и предоставляет стабильную схему.
| pytrends / самостоятельная разработка | Этот сервер | |
|---|---|---|
| Официальная поддержка | Отсутствует: Google не выпускает API Google Trends | Поддерживаемая схема для тех же данных |
| Ограничения частоты запросов и ошибки 429 | Возникают часто, обработка лежит на вас | Обрабатываются на стороне endpoint |
| Формат результата | Таблицы Pandas или исходные данные, которые нужно преобразовывать | Структурированный JSON с предварительно разобранными значениями |
| Настройка | Среда Python и обслуживание по мере возникновения сбоев | Один ключ и один URL |
| Стоимость | Бесплатно, если работает | После исчерпания бесплатного тарифа — платно, 10 кредитов за вызов |
Если вы уже используете pytrends для небольшого объёма запросов и готовы исправлять его после сбоев, этот вариант остаётся бесплатным. Этот сервер предназначен для агентов и конвейеров, которым важно каждый раз получать данные в одинаковом формате.
Часто задаваемые вопросы
Существует ли официальный API Google Trends?
Нет. Google никогда не выпускал общедоступный API Google Trends. Все доступные варианты обращаются к тем же внутренним endpoint, что и сайт trends.google.com. Этот сервер поддерживает HasData и возвращает результаты в виде структурированного JSON.
Что такое MCP-сервер Google Trends?
Это сервер, который предоставляет Google Trends в виде инструмента, доступного AI-клиенту. Клиент отправляет вызов инструмента через 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
| Страница продукта и конструктор запросов | Google Trends API |
| Документация сервера | Документация MCP-сервера |
| Все 57 инструментов на одном сервере | HasData/hasdata-mcp |
| Руководства по клиентам | Клиенты MCP и интеграции |
| Все остальные источники данных | Google Trends API и ещё 54 источника |
| Тарифы и стоимость запросов в кредитах | Тарифы и стоимость запросов в кредитах |
| Ключи и статистика использования | Панель HasData |
| Запуск Node через npm | @hasdata/google-trends-mcp |
| Запуск Python через PyPI | hasdata-google-trends-mcp |
Разработка
Этот репозиторий содержит конфигурацию и документацию удалённого сервера. Сборка не требуется, и упаковывать что-либо в контейнер не нужно.
Тесты в test/ проверяют контракт инструмента — то, что может измениться без коммита в этом репозитории. Они проверяют, что запрос ?apis=google_trends возвращает ровно один инструмент, что в нём по-прежнему указан обязательный параметр, что имя инструмента не изменилось и что используемый ключ действительно принимается. Последняя проверка вызывает инструмент в рабочем режиме и расходует 10 кредитов — такова цена контрольного запроса, который должен завершиться ошибкой, если для этого есть основания.
# 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.