Google Trends MCP Server
Google Trends MCP Server
Claude、Cursor、Windsurf、その他のMCPクライアントに1つのGoogle Trendsツールを提供するホスト型のModel Context Protocol (MCP)サーバーです。任意の検索語について、経時的な関心、地域別の関心、急上昇中およびトップの関連クエリと関連トピックを、すべて構造化JSONとして取得できます。維持すべきスクレイピングライブラリも、Googleアカウントも不要です。
https://mcp.hasdata.com/api/mcp?apis=google_trends
目次
Related MCP server: HasData MCP Server
必要なもの
MCPクライアントと、ダッシュボードから取得したHasData APIキーが必要です。作成は無料でカードは不要、トライアルは5クレジット単位で約200回の呼び出しをカバーします。これはリモートサーバーなので、最も簡単な方法はURLとx-api-keyヘッダーを使うことで、実行するコンテナも、フロー内のどこにもGoogleアカウントも必要ありません。stdioのみに対応したクライアントは、npmの@hasdata/google-trends-mcpおよびPyPIのhasdata-google-trends-mcpとして公開されている軽量ランチャー経由でアクセスします。以下に示します。
クイックスタート
サーバー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" }
}
}
}NodeではなくPythonを使う場合は、ランチャーをPyPIパッケージに置き換えます。これはuvxが手動インストールなしで実行できるパッケージです:
{
"mcpServers": {
"google-trends": {
"command": "uvx",
"args": ["hasdata-google-trends-mcp"],
"env": { "HASDATA_API_KEY": "YOUR_KEY" }
}
}
}全プロジェクトでは~/.cursor/mcp.json、1つのプロジェクトだけでは.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はこのフィールドをurlではなくserverUrlと呼びます:
{
"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クレジットかかるため、各プロンプトには必要な呼び出し回数が注記されています。
過去12か月間の米国における「cold brew coffee」への関心をグラフ化し、どの週がピークだったか教えてください。
呼び出し1回、5クレジット。週次シリーズは1回のリクエストで返ります。
米国における「cold brew coffee」について、急上昇中の関連クエリを教え、Breakoutとマークされたものを強調してください。
呼び出し1回、5クレジット。
世界全体で過去5年間の「cold brew」と「iced coffee」への関心を比較し、どちらが伸びているかを教えてください。
呼び出し1回、5クレジット。このツールは1回のtimeseriesリクエストで複数の検索語を受け取ります。
過去90日間の米国州別の「sunscreen」への関心を表示し、どこで需要が最も高いかを確認できるようにしてください。
呼び出し1回、5クレジット。これは州単位の地域別関心ビューです。
複数の検索語の比較は1回のtimeseries呼び出しにまとめられます。地域別の内訳、関連クエリ、関連トピックはそれぞれ固有のdataTypeを持つため、グラフとその急上昇中のクエリの両方を求めるプロンプトは2回の呼び出しになります。
ツール
読み取り専用のツールが1つあります。以下のサンプルは実際の呼び出しから切り出したもので、数値はトレンドの動きに合わせて変わります。構造として読んでください。ツール名はエンドポイントリファレンスにリンクしており、完全なパラメータリストが記載されています。
サンプルはペイロードであり、レスポンス全体ではありません。tools/callの結果には1つのテキストブロックが含まれ、そのテキスト自体がurl、status、text、jsonを保持するJSONであり、取得したデータはjsonの下にあります。生のJSON-RPCレスポンスからは、result.content[0].textをパースした後に.jsonへ進みます。チャットクライアントはそれを自動的に展開しますが、エンドポイントに直接コードでアクセスする場合は自分で行う必要があります。
Google Trendsデータを取得
hasdata_google_trends_search_getTrendsData
ある検索語について、経時的な関心、地域別の関心、または関連クエリと関連トピックを取得します。
パラメータ | 型 | 必須 | 備考 |
| string | はい | 検索語。 |
| string | デフォルトは | |
| string |
| |
| string |
| |
| string |
| |
| string | 検索語を絞り込むカテゴリID。 | |
| string | Googleプロパティ: | |
| number | タイムゾーンオフセット(分)。デフォルトは |
レスポンスのキーは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" }
]
}
}エンドポイントリファレンスには、このツールが受け付けるすべての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トレンドは、まれな検索語に対して表示できるものがなく、requestMetadata.statusは依然としてokと表示されます。グラフ化する前にポイントを確認してください。
プラットフォームが拒否する識別子は400を返し、requestMetadata.statusはerrorに設定されます。通常は、不明なgeoまたはcatの値を指定した場合に発生します。
データを含む結果にはrequestMetadata.idも含まれており、サポートへの問い合わせで引用する価値があります。
料金、無料枠、制限
Googleトレンドの各呼び出しは、成功した呼び出し1回につき5クレジットかかります。レスポンスサイズによって価格は変わりません。5年間の週次シリーズも1週間分と同じコストです。
無料トライアルはカードなしで30日間1,000クレジットで、Googleトレンドの呼び出し200回分です。その後、アクティブなアカウントは残高が100を下回るたびに毎日100クレジットを補充され続けるため、低ボリュームのエージェントは無料枠で無期限に実行できます。
有料プランは、200,000クレジット(40,000回の呼び出し)で月額$49から始まります。単価はボリュームに応じて下がり、エントリープランでは1,000回あたり$1.23、Businessでは**$0.50**、Growthでは**$0.42**、最大の高ボリュームプランでは**$0.37**です。
Your plan also sets concurrency. The free trial allows 1 request at a time, Startup 15, Business 30, Growth 50, and the high-volume plans run from 200 to 1,500. Handle the overflow case defensively in anything unattended.
A request that comes back non-200 is not billed. A successful call that finds nothing is still a call.
Tool selection
The apis query parameter decides which tools your agent sees. Fewer tools means less context spent on tool definitions, and fewer chances for the model to reach for the wrong one.
?apis=google_trends the one tool in this repo
?apis=google_trends,google_serp add Google search
?apis=google_trends,youtube trends plus YouTubeThe parameter takes provider names like google_trends and individual API names. Misspelled names are ignored. If every name is wrong the request fails with 400, and the body lists both what it did not recognise and every valid value. Drop the parameter and the same endpoint exposes all 57 HasData tools.
How it compares
Google does not publish a public Trends API. The two common routes are the unofficial pytrends library, which reverse-engineers the same internal endpoints and breaks when Google changes them or rate-limits the caller, and rolling your own scraper. This server does that work behind a stable schema.
pytrends / DIY | This server | |
Official support | None, Google ships no Trends API | Maintained schema over the same data |
Rate limits and 429s | Frequent and yours to manage | Handled behind the endpoint |
Output | Pandas frames or raw payloads to reshape | Structured JSON, values pre-parsed |
Setup | A Python environment and upkeep as it breaks | One key and one URL |
Cost | Free, when it works | Paid past the trial, 5 credits a call |
If you already run pytrends at low volume and do not mind fixing it when it breaks, that stays the free answer. This server is for agents and pipelines that need the data to arrive the same shape every time.
FAQ
Is there an official Google Trends API?
No. Google has never shipped a public Trends API. Every option reads the same internal endpoints that the trends.google.com site uses. This one is maintained by HasData and returns the result as structured JSON.
What is a Google Trends MCP server?
A server that exposes Google Trends as a tool an AI client can call. The client sends a tool call over the Model Context Protocol, the server fetches the data and returns structured JSON, and the model works with the result. This one exposes a single tool and runs remotely, so the client connects to a URL and starts no local process.
Do the numbers mean absolute search volume?
No, and neither does Google Trends itself. The values are relative interest scaled 0 to 100 within the query, window and region you asked for. Use them for shape and comparison, not as a count of searches.
Why is the last data point lower than the rest?
The most recent bucket is usually still filling in and comes back with isPartial: true. Drop it before computing a trend.
Can I compare several terms at once?
Yes, in timeseries and geoMap. Pass the terms comma-separated in q. The related-query and related-topic types take a single term.
Can I use this together with other HasData APIs?
Yes. The apis parameter takes a list, and ?apis=google_trends,google_serp gives your agent Trends plus Google search. Drop the parameter and you get everything.
Compliance and personal data
HasData accesses publicly available data only. A platform's terms may restrict automated access, and you are responsible for your own compliance.
HasData links
Product page and request builder | |
Server documentation | |
All 57 tools in one server | |
Client walkthroughs | |
Everything else we scrape | |
Plans and credit costs | |
Keys and usage | |
Node launcher on npm | |
Python launcher on PyPI |
Development
This repository is configuration and documentation for a remote server. There is no build step and nothing to containerize.
The tests in test/ assert the tool contract, the part that can break without a commit here. They check that ?apis=google_trends returns exactly one tool, that it still declares its required parameter, that the name has not changed, and that the key in use is actually accepted. That last check calls the tool for real and costs 5 credits, which is the price of a canary that can fail for the right reason.
# macOS and Linux
HASDATA_API_KEY=your_key_here npm test
# Windows PowerShell
$env:HASDATA_API_KEY="your_key_here"; npm testThe same suite runs in CI on every push and once a week on a schedule, because the upstream tool list can change without anyone touching this repository. A failure means the tool list moved, the key stopped working, or the endpoint was unreachable, and the assertion message says which.
Contributing
Corrections to the parameter table and the response sample are the most useful contribution, because those are the parts that drift. Include the call you made and the response you got. Pull requests from forks run the suite without a key, and the live checks skip instead of going red.
License
MIT. See 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.
Google Trends: Search, Images, News, Shopping over time, growth metrics. Free key at trendsmcp.ai
Google Trends JSON + trend summary, $0.0025/keyword; rate-limited keywords never charged.
Google Trends Scraper API: Interest and Trending Now
Related MCP Servers
- AlicenseAqualityAmaintenanceA Model Context Protocol (MCP) server that provides web search capabilities through DuckDuckGo, with additional features for content fetching and parsing.329,666 PyPI1,551MIT

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