问答
怎么一次看全竞品在 Meta、Google 和 TikTok 上投的广告?
简短回答
在每个公开广告库里,用竞品在那里登记的身份去查:Meta 上是它的 Facebook 主页,Google 上是官网域名,TikTok 广告库里是广告主名称,再把结果合成一张表。用 okdata 每周扫一个竞品 $0.028,10 个竞品每周扫、做一个月共 $1.12。
一个水杯品牌的增长负责人,盯着三个主要竞品。每周一她都想知道,它们上周新上了哪些广告:新的优惠、新的开头、新的落地页。答案分散在三个公开广告库里,三套界面,同一家公司在每个库里的名字还不一样。手动查要一上午;写成脚本,就是一张表发到邮箱,新广告已经标出来了。
一个竞品,三个身份
| 广告库 | 竞品在里面登记成什么 | 接口 |
|---|---|---|
| Meta 广告库(Facebook、Instagram、Messenger) | Facebook 主页,按 ID 或名称 | Meta 广告主的广告 |
| Google 广告透明中心(搜索、YouTube、展示、购物) | 验证过的广告主,常常是公司主体;或者官网域名 | Google 广告主搜索,再用 Google 广告主的广告 |
| TikTok 广告库 | 广告主名称,只收在欧洲投放的广告 | TikTok 广告库搜索 |
名字只需要对一次,把 ID 存下来:Meta 主页 ID、Google 广告主 ID 或域名、TikTok 广告主名称。之后每周只调列表接口。
费用
| 每周、每个竞品 | 调用次数 | 费用 |
|---|---|---|
| Meta,3 页,每页 30 条 | 3 | $0.012 |
| Google,2 页,每页 40 条 | 2 | $0.008 |
| TikTok,2 页,每页 12 条 | 2 | $0.008 |
| 一个竞品一周 | 7 | {{cost:meta.advertisers.ads.list3+google.advertisers.ads.list2+tiktok.ads.search*2}} |
| 10 个竞品,4 周 | 280 | {{cost:meta.advertisers.ads.list120+google.advertisers.ads.list80+tiktok.ads.search*80}} |
第一次在 Google 上按名称找广告主,每个竞品另加 $0.004。
代码:合成一张表,标出新广告
import json, os, requests
API = "https://api.okdata.online"
H = {"Authorization": f"Bearer {os.environ['OKDATA_API_KEY']}"}
def items(path, **params):
body = requests.get(API + path, headers=H, params=params, timeout=60).json()
if body["code"] != "ok":
raise RuntimeError(f"{body['code']}: {body['message']}")
return body["data"]["items"] # 只取第一页;要更多就按 page.next_cursor 翻页
rival = {"meta_page": "<Facebook 主页 ID>", "domain": "example.com", "tiktok": "Example Brand"}
ads = ([("meta", a) for a in items("/v1/meta/advertisers/ads/list", id=rival["meta_page"], country="US")]
+ [("google", a) for a in items("/v1/google/advertisers/ads/list", domain=rival["domain"], country="US")]
+ [("tiktok", a) for a in items("/v1/tiktok/ads/search", advertiser=rival["tiktok"])])
rows = [{"platform": p, "id": a["id"], "format": a["format"], "text": (a["text"] or "")[:120],
"landing": a["landing_url"], "since": a["first_shown_at"], "url": a["url"]} for p, a in ads]
try:
seen = set(json.load(open("seen_ids.json")))
except FileNotFoundError:
seen = set()
new = [r for r in rows if r["id"] not in seen]
json.dump(sorted(seen | {r["id"] for r in rows}), open("seen_ids.json", "w"))
print(len(rows), "条广告,其中新出现", len(new), "条")
看不到的地方
- TikTok 广告库只收在欧洲投放的广告。 只在美国投的竞品,这里可能一条都没有。创意中心热门广告能看一个品类里什么素材效果好,但不能按广告主查。
- Google 很少给落地页, 文案也常常只在预览图里。
- Meta 在欧盟以外会撤下已停投的商业广告。 每周跑一次,顺便也就攒下了自己的历史记录。
- 商业广告的花费,哪个库都不公开。 可以看新广告的数量和每条跑了多久;连续投好几个月的,通常就是效果好的。
- 子品牌和多个主页。 大广告主往往有好几个 Facebook 主页和 Google 账户,每一行都核对一下广告主。
其他做法
只看一个品牌,直接上各广告库的网页,免费。付费的广告情报平台覆盖更多渠道,保存多年历史,还会估算花费;如果要回答的是对手预算有多少,它们更合适。合作的代理商手里可能也已经有这些数据。每周脚本化地扫一遍,或者把一周的竞品广告交给 Agent 做总结,用 okdata 更合适。各个库的细节见 Meta 广告库 API 的价格和限制和导出 Google 广告透明中心的广告。完整流程见广告情报和竞品监测。
更新于