Paid Media

用 Meta Ad Library + GPT 做竞品广告监控:每周一次的实战流水线

用 Meta Ad Library + GPT 做竞品广告监控:每周一次的实战流水线
目录

18 个月前,我每周五上午都坐在那里,手动翻竞品在 Meta Ad Library 里的广告页。两个小时、八个品牌、一张等咖啡凉了就已经过时的表格。我错过竞品把广告话术从"省时间"换成"看起来更专业"那一周——这一换直接解释了我们的 prospecting(拉新)广告 CPM(Cost Per Mille,千次曝光成本)为什么掉了 40%——也就是那一周,我决定不再手工做这件事了。

替代那个周五例行工作的系统,到现在已经连续 67 个周一,跑在我管的 7 个 SaaS 和 D2C 客户的项目上。每周拉大约 4,000 条广告,聚类之后,在我开早会前发一份单页摘要到邮箱。人耗在上面的时间:12 分钟左右,基本都用来读被标出来的异常。

下面是从头到尾的完整流水线。

Meta Ad Library 到底是什么

在碰 GPT 之前,值得先把 Library 是什么、不是什么说清楚。Meta Ad Library(facebook.com/ads/library)是 Meta 强制公开的数据库,覆盖 Facebook、Instagram、Messenger 和 Meta Audience Network 上的所有广告——包括一些根本没出过审核队列的广告,只有少数例外。可以按广告主名、关键词、国家搜,从 2023 年开始还能按主题搜。每条记录会显示创意、文案、开始投放日期、(如果有)停止日期、跑过的平台,以及一个粗略的地域和人群分布。

这是付费媒体里一个真正独特的数据源。花钱买不到。任何广告追踪工具都没有它。 SpyFu、Semrush、Motion、BigSpy 都是用采样的方式反推拍卖。Library 就是拍卖本身。

它不会给你的三件事:不显示花费,不显示曝光(只有"少于 1,000 / 1K–5K / 5K–10K / 10K–50K"这种粗分桶),不显示点击数据。你能看到谁在跑,看不到谁赢。 用来做监控这就够了——监控的目的就是看"拍卖被要求测什么",不是看"拍卖为它付了多少钱"。

第 1 步:watchlist(一次性,5 分钟)

第一个错误是把这件事当成"发现任务"。不是。你心里其实已经知道该盯谁:前 5 个直接竞品、3 到 5 个刚融过资的挑战者品牌、1 到 2 个相邻品类里定位可以借鉴的老牌。总共 10 到 12 个,封顶。

watchlist 就是一个普通的 Google Sheet,一列是品牌在 Meta Ad Library 的官方 URL,一列是分类标签。我的长这样:

品牌 Library URL 分类
竞品 A facebook.com/ads/library/.../?active_status=active&view_all_page_id=... 直接
挑战者 B facebook.com/ads/library/.../?active_status=active&view_all_page_id=... 直接
相邻 C facebook.com/ads/library/.../?active_status=active&view_all_page_id=... 相邻

URL 小技巧:把 active_status=active 改成 active_status=all,可以包括品牌已经停掉的广告——那里才是真正有意思的创意藏着的地方。品牌放弃一个角度,跟品牌上线一个新角度同样有信息量,而 Ad Library 是唯一一个以结构化方式展示已停广告的来源。

第 2 步:拉数据(API vs 爬虫的取舍)

把广告真正拿下来,你有两条路:Meta Ad Library API,或者爬虫(Apify 上有一个维护得不错的,还有几个开源 Python 库)。

方案 优势 劣势
Meta Ad Library API 官方、稳定、免费,不会被限流 需要 Meta app 审核(1–2 周),每小时 6,000 次调用上限,不下载图片——只给 URL
爬虫(Apify / Python) 不需要审批、能拿图片、迭代更快、能抓 API 不给的过往数据 ToS 灰区、Meta 改版就崩、IP 层有被限流的风险

我两个都用。 API 跑每周的 watchlist 扫描,爬虫(Apify 的 meta-ad-library-scraper,截至 2025 年底每 1,000 条广告 $4)每月跑一次,补图片和历史上下文。混用是没人愿意讲的脏秘密——API 给你稳定,爬虫给你完整。

最低可行流水线,每条广告只拉三样:唯一 ID、开始日期、文案正文。第一轮别的都别要。图片哈希、CTA 按钮文案、平台列表,后面再补——它们在摘要里暂时还挣不到一个位子。

第 3 步:去重 + 聚类(GPT 这一层)

Meta Ad Library 的原始输出是一团浆糊。同一条广告会出现 5 到 15 次,原因包括重复的 ad set、微改的文案和重新上传。如果你对原始输出直接聚类,你会拿到 20 个 cluster,内容都是"别再浪费时间做 [X] 了",真正的多样性反而被埋掉。

修法是两次去重,都跑 GPT-4o-mini(便宜,可以一股脑塞进去,我的 4,000 条样本一周大约 $0.15)。

第一次——硬去重。 带上这个 prompt 把数据丢进去:

你的任务是对 Meta 广告做去重。下面是每条广告,对每条输出一个
canonical ID 来代表背后的那条广告(忽略轻微的文案改动、忽略
同一个创意的重新上传)。按 canonical ID 分组。每个 canonical ID
一行,后面附上归入这个组的广告 ID。

这步会把数量从我流水线里的 4,000 砍到大约 800–1,200 条 canonical 广告。成本可预测,耗时 30 秒。

第二次——角度聚类。 把去重后的集合送过去:

你是一名竞争情报分析师。请把这些广告聚成 4–8 个 angle(角度)组。
Angle 是心理钩子(比如"怕被同行甩在后面"、"30 天内可量化的
ROI"、"logo 墙社会证明")。每个 cluster 输出:
- Cluster 名称(2–5 个词)
- Cluster 内广告数
- 1 句话描述
- 2–3 个示例广告 ID

然后单独列出 3 条不属于任何 cluster 的广告(长尾)。

"长尾"那一行才是关键。 Cluster 是摘要的正文;长尾是下一次转向藏的地方。在我自己的扫描第 47 周,一条长尾广告后来被证实是某竞品开始进军企业级的第一个信号——他们上线了一条"被 Fortune 500 信赖"的创意,哪个 cluster 都不属于。没有"长尾"那一行,我一定会漏掉。

第 4 步:每周摘要模板

摘要放在 Notion 数据库里,每周一条记录,一页总结。我前后迭代了大约十版,最终定下的结构:

第 [N] 周 —— [日期范围]
一句话重点(本周最重要的一次变化):
[1 句话]

Cluster 变化(对比过去 4 周):
- Cluster "X":占样本 23%(之前 18%)——解释
- Cluster "Y":11%(之前 19%)——解释
- Cluster "Z" 是新出现的——解释
- Cluster "W" 消失了——解释

长尾(3 条值得人工看一眼的广告):
- [广告 ID]——[为什么它跳出来]
- [广告 ID]——[为什么它跳出来]
- [广告 ID]——[为什么它跳出来]

动态品牌(12 个品牌里,cluster 占比变化超过 20% 的):
- [品牌] 从 cluster X 切到 cluster Y——对我们定位的启示

"一句话重点"才是我真的会读的那一行。 Cluster 是用来撑这句话的证据;长尾是为了偶然的发现;"动态品牌"那一行是我会行动的钩子——单个品牌 cluster 占比 20 个百分点的变化,就是定位转向的强信号。

整份摘要一页,扫一遍大约 12 分钟,每周一早上 7:30 推到我 Slack 的 #competitive-intel 频道。大部分周次,问题"我要不要做点什么"的答案是不要。 这正是重点——那些你真要行动的周,信号在你手工发现时已经老了 4 周,而这份摘要把发现到 7 天。

第 5 步:读摘要时看什么

跑了 67 周之后,我看摘要的顺序固定是三件事:

  1. 本周出现了一个上周没有的 cluster 名字。 新角度、新定位、新卖点包装。这是最可行动的信号。 过去一年我两个客户最大的创意刷新,直接来源于某竞品扫描里突然冒出来的新 cluster。

  2. 某品牌的 cluster 配比翻转了。 上个月还是 70% 问题导向 + 30% 社会证明的品牌,突然变成 30/70。这就是一次定位变化。 值得花 30 分钟去读这个新 cluster 里的广告原文。

  3. 长尾里有 body copy 异常长的广告。 Library 里 body copy 超过 300 字符的广告,基本在做两件事中的一件:要么在解释一个技术性的东西(新产品、新功能、新市场),要么是在跟一条它显然看过的竞品广告对线。两种都是"有什么东西在动"的信号。

我不看绝对数量。 一个品牌跑了多少条广告基本什么也说明不了。一个竞品把广告量砍 40% 是信号;从 200 涨到 220 是噪音。

这个流水线会在哪里崩

几个我亲自踩过的坑,讲真话。

Watchlist 会过时。 如果不每季度审一次,你盯着的可能是 18 个月前就已经退出你这个品类的品牌。我自己就干过。修法是季度一次、30 分钟的检查:每个品牌还是不是真的竞品?不是就换掉。多数 watchlist 实际上每季度会换 1 到 2 个。

GPT 每周聚类的方式雷打不动。 一个很隐蔽的坑。如果你不定期换一下聚类 prompt 的措辞,模型会一周复一周地找到同样的 cluster,"新 cluster"这个信号最后会被噪声淹没。我每 4 周把 prompt 里的示例 cluster 名轮换一次,逼模型重新推导一次结构。

你过度解读"数量变化"。 一个品牌从 100 条广告涨到 200 条,不代表他们花得更多——Meta Ad Library 统计的是创意变体数,一个品牌完全可以靠 Advantage+(Meta 的自动广告投放功能)用 100 个几乎重复的变体把数量乘上去,实际多花的钱可能是零。数量信号与"意图"相关,不与"花费"相关。 在客户面前别把这两件事搞混。

Library 漏掉一些品类。 政治、住房、就业、信贷和另外几个敏感品类,规则更严。如果你的行业跟这些有交集,Library 给的会是部分视角。修法是在月度深度扫描里加一个 Google Ads Transparency 扫描,覆盖 YouTube 和 Display 这两块 Meta 不管的地方。

你开始过度信任摘要。 它是判断的起点,不是判断的替代。上个季度我发现一个品牌悄悄换了代理商——靠的是新广告创意的"风格"和品牌一贯的声调对不上,这个判断是从真实的广告里读出来的,不是从 cluster 摘要里读出来的。摘要告诉你往哪看,看还是你的活。

这个流水线能跑起来,靠的不是 GPT,不是 API,也不是 Library。是"竞品广告监控,做得好,是一组小、重复、便宜的观察习惯——不是一个季度项目。" 一份每周 12 分钟注意力、能挖出一两个真实信号的摘要,比一份花一周做出来的年度报告有用一千倍。工具只是让这个习惯对我变成可能的东西。习惯才是真东西。