~/business/google-trends-scraper
Google Trends Scraper——关键词、相关搜索与类别排行
任意关键词的 Google 趋势数据——随时间变化的热度、热门与上升的相关搜索,以及按地区划分的热度——外加 Google 928 个类别中任意一个的热门与上升搜索;可指定任意国家、地区或美国都市圈,覆盖 Google 提供的所有时间范围。
搜索趋势
TypeScript
全球
分类business / 搜索趋势
语言TypeScript
技术栈TypeScript
市场全球
输出干净、RAG 就绪的 JSON
核心特性
关键词查询:随时间变化的热度、热门与上升的相关搜索(标出 Breakout,即“飙升”),以及按地区或城市划分的热度,合并在一行中
类别排行:Google 928 个类别(最深到第三级)中任意一个或全部类别的热门与上升搜索
任意地点:国家、国家内的地区(US-CA、GB-SCT)、美国都市圈(US-CA-807),或全球
Google 提供的所有时间范围,从过去 1 小时到 2004 年以来的全部数据,一次运行可同时选多个
在指定类别内查询关键词,以区分同一个词的不同含义:例如作为汽车的 jaguar
每次查询和每个上榜的搜索词在多次运行之间沿用同一个键,因此定期运行可累积成历史记录
运行摘要会区分“无数据”与“失败”;被 Google 拒绝的请求会在运行结束时重试
应用场景
- SEO 与内容规划:围绕某个主题的上升搜索,以及该主题最受关注的地区
- 产品与市场调研:某个产品、品牌或类别的热度是在增长、停滞,还是每个季节都会回升
- 类别监测:人们在购物、旅游或任何细分领域搜索什么,逐月持续追踪
- 数据管道与仪表盘:覆盖多个关键词、市场与时间范围的定期查询
- 通过 Apify 的 MCP 服务器,把 Google 趋势数据提供给 AI Agent 使用
输入参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
keywords | array | 可选 | 要查询的搜索词,各自单独查询,覆盖每个地点与时间范围 |
keywordCategory | string | 可选 | 在某一个类别内查询这些关键词:填写其 ID、名称或路径 |
categories | array | 可选 | 要读取热门与上升搜索的类别:名称、路径、ID,或填 0 表示所有类别合计 |
subcategories | boolean | 可选 | 同时对每个类别的子类别排行,最深到第三级 |
allCategories | boolean | 可选 | 对全部 928 个类别排行:每个地点与时间范围约需一个半小时 |
countries | array | 可选 | 国家代码、地区(US-CA)、美国都市圈(US-CA-807),或全球 |
windows | array | 可选 | 1h、4h、24h、7d、30d、90d、12m、5y,或 all(2004 年以来的全部时间);默认为过去 12 个月 |
maxItemsPerList | number | 可选 | 每个热门或上升列表最多取这么多条搜索 |
maxItems | number | 可选 | 整次运行累计达到这么多条结果后停止 |
proxy | object | 可选 | 用于所有请求;默认使用 Apify 的住宅代理 |
输出示例
关键词查询示例:美国、过去 12 个月内的 bitcoin:
1{
2 "recordType": "lookup",
3 "itemKey": "google|lookup|US|12m|all|bitcoin",
4 "keyword": "bitcoin",
5 "geo": "US",
6 "geoScope": "country",
7 "window": "12m",
8 "category": null,
9 "status": "ok",
10 "reason": null,
11 "points": [
12 { "time": "2025-10-05T00:00:00.000Z", "value": 37, "hasData": true, "partial": false },
13 { "time": "2025-10-12T00:00:00.000Z", "value": 40, "hasData": true, "partial": false },
14 { "time": "2026-09-27T00:00:00.000Z", "value": 16, "hasData": true, "partial": false },
15 { "time": "2026-10-04T00:00:00.000Z", "value": 17, "hasData": true, "partial": true }
16 ],
17 "relatedQueries": {
18 "top": [
19 { "query": "bitcoin price", "value": 100, "label": "100", "breakout": false },
20 { "query": "bitcoin stock", "value": 18, "label": "18", "breakout": false }
21 ],
22 "rising": [
23 { "query": "spcx stock", "value": 14250, "label": "Breakout", "breakout": true },
24 { "query": "spcx stock price", "value": 12750, "label": "Breakout", "breakout": true }
25 ]
26 },
27 "regions": [
28 { "code": "US-WY", "name": "Wyoming", "value": 100 },
29 { "code": "US-NV", "name": "Nevada", "value": 51 }
30 ],
31 "observedAt": "2026-10-09T07:32:28.150Z",
32 "url": "https://trends.google.com/trends/explore?date=today+12-m&geo=US&q=bitcoin"
33}
因篇幅原因有所精简:该行还包含 platform 与 geoRequested;完整的行中有每一周的数据点、25 条热门搜索、25 条上升搜索,以及每一个州的数据。类别排行则是每条搜索一行,list 取值为 explore_top 或 explore_rising:2026 年 10 月 9 日,在美国过去 12 个月的购物类上升搜索中,quince 排在第一位,增幅为 +80%。
使用建议
- 为“全部类别”的运行设置两小时或更长的超时时间。 在一个地点、一个时间范围内读完全部 929 个排行约需一个半小时;接近时间上限的运行会自行停止,并把剩余部分标记为
not_reached。 - Google 没有数据的查询仍然会输出一行,其中带有
status: "not_available"和 Google 给出的原因,且不收费。 - 用关键词类别区分含义: 在 Autos & Vehicles(汽车类)下查询
jaguar,得到的是汽车,而不是动物。 - 查看运行的
SUMMARY记录,以区分“没有数据的关键词”和“无法读取的查询”。
常见问题
为什么最高点总是 100?
Google 会把每次查询按其自身的最高点来缩放,所以这些数字是相对热度,而不是搜索次数。两次查询的数值不在同一个刻度上。
什么是 Breakout(飙升)?
Google 用来代替百分比的标记,用于增幅超过 5,000% 的相关搜索。它的值是 Google 随标记一并给出的增幅,例如 14250。
哪些时间范围有类别排行?
只有过去 7 天、30 天、90 天和 12 个月,而且只到 Google 类别树的第三级。如果请求的是其他时间范围的排行,会在运行摘要中记为 not_available,且不收费。
包含相关主题吗?
不包含:Google 对自动化请求返回的相关主题是空的。相关搜索则包含在内,包括热门与上升两类。