事例

LLM で競合広告リサーチ:
ミールキット各社はどんな広告を出しているか

実際の実行記録です。米国ミールキット市場の Meta 広告 150 件と Google 広告 100 件を LLM が訴求軸・オファー・形式に分類しました。費用は $0.78、途中の誤りも載せています。

プリペイド、サブスクなしREST でも MCP でもモデル・データ・エージェントを 1 つのキーで
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"

新しいブランドが広告に最初の 1 ドルを使う前に知りたいのは、既存の大手が何を訴え、何をオファーし、1 本の広告をどれくらいの期間出し続けているかです。大手の広告ライブラリはどちらも公開されているので、答えはそこにあります。手間がかかるのは、何百本もの広告を読むことです。私たちは自社の広告ライブラリツールを米国のミールキット市場に向け、読む作業はモデルに任せました。以下はすべて 2026 年 10 月 26 日に行ったその実行の記録です。合計 $0.78、実行時間は約 10 分で、途中で 3 つの点を修正する必要がありました。

01

問い

?

新しいミールキットまたは調理済み食品のブランドが、米国で最初のキャンペーンを計画しています。注目を奪い合う相手は誰で、その広告は何を約束し、どれくらいの期間出稿しているのか。

02

集めたデータ

ソースツール依頼した内容結果費用
Meta Ad LibraryFacebook Ad Libraryキーワード "meal kit" で配信中の米国の広告150 広告$0.169
Google Ads Transparency CenterGoogle Ads Transparency大手ミールキット 5 サイトから各 20 広告100 広告$0.240

Meta の広告には本文、見出し、CTA(行動喚起)、形式が付いてきます。Google の広告には形式と、それぞれが何日間配信されているかが付いてきますが、本文はありません。2 つのソースは別々の問いに答えるので、両方を使いました。

03

モデルの使い方

claude-sonnet-5.5 が 150 件の Meta 広告すべてを 1 回の呼び出しで読みました。各広告について、広告主のタイプ(ミールキット、食料品、ダイエットシェイク、キッチン用品、クリエイターなど)、最大 2 つの訴求軸(価格、手軽さ、健康、新鮮さ、家族など)、オファー(割引率、送料無料、初回ボックス特典、なしなど)、そして広告からそのまま写した短い引用を 1 つ挙げさせました。コードで各引用を広告の本文と照合し(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 ではテキストが主流です。 Meta の 105 件のクリエイティブのうち 50 件が動画、21 件がダイナミッククリエイティブ、19 件が単一画像でした。CTA は 54 件が "Shop now"(今すぐ購入)です。Google では 100 件中 85 件がテキストの検索広告でした。

Google では、うまくいく広告は何か月も出続けます。 Google の 100 件の広告はすべてまだ配信中でした。配信日数の中央値は 155 日で、69 件は 90 日を超えて配信されており、最も古いテキスト広告は 2023 年 2 月から 1,356 日間配信されていました。最も古い広告が 2025 年 8 月のものだった 2 ブランドの中央値は 84 日と 91 日、2023 年の広告があった 3 ブランドは 135 日、182 日、198 日でした。

05

修正が必要だった 3 つの点

重複。

ライブラリは 150 件の広告を返しましたが、そのうち 45 件は同じ広告主の別の広告と本文が同じでした。ある食料品業者の "Get Oven-Ready meals delivered with EVERYTHING included"(すべてそろったオーブン調理用ミールをお届け)は 8 回出てきました。そのまま数えると、この 1 社のせいで、価格を打ち出すミールキット広告が 20 件中 12 件ではなく 28 件中 18 件に見えてしまいます。私たちはユニークなクリエイティブ(同じ広告主・同じ本文は 1 回)で数え、すべての数字を出し直しました。

キーワードに紛れ込む隣接ジャンル。

"Get 50% OFF Your First Box"(初回ボックスが 50% オフ)はミールキットらしく聞こえますし、実際に 1 社のミールキットがこれを出していましたが、ドッグフードの 2 ブランドも同じ文言を出していました。キーワード検索では隣接ジャンルも引っかかります。何かを数える前に、広告主のタイプをタグ付けしてください。

ずれていったブリーフ。

モデルが書いた 2 回目のブリーフは 1 回目より質が落ちていました。データのどこにもないテスト予算や「CTR が 30% 下がったら」というルールを提案し、セールサイトのものである "up to 52% off while supplies last"(在庫限りで最大 52% オフ)をミールキットの広告文として引用していました。以下には根拠のある施策だけを残し、それ以外は削りました。すべての主張に数字を添えるようモデルに求めれば、こうした誤りの大半は防げますが、すべてではありません。だからブリーフは今も人が読みます。

06

データが支持する施策

価格ではなく時短で差別化する。 ミールキットの 20 件のクリエイティブのうち 12 件が価格を打ち出し、時短を打ち出しているのは 4 件だけです。テスト: 同じオファーで、価格の見出しと時短の見出し(実例は "Dinner in 30 minutes, no planning needed"(献立を考えなくても 30 分で夕食)の 1 件だけ)を比べ、初回注文あたりの費用を比較します。

初回ボックス特典を試す。 これを使っているミールキットのクリエイティブは 20 件中 2 件だけで、割引率と送料無料は混み合ったオファーです。テスト: 1 つのクリエイティブで 2 種類のオファーを比べます。

長く使える検索広告を前提に計画する。 Google の 100 件の広告のうち 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 でした。2 つのライブラリから集めた 250 件の広告が $0.41、2 回目のブリーフを含むモデル呼び出しが $0.37 です。広告ツールは返された広告 1 件ごとに課金されます。価格は各ツールのページをご覧ください。

特定のブランドの競合広告を見られますか?+

見られます。ブランドの Facebook ページまたは Ad Library の検索 URL を Facebook Ad Library ツールに、Web サイトのドメインを Google Ads Transparency に送ってください。LinkedIn のライブラリも LinkedIn Ad Library ツールで同じように使えます。

広告の成果はわかりますか?+

わかりません。ライブラリが示すのは、何がどこでどれくらいの期間配信されているかであって、広告費や成果ではありません。配信期間の長さは公開情報の中で最も良いシグナルですが、それでもシグナルにすぎません。

毎週競合を追跡できますか?+

できます。同じ呼び出しを定期的に実行し、広告 id を保存して、先週から新しく出たものだけをモデルに説明させてください。そのためのツールは広告インテリジェンスのユースケースで紹介しています。

モデル・データ・エージェントを 1 つのプリペイドキーで

サブスクリプションなし。チャージして必要な分だけ使い、すべての請求をログで確認できます。