~/business/google-ads-scraper
Google Ads Scraper——搜索、YouTube 与购物广告
竞争对手在 Google 上投放的每一条广告——搜索、YouTube、购物、地图与 Play——按域名、广告主或品牌查找,附带每条广告的投放天数、覆盖的国家,以及在欧盟境内的展示次数与受众定向。
广告情报
TypeScript
全球
分类business / 广告情报
语言TypeScript
技术栈TypeScript
市场全球
输出干净、RAG 就绪的 JSON
核心特性
广告主在 Google 搜索、YouTube、购物、地图与 Play 上投放的每一条广告
按网站域名、广告主 ID、品牌名称或复制的页面 URL 查找广告——可在同一次运行中混用
首次与最近一次展示的日期,以及每条广告已经投放的天数
Google 为该广告主核实的法定名称,及其所在地
按国家与平台划分的欧盟展示次数区间,以及所用的受众定向条件——开启详细信息后可用
文字广告的标题、购物广告的商品、视频广告的 YouTube 视频,以及落地页——开启广告内容后可用,且仅在有结果时才计费
按国家、平台、格式与日期筛选;像 30 days 这样的相对时间跨度,会随每次计划运行自动滚动到最新范围
应用场景
- 按计划持续监测竞争对手的 Google 广告,新广告系列会在下一次运行中自动出现
- 面向整个市场的广告素材调研:广告主持续投放的标题、商品与视频
- 结合按国家与平台划分的欧盟展示次数区间进行媒体排期规划
- 代理商与品牌安全审查:核查究竟是哪些法律实体在为导向某个网站的广告付费
- 销售线索挖掘:哪些公司在投放 Google 广告,又是从何时开始的
- 通过 Apify 的 MCP 服务器,把竞品广告数据提供给 AI Agent 使用
输入参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
domains | array | 可选 | 所有导向这些网站的广告,涵盖每一个投放了这类广告的广告主 |
advertiserIds | array | 可选 | 指定广告主的全部广告,可使用 ID 或广告主主页 URL |
advertiserNames | array | 可选 | 公司或品牌名称;系统会查找使用该名称、广告数量最多的那个广告主 |
startUrls | array | 可选 | 广告主页、单条广告页或域名搜索结果页的 URL;URL 中自带的筛选条件仅对该 URL 生效 |
region | string | 可选 | 仅限在该国家展示过的广告,或不限国家 |
platform | string | 可选 | Google 搜索、YouTube、Google 购物、Google 地图或 Google Play |
adFormat | string | 可选 | 文字、图片或视频 |
dateFrom | string | 可选 | 在该日期当天或之后展示过,也可以填写相对时间跨度,例如 30 days |
dateTo | string | 可选 | 在该日期当天或之前展示过;留空表示截至今天 |
maxItems | number | 可选 | 最多保存的广告条数——本次运行花费的硬上限 |
maxAdsPerSearch | number | 可选 | 每个域名、广告主、名称或 URL 最多采集这么多条广告后停止 |
includeDetails | boolean | 可选 | 国家、欧盟展示次数区间与受众定向条件,按广告计费 |
includeAdContent | boolean | 可选 | 标题、商品、YouTube 视频与落地页,仅在有结果时才计费 |
输出示例
1{
2 "creativeId": "CR04380650295827365889",
3 "adUrl": "https://adstransparency.google.com/advertiser/AR18378488041124659201/creative/CR04380650295827365889?region=NL",
4 "advertiserId": "AR18378488041124659201",
5 "advertiserName": "Nike Retail BV",
6 "advertiserLegalName": "Nike Retail BV",
7 "advertiserCountry": "NL",
8 "advertiserVerified": true,
9 "format": "TEXT",
10 "firstShown": "2025-10-22T15:05:47.575Z",
11 "lastShown": "2026-09-28T13:07:21.342Z",
12 "daysShown": 342,
13 "region": "NL",
14 "queryType": "advertiserId",
15 "details": {
16 "euImpressions": { "min": 250000, "max": 300000 },
17 "audience": {
18 "demographicInfo": { "included": true, "excluded": false },
19 "geographicLocations": { "included": true, "excluded": false },
20 "contextualSignals": { "included": true, "excluded": false }
21 }
22 },
23 "content": {
24 "headline": "{KeyWord:Nike Vomero}",
25 "description": "Découvre {Keyword:chaussures Nike} sur Nike.com. Commande sur le site officiel Nike.",
26 "landingUrl": null
27 }
28}
因篇幅原因有所精简:开启详细信息后,details 中还会列出该广告投放过的每一个国家及其首末次展示日期,并在欧盟境内按平台给出展示次数;content 中还包含 products、youtubeVideoId 与 youtubeUrl。
使用建议
- 要获得完整覆盖,请搜索域名而不是品牌名称。 按域名搜索会返回所有广告导向该网站的广告主——包括按品牌名称搜索会遗漏的区域主体与分销商。
maxItems决定你的花费上限。 它是单次运行可保存并计费的广告条数硬上限;maxAdsPerSearch则防止某一个大广告主独占这个配额。- 监测场景请使用相对日期。 在计划运行中把
dateFrom设为30 days,每次运行就会自动覆盖最近一个月。 - 关键字插入占位符会按 Google 存储的原样保留。 像
{KeyWord:Nike Vomero}这样的标题,展示的是搜索词未能替换时使用的备用文本。
常见问题
我需要 Google 账号或 API 密钥吗?
不需要。这些广告数据来自 Google 的公开广告库,任何人都无需登录即可查看。你在 Apify 上运行该 Actor,每条广告对应数据集中的一行。
为什么用品牌名称只能找到一个广告主?
品牌往往通过多个法律实体投放广告——例如 Nike 会通过 Nike, Inc.、Nike Retail BV 等多个主体。按名称搜索只能找到其中的主要广告主;改用该品牌的域名搜索,才能找到所有广告导向该网站的广告主。
为什么有些文字广告没有标题?
Google 会把很多文字广告以广告截图的形式存档。这类广告只附带预览图,而没有标题;标题与描述文字只会出现在 Google 实时展示的文字广告中。
展示次数与受众数据从何而来?
Google 依据《数字服务法》,为在欧盟境内展示的广告公开这些数据,展示次数的统计会有大约三个月的延迟。在欧盟以外,详细信息给出的是广告投放过的国家,以及在每个国家投放的天数。