案例研究

用大模型做竞品广告调研:
餐包品牌都在投什么广告

一次真实运行:美国餐包市场的 150 条 Meta 广告和 100 条 Google 广告,由大模型按卖点、优惠和形式归类,花费 $0.78。过程中的错误也一并记录。

预付费,无订阅REST 或 MCP一个密钥搞定模型、数据和智能体
Meta Ad LibraryGoogle Adslovelyjsonfindings"unique_creatives": 105"meal_kit_creatives": 20"lead_with_price": "12 of 20""google_text_ads": "85 of 100""median_days_running": 155"cost": "$0.78"

一个新品牌在广告上花第一块钱之前,想知道老牌玩家在说什么、给什么优惠、一条广告会投多久。两大广告库都是公开的,所以答案就摆在那里;难的是要读几百条广告。我们把广告库工具对准美国餐包市场,让模型来读。下面的一切都来自 2026 年 10 月 26 日的那次运行:总计 $0.78,运行约十分钟,途中有三处不得不纠正。

01

我们的问题

?

一个新的餐包或预制餐品牌正在筹划它在美国的首批广告。它在和谁争夺注意力?对手的广告承诺了什么?这些广告会投多久?

02

我们收集的数据

来源工具我们要的内容结果费用
Meta Ad LibraryFacebook Ad Library关键词 "meal kit" 下正在投放的美国广告150 条广告$0.169
Google Ads Transparency CenterGoogle Ads Transparency五个大型餐包网站各 20 条广告100 条广告$0.240

Meta 广告带有文案、标题、行动号召按钮和形式。Google 广告带有形式和每条已投放的天数,但没有文字内容。两个来源回答的是不同的问题,所以我们两个都用了。

03

模型怎么用

claude-sonnet-5.5 在一次调用中读完全部 150 条 Meta 广告。它为每条广告标出广告主类型(餐包、生鲜杂货、代餐奶昔、厨房用品、内容创作者……)、最多两个卖点(价格、便利、健康、新鲜、家庭……)、优惠(百分比折扣、包邮、首盒优惠、无……),以及一句从广告中原样摘出的短引用。代码把每条引用和广告文字逐一核对(150 条全部吻合),并完成所有计数。最后一次调用把这些计数写成一份简报。

04

我们的发现

{}

"meal kit" 下的广告大多不是餐包广告。 在 105 条去重后的广告创意中(这个数字后面会解释),只有 20 条来自餐包或预制餐商家,背后是 13 个广告主。其余的:15 条代餐奶昔和保健品,15 条厨房用品,12 条内容创作者和媒体,另有 40 条其他广告,从宠物食品到折扣网站都有。一个在这个关键词上出价的新品牌,要和它们所有人争夺同一个信息流。

餐包广告主打价格。 20 条餐包创意中,12 条以价格或折扣开场,6 条以新鲜食材开场,5 条以健康目标开场,只有 4 条以节省时间开场。20 条中有 14 条带有优惠:百分比折扣(6 条)、包邮(4 条)、首盒优惠(2 条)或立减金额(2 条)。代餐奶昔恰好相反:15 条中有 10 条以健康目标开场,15 条中有 9 条完全没有优惠。

Meta 上视频占优,Google 上文字占优。 105 条 Meta 创意中有 50 条是视频,21 条是动态创意,19 条是单图。54 条的行动号召是 "Shop now"(立即购买)。在 Google 上,100 条广告中有 85 条是文字搜索广告。

在 Google 上,有效的广告一投就是几个月。 100 条 Google 广告全都还在投放。它们的投放天数中位数是 155 天,69 条已投放超过 90 天,最老的一条文字广告从 2023 年 2 月起一直在投,已有 1,356 天。最老广告始于 2025 年 8 月的两个品牌,中位数分别是 84 天和 91 天;有 2023 年广告的三个品牌,中位数分别是 135、182 和 198 天。

05

我们不得不纠正的三件事

重复。

广告库返回了 150 条广告,但其中 45 条重复了同一广告主另一条广告的文案:一家生鲜商的 "Get Oven-Ready meals delivered with EVERYTHING included"(把一应俱全的即烤餐送到家)出现了 8 次。如果原样计数,这一个广告主会让价格看起来占 28 条餐包广告中的 18 条,而不是 20 条中的 12 条。我们改为按去重后的创意计数(同一广告主、同一文案只算一次),并重算了每一个数字。

关键词里的邻居。

"Get 50% OFF Your First Box"(首盒立享 50% 折扣)听起来像餐包广告,确实有一个餐包品牌投了它,但也有两个狗粮品牌在投。关键词搜索会把邻近品类一起拉进来;在计数之前先标出广告主类型。

跑偏的简报。

模型写的第二版简报不如第一版:它建议了测试预算,还提出一条 "CTR drops 30%"(点击率下降 30%)的规则,而这些在数据里都找不到;它还把 "up to 52% off while supplies last"(最高 52% 折扣,售完即止)当作餐包文案引用,其实那来自一个折扣网站。我们保留了下面那些有证据支撑的建议,其余的都删掉了。要求模型为每个论断注明数字能拦住大部分这类问题,但不是全部,所以还是得有人读一遍简报。

06

数据支持的做法

靠时间而不是价格脱颖而出。 20 条餐包创意中有 12 条以价格开场,只有 4 条以节省时间开场。测试: 同样的优惠,分别配价格标题和时间标题("Dinner in 30 minutes, no planning needed"(30 分钟搞定晚餐,无需计划)是唯一一个真实例子),比较每个首单的成本。

试试首盒优惠。 20 条餐包创意中只有 2 条用了它;百分比折扣和包邮才是扎堆的优惠。测试: 同一条创意,两种优惠。

为长期投放的搜索广告做打算。 100 条 Google 广告中有 69 条已投放超过 90 天。写几条你愿意连续用上几个月的搜索广告,而不是每周换一套新的。

数据回答不了的:花费、展示次数、点击或销量。一条长期投放的广告多半是有效的,但广告库证明不了这一点。

07

自己跑一遍

API 密钥放在 LOVELY_API_KEY 中,使用与市场调研案例相同的 run_tool 和 ask 辅助函数:

Python
meta = run_tool("facebook-ads", {"urls": [{"url": "https://www.facebook.com/ads/library/?active_status=active&ad_type=all&country=US&q=meal%20kit&search_type=keyword_unordered"}], "count": 150}, 150)
google = run_tool("google-ads-transparency", {"startUrls": [{"url": f"https://adstransparency.google.com/?region=US&domain={d}"} for d in ["example-brand.com", "another-brand.com"]], "resultsLimit": 20}, 40)

ads = [{"id": i, "page": a["page_name"], "title": a["snapshot"].get("title"), "body": (a["snapshot"].get("body") or {}).get("text"), "cta": a["snapshot"].get("cta_text")} for i, a in enumerate(meta)]
# Count each (advertiser, copy) once before tagging, then:
tags = ask("Tag each ad: advertiser_type, 1-2 angles, offer, and a quote copied exactly. Return a JSON array.", ads)

把关键词和域名换成你自己的品类即可。如果想让智能体跑完整个流程并带回简报,把它连接到 MCP 服务器。

08

常见问题

?
用 AI 做竞品广告调研要花多少钱?+

这次运行花了 $0.78:两个广告库的 250 条广告 $0.41,模型调用 $0.37,其中包括第二版简报。广告工具按返回的广告条数计费;每个工具的价格见其页面。

我能查看某个特定竞品品牌的广告吗?+

可以。把品牌的 Facebook 主页或 Ad Library 搜索 URL 发给 Facebook Ad Library 工具,或把它的网站域名发给 Google Ads Transparency。LinkedIn 的广告库用 LinkedIn Ad Library 工具也是同样的用法。

这能看出一条广告的效果好不好吗?+

不能。广告库展示的是投了什么、投在哪里、投了多久,而不是花费或效果。广告投放时长是最好的公开信号,但也只是一个信号。

我能每周跟踪竞品吗?+

可以。按计划定期运行同样的调用,保存广告 id,让模型只描述自上周以来的新广告。广告情报用例介绍了相关工具。

一个预付费密钥,搞定模型、数据和智能体

无需订阅。充值后按需使用,每笔费用都能在日志中查看。