关于 HasData Google Trends
HasData Google Trends 是托管式 MCP 服务,可查询 Google Trends 数据。适合需要时间序列、地区分布及相关查询或主题 JSON 结果的分析人员和 Agent。
主要功能
- 01查看兴趣随时间变化
- 02按地区查看兴趣分布
- 03获取上升及热门相关查询
- 04查看带相对分数的相关主题
适用场景
- 01追踪搜索词的兴趣变化
- 02比较多个搜索词的热度
- 03查找兴趣较高的地区
- 04识别上升中的相关查询
MCP 相关
向 MCP 客户端提供一个只读的 Google Trends 工具,以及提示词和参数资源。客户端通过托管 HTTP 端点连接,可使用 x-api-key 请求头或支持 OAuth 的连接方式。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://mcp.hasdata.com/mcp?apis=google_trendsclaude mcp add --transport http com-hasdata-google-trends https://mcp.hasdata.com/mcp?apis=google_trends{"mcpServers":{"com-hasdata-google-trends":{"type":"http","url":"https://mcp.hasdata.com/mcp?apis=google_trends"}}}在 Cursor 中打开{"servers":{"com-hasdata-google-trends":{"type":"http","url":"https://mcp.hasdata.com/mcp?apis=google_trends"}}}在 VS Code 中打开{"mcpServers":{"com-hasdata-google-trends":{"type":"http","url":"https://mcp.hasdata.com/mcp?apis=google_trends"}}}{"mcpServers":{"com-hasdata-google-trends":{"serverUrl":"https://mcp.hasdata.com/mcp?apis=google_trends"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
https://mcp.hasdata.com/mcp?apis=google_trends需要授权工具
2| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| pets | number | 否 | 宠物数量。 |
| neLat | number | 否 | 地图边界框东北角的纬度。提供全部四个边界框坐标后,将在框内搜索房源,而不是按位置搜索。 |
| neLng | number | 否 | 地图边界框东北角的经度。 |
| swLat | number | 否 | 地图边界框西南角的纬度。 |
| swLng | number | 否 | 地图边界框西南角的经度。 |
| adults | number | 否 | 成人数量。 |
| checkIn | string | 是 | 房源的入住日期。 |
| infants | number | 否 | 婴幼儿数量。 |
| checkOut | string | 否 | 房源的退房日期。 |
| children | number | 否 | 子女数量。 |
| location | string | 否 | 用于搜索房源的地点。除非提供完整地图边界框(neLat、neLng、swLat、swLng),否则必填。 |
| nextPageToken | string | 否 | 用于获取下一页结果的令牌。 |
详细介绍
Google Trends MCP 服务
托管式 Model Context Protocol(MCP)服务,为 Claude、Cursor、Windsurf 及其他 MCP 客户端提供一个 Google Trends 工具。查询任意词条的热度随时间变化、各地区热度,以及相关查询和主题的上升趋势与热门内容,所有结果均为结构化 JSON;无需维护抓取库,也无需 Google 账号。
每月可免费使用 1,000 个点数,无需绑定银行卡,相当于调用 Google Trends 100 次。
https://mcp.hasdata.com/mcp?apis=google_trends
目录
所需条件
一个 MCP 客户端,以及从控制面板获取的 HasData API 密钥。注册免费,无需绑定银行卡;免费额度按每次调用 10 个点数计算,每月约可调用 100 次。这是一个远程服务,因此最简单的接入方式是使用 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" }
}
}
}
如果要使用 Python 而非 Node,可将启动器替换为 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" }
}
}
}
示例提示词
用提示词,而不是代码。粘贴一条提示词,Agent 就会自行选择工具。每条例子都标注了所需的调用次数,因为每次成功调用需消耗 10 个积分。
绘制美国过去 12 个月“cold brew coffee”的关注度图表,并告诉我关注度在哪几周达到峰值。
调用一次,10 个积分。周度序列会在单个请求中返回。
给出美国“cold brew coffee”的上升相关查询,并标出其中标记为 Breakout 的查询。
调用一次,10 个积分。
对比过去五年全球“cold brew”和“iced coffee”的关注度,并说明哪一种正在增长。
调用一次,10 个积分。该工具可在一次时间序列请求中处理多个词条。
展示过去 90 天美国各州对“sunscreen”的关注度,以便查看需求最高的地区。
调用一次,10 个积分。这是按州粒度显示的地区关注度视图。
多个词条的比较通过一次 timeseries 调用完成。地区细分、相关查询和相关主题各自属于独立的 dataType,因此,既要图表又要上升相关查询的提示词需要调用两次。
工具
| 工具 | 返回内容 |
|---|---|
hasdata_google_trends_search_getTrendsData | 一段时间内的关注度序列、地理级别细分,以及带相对得分的上升/热门相关主题和查询。每次调用 10 个积分 |
这是一个只读工具。下面的示例摘自真实调用,但数字会随着趋势变化。请将其视为趋势轮廓。工具名称链接到其端点参考,其中列出了完整的参数清单。
示例展示的是载荷,而非完整响应。tools/call 结果包含一个文本块,该文本本身是一个包含 url、status、text 和 json 的 JSON 对象,抓取的数据位于 json 下。对于原始 JSON-RPC 响应,路径为 result.content[0].text,解析后再取 .json。聊天客户端会为你解包,而直接与端点交互的代码则不会。
获取 Google Trends 数据
hasdata_google_trends_search_getTrendsData
查询某个词的关注度趋势、区域分布或相关查询和主题。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
q | string | 是 | 搜索词。timeseries 和 geoMap 最多可接受 5 个以逗号分隔的词进行比较,第 6 个词会收到 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 | 用于缩小词语范围的类别 ID。0 表示所有类别 | |
gprop | string | Google 属性:images、news、froogle(购物)或 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。上升条目的值以百分比形式显示,例如 +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 和日期格式。
提示词和资源
该服务提供一个提示词,即现成的工作流,客户端可以直接提供给用户,而不必让用户自行编写工具调用。
| 提示词 | 功能 |
|---|---|
google_trends | 查看某个主题的关注度如何随时间变化。 |
此外,该服务还提供 5 个资源,每个资源对应一个可接受值为固定列表的参数。读取资源比从一次被拒绝的调用中了解相关词汇更省事,而且不消耗积分。每个 URI 的格式为 hasdata://google_trends/<parameter>。
| 参数 | 值数量 | 用途 |
|---|---|---|
geo | 3517 | 指定搜索地点。如果未设置或为空,默认值为 Worldwide。 |
region | 4 | 使用“按地区划分的关注度”数据类型时,用于获取更具体的结果。其他数据类型不接受此参数。默认值取决于所设置的 geo 位置。可选项:- country:国家/地区 - region:次级地区 - dma:都市区 - city:城市 注意:并非所有地区选项都能在每个 geo 位置返回结果。 |
dataType | 4 | 定义要执行的搜索类型。可选项:- timeseries:随时间变化的关注度(默认)。每次搜索可接受单个或多个查询。 - geoMap:按地区划分的关注度。每次搜索可接受单个或多个查询。 - relatedTopics:相关主题。每次搜索仅接受单个查询。 - relatedQueries:相关查询。每次搜索仅接受单个查询。 |
cat | 1133 | 搜索词的类别。默认值为 0(“所有类别”)。 |
gprop | 4 | 按特定属性对结果排序。默认属性为网页搜索(未设置 gprop 参数或参数为空时使用)。可选项:- images:图片搜索 - news:新闻搜索 - froogle:Google 购物 - youtube:YouTube 搜索 |
两个列表都无需 API 密钥即可获取,因此客户端可以在用户注册前读取这些列表。
错误和故障路径
客户端几乎不会从工具调用中看到 HTTP 错误代码。MCP 层会返回 200,并将故障放在结果中,设置 isError 为 true,并以文本形式给出原因。Agent 读取的是一条消息,而不是你可能预期的状态行。
错误的密钥会显示为工具输出,而不是连接失败。 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 个额度点,无需绑定银行卡,可调用 Google Trends 100 次。额度会随计费周期续订,因此低调用量的 Agent 可以一直使用免费额度。
付费方案起价为每月 $59,包含 200,000 个额度点,即 20,000 次调用。调用量越大,单价越低:入门方案每 1,000 次调用 $1.48,Basic 方案为 $0.60,Growth 各档方案为 $0.41。当前价格请见定价页面。
方案还决定并发数。免费额度允许同时处理 1 个请求,Startup 为 5 个,Basic 为 15 个,Growth 各档为 50 到 500 个。在任何无人值守的场景中,都应谨慎处理超出限制的情况。
未返回 200 状态码的请求不会计费。成功但未找到任何结果的调用仍会计费。
工具选择
apis 查询参数决定 Agent 能看到哪些工具。工具越少,工具定义占用的上下文就越少,模型选错工具的可能性也越低。
?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 没有发布公开的 Trends API。常见的两种做法是使用非官方的 pytrends 库(它对相同的内部端点进行逆向工程,在 Google 更改端点或限制调用方速率时就会失效),以及自行编写爬虫。此 MCP 服务在稳定的架构下完成了这些工作。
| pytrends / 自行实现 | 此 MCP 服务 | |
|---|---|---|
| 官方支持 | 无,Google 未发布 Trends API | 基于相同数据维护架构 |
| 速率限制和 429 错误 | 经常出现,需自行处理 | 由端点负责处理 |
| 输出 | 需要整理的 Pandas 数据帧或原始载荷 | 结构化 JSON,值已预解析 |
| 设置 | Python 环境,以及故障后的维护工作 | 一个密钥和一个 URL |
| 费用 | 能正常运行时免费 | 超出免费额度后收费,每次调用 10 个额度点 |
如果你已经以较低调用量运行 pytrends,并且不介意在它出故障时进行修复,那么它仍然是免费的选择。此 MCP 服务适用于需要每次都以相同格式获取数据的 Agent 和流水线。
常见问题
有官方的 Google Trends API 吗?
没有。Google 从未发布过公开的 Trends API。所有方案读取的都是 trends.google.com 网站使用的相同内部端点。此服务由 HasData 维护,并以结构化 JSON 返回结果。
什么是 Google Trends MCP 服务?
它是一个将 Google Trends 暴露为 AI 客户端可调用工具的服务。客户端通过 Model Context Protocol 发送工具调用,服务获取数据并返回结构化 JSON,模型再处理结果。此服务只暴露一个工具,并且在远程运行,因此客户端连接 URL 即可使用,无需启动本地进程。
这些数字代表绝对搜索量吗?
不代表,Google Trends 本身也不代表。对于你指定的查询、时间范围和地区,这些值表示相对热度,范围为 0 到 100。应将其用于观察趋势和进行比较,而不是当作搜索次数。
为什么最新的数据点比其他数据点低?
最新的数据区间通常尚未填满,返回结果中会带有 isPartial: true。计算趋势前应将其移除。
可以同时比较多个词条吗?
可以,在 timeseries 和 geoMap 中都可以。将词条以逗号分隔后传入 q。相关查询和相关主题类型只接受单个词条。
我可以将它与其他 HasData API 一起使用吗?
可以。apis 参数接受一个列表,?apis=google_trends,google_serp 会为你的 Agent 提供 Trends 和 Google 搜索。移除该参数(参见工具选择),即可获取全部内容。
合规与个人数据
HasData 仅访问公开可用的数据。平台的条款可能限制自动访问,你需要自行确保合规。
HasData 链接
| 产品页面和请求构建器 | Google Trends API |
| 服务文档 | MCP 服务文档 |
| 一个服务中的全部 57 个工具 | HasData/hasdata-mcp |
| 客户端操作指南 | MCP 客户端和集成 |
| 我们抓取的其他所有内容 | Google Trends API 及另外 54 项 |
| 套餐和积分费用 | 套餐和积分费用 |
| 密钥和用量 | HasData 控制面板 |
| npm 上的 Node 启动器 | @hasdata/google-trends-mcp |
| PyPI 上的 Python 启动器 | 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 中运行,也会每周定时运行一次,因为上游工具列表可能在无人改动此仓库的情况下发生变化。测试失败意味着工具列表发生了变化、密钥停止工作或端点无法访问,断言消息会指出具体原因。
贡献
修正参数表和响应示例是最有用的贡献,因为这两部分最容易过时。请附上你发出的调用和收到的响应。来自 Fork 的拉取请求会在不使用密钥的情况下运行测试套件,实时检查则会跳过,不会导致测试失败。
许可证
MIT。请参阅 LICENSE。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。