欧州で出稿している競合の広告をMetaの広告ライブラリのAPIから毎週取得し、訴求・オファー・クリエイティブの変化を要約して広告主の担当に知らせる
Metaの広告ライブラリのAPIから、競合がEUに配信した広告を毎週取得します。エージェントが前の週と比べて変化を拾い、訴求とオファーを分類して日本語で要約し、運用担当に届けます。
- 生成AI
- ChatGPT/Claude/Gemini
- 連携・自動化
- Make/n8n/Power Automate/Zapier
- 対象業界
- EC/小売/広告/製造
- 対象部門
- マーケティング
- 対象業務
- 要約/集計・分析
- 主な課題
- データ分析に時間がかかる/人手が足りない/属人化している
- AIで行う処理
- エージェント
- 主な効果
- 判断支援/品質標準化/工数削減
- 導入難易度
- ★★★☆☆
- 実装レベル
- 本格構成
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 毎週月曜に、広告主ごとの競合の一覧を開く
- 広告ライブラリの画面で、競合のページを1社ずつ検索し、配信中の広告を見る
- 前の週の報告と見比べ、新しく出た広告と、見かけなくなった広告を探す
- 広告文を翻訳の道具に貼り、日本語にして読む
- 訴求(品質、価格、成分、使い方など)とオファー(値引き、送料無料、セット)を書き出す
- 気になる広告の画面の写しを撮り、報告書に貼る
- 広告主向けの週次の報告にまとめ、チームの上長が見てから送る
- 自動毎週月曜の朝、ワークフローが広告主ごとの競合の一覧を読む
- 自動競合のページIDで、広告ライブラリのAPIからEUに配信された広告を取得する
- 自動前の週までに見た広告IDと比べ、新しく出た広告と、配信が止まった広告に分ける
- 自動同じ広告文の言語違い・配信面違いを、文の近さで束ねる
- 自動エージェントが、束ねた広告ごとに訴求とオファーを分類し、前の週の分類と比べて変化を拾う
- 自動エージェントが、広告主ごとに変化の要約を日本語で書く
- 自動結果を報告の下書きの表に書き、運用担当のチャットへ知らせる
- 人運用担当が、新しく出た広告の表示(スナップショット)を開いて、分類と要約を確かめる
- 人広告主にとっての意味の一言を足し、上長が見てから送る
各工程の詳しい説明を読む
- 毎週月曜に、広告主ごとの競合の一覧を開く
- 広告ライブラリの画面で、競合のページを1社ずつ検索し、配信中の広告を見る
- 前の週の報告と見比べ、新しく出た広告と、見かけなくなった広告を探す
- 広告文を翻訳の道具に貼り、日本語にして読む
- 訴求(品質、価格、成分、使い方など)とオファー(値引き、送料無料、セット)を書き出す
- 気になる広告の画面の写しを撮り、報告書に貼る
- 広告主向けの週次の報告にまとめ、チームの上長が見てから送る
(a)同じ広告が何十本も並ぶ。 1つの訴求を、言語違い・画像違い・配信面違いで出すと、画面には別々の広告として並びます。新しいものを探すのに、同じものを何度も見ることになります。
(b)前の週との比べ方が担当者の記憶に頼る。 画面には前の週の状態が残らないので、新しく出たかどうかを、前の週の報告書と記憶で判断しています。
(c)外国語の広告文を読むのに時間がかかる。 ドイツ語とフランス語が混ざり、翻訳の道具に貼り付けて戻す作業が、競合の数だけ繰り返されます。
(d)報告の書き方がそろわない。 同じ「20%引き」を、ある担当は「価格訴求」、別の担当は「キャンペーン」と書きます。広告主の側で、週をまたいだ比較ができません。
- 【自動】 毎週月曜の朝、ワークフローが広告主ごとの競合の一覧を読む
- 【自動】 競合のページIDで、広告ライブラリのAPIからEUに配信された広告を取得する
- 【自動】 前の週までに見た広告IDと比べ、新しく出た広告と、配信が止まった広告に分ける
- 【自動】 同じ広告文の言語違い・配信面違いを、文の近さで束ねる
- 【自動】 エージェントが、束ねた広告ごとに訴求とオファーを分類し、前の週の分類と比べて変化を拾う
- 【自動】 エージェントが、広告主ごとに変化の要約を日本語で書く
- 【自動】 結果を報告の下書きの表に書き、運用担当のチャットへ知らせる
- 【人】 運用担当が、新しく出た広告の表示(スナップショット)を開いて、分類と要約を確かめる
- 【人】 広告主にとっての意味の一言を足し、上長が見てから送る
8番目が、この設計の分かれ目です。 エージェントが読むのは広告の文字だけで、画像と動画は見ていません。 新しく出た広告は、担当者が表示を開いて目で確かめます。
3番目で新旧を広告IDで比べるので、第3章の(b)の記憶に頼った比べ方が消えます。 前の週の状態は記録に残り、担当者が替わっても同じ比べ方が続きます。4番目の束ねで、第3章の(a)の「同じ広告を何度も見る」手間も消えます。
9番目の一言を担当者に残しているのも、意図してのことです。 競合が値引きを始めたことは事実として書けますが、それが広告主にとって脅威か機会かは、広告主の事情を知る担当者にしか書けません。
02今回想定するシステム構成
広告主ごとの競合の一覧(スプレッドシート:広告主・競合名・FacebookページID・国) │ ▼【トリガー】Schedule Trigger(毎週月曜 7時、Asia/Tokyo) n8n のワークフロー ├──▶ HTTP Request で ads_archive を呼ぶ(ページIDは1回10件まで、ページ送りあり) ├──▶ Remove Duplicates(前の週までに見た広告IDを除く) ├──▶ 前の週の一覧と比べて、止まった広告を拾う ├──▶ 広告文の近さで、言語違い・配信面違いを束ねる ▼ AI Agent ノード(Tools Agent)+ Anthropic Chat Model │ 広告主ごとに、道具を選んで使う │ ・訴求とオファーの分類表を引く ・前の週までの分類を引く │ ・広告主の商品の一覧を引く │ Structured Output Parser で決まった形のJSONを返す ▼ 報告の下書きの表(スプレッドシート)→ 運用担当のチャットへ通知 ▼【人】表示での確認・一言の追記・上長の確認
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| ワークフロー | n8n | Make、Zapier、Power Automate |
| 生成AI | Claude API(n8n の Anthropic Chat Model ノード) | OpenAI API、Gemini API |
| 連携 | Meta の広告ライブラリのAPI(Graph API の ads_archive) | 広告ライブラリの画面を担当者が見る |
新しく足すのは、n8n のワークフローと、3つの一覧(競合、分類表、前の週までの分類)だけです。 競合の一覧には、競合名ではなく Facebook ページのIDを持たせます。
入口は、Graph API の ads_archive です。 公式のページでは、ad_type の既定が ALL で、ALL はすべての話題の広告を返すとされています。ただし ad_reached_countries の説明に、EUのどこにも配信されていない広告は、社会問題・選挙・政治に関するものでない限り返らないと書かれています。この1行が、この構成の使える範囲を決めます。
絞り込みの指定も、商品の広告で使えるものと使えないものがあります。 言語(languages)、メディアの種類(media_type:画像・動画・なし など)、配信面(publisher_platforms)は使えますが、支払った人の表示や地域での配信、推定の対象者数での絞り込みは、政治・社会問題の広告にしか使えません。画像の広告と動画の広告の本数を分けて報告したいときは、media_type を変えて呼び分けます。
取れる項目にも、同じ線が引かれています。 広告文(ad_creative_bodies)、リンクの見出し・説明・キャプション、配信の開始と終了の日時、表示のURL(ad_snapshot_url)、ページID、配信面、言語は、どの広告でも返ります。EUでの推定リーチ(eu_total_reach)はEUの広告だけ、狙った年齢・性別・地域はEUと英国の広告などに限られ、広告費と表示回数は政治・社会問題の広告だけです。
03どうやって実装するのか
処理の起点を決める
毎週月曜の朝7時に、Schedule Trigger で動かします。 Schedule Trigger はワークフローのタイムゾーンを使い、無ければインスタンスのタイムゾーンを使います。セルフホストの既定は America/New York なので、ワークフローのタイムゾーンを Asia/Tokyo にします。 保存して公開しないと動きません。
週1回にしているのは、広告主への報告が週次だからです。 広告主8社の取得を同じ時刻に始めると呼び出しが重なるので、広告主ごとに数分ずつずらして順に取ります。 毎日取っても、報告に載せるのは週の変化です。ただし、配信の開始と終了の日時を持っているので、週の途中で出て週の途中で止まった広告も拾えます。 月曜の実行では、前の週の月曜から日曜までに配信があった広告を取ります。
広告主から「競合の大型の値引きが始まったらすぐ知りたい」と頼まれている場合は、その広告主だけ別の Schedule Trigger で平日の朝に取り、オファーの分類が「値引き」の新しい広告があれば知らせます。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 競合の一覧 | 広告主、競合名、Facebook ページID、見る国(EUの国コード)、言語 | スプレッドシート |
| 広告ライブラリの広告 | 広告ID、広告文、リンクの見出し・説明・キャプション、配信の開始・終了、表示のURL、配信面、言語、EUでの推定リーチ | ads_archive |
| 分類表 | 訴求の区分(品質、価格、成分、使い方、口コミ、限定性など)とオファーの区分(値引き、送料無料、セット、試供品など)、それぞれの判断の手がかり | 運用部が作る |
| 前の週までの分類 | 広告IDごとの、束、訴求とオファーの分類、初めて見た週 | 報告の下書きの表 |
| 広告主の商品の一覧 | 広告主の商品の種類と価格帯 | 運用部が作る |
質を決めるのは、分類表です。 「価格」とだけ書くと、値引きも高級感の訴えもまとめて価格になります。「値引き:割引率・金額の明記、期間の限定がある」「価格の正当化:高い理由を説明する」のように、手がかりまで書きます。 分類がそろえば、第3章の(d)のばらつきが消えます。
前の週までの分類は、変化を言うために持ちます。 同じ競合が先週も値引きをしていれば、今週の値引きは「新しい打ち出し」ではなく「継続」です。
データの取得方法を決める
広告は、HTTP Request ノードで ads_archive を呼んで取ります。 主な指定は次のとおりです。
| パラメータ | 指定 | 理由 |
|---|---|---|
search_page_ids | 競合のページID(1回10件まで) | 名前の検索より取りこぼしが少ない |
ad_reached_countries | 見る国のコード(例:DE、FR、NL) | 広告主の販売国に合わせる |
ad_type | ALL | 商品の広告を取る |
ad_active_status | ALL | 週の途中で止まった広告も取る |
ad_delivery_date_min/max | 前の週の月曜/日曜 | 週の配信に絞る |
fields | 広告文、見出し、開始・終了、表示のURL、配信面、言語、EUでの推定リーチ | 使う項目だけを取る |
search_terms での検索は使いません。 公式のページでは、キーワードの検索は翻訳されないとされ、広告の言語で書かないと当たりません。 ドイツ語とフランス語の広告を日本語の競合名で探すと漏れます。ページIDなら言語に関係なく取れます。
結果は複数のページに分かれて返ります。 HTTP Request の Pagination を Response Contains Next URL にして、応答の次のページのURLをたどります。ページ送りを設定しないと、最初の一部だけで止まります。
配信の開始日と作成日は別物です。 返る項目には、広告が作られた日時(ad_creation_time)と、配信を始めたい日時(ad_delivery_start_time)があり、公式のページでは作成日時は配信された日時と異なることがあるとされています。「今週出た広告」は、配信の開始日時で判断します。 作成日時で見ると、前から用意されていた広告が今週出たときに「古い広告」と扱われます。
呼び出しの回数が上限に当たると、エラーコード613が返ります。 公式のページは、APIの呼び出しが上限を超えたときのエラーとしてこのコードを挙げています。広告主ごとに呼び出しの間をあけ、613が返ったら待ってから取り直します。
AIへ渡す前に整形する
- 新しい広告と止まった広告を分ける … Remove Duplicates の Remove Items Processed in Previous Executions で、Keep Items Where を Value Is New、Value to Dedupe On を広告IDにして、新しく見た広告を残します。前の週の一覧にあって今週の配信が無いものを、止まった広告にします
- 配信の終了日を見る …
ad_delivery_stop_timeが空の広告は、止めるまで配信される広告です。週の中に終了日があれば止まった広告に入れます - 広告文を束ねる … 広告文とリンクの見出しを正規化し(記号と空白をそろえる)、同じ競合の中で文が同じものを1つの束にします。言語が違う同じ訴求は、エージェントに束ねさせます
- 広告主ごとにまとめる … 1人の広告主の競合の、新しい束と止まった束を1つの入力にします
- 表示のURLを付ける … 束ごとに代表の広告の
ad_snapshot_urlを付け、担当者が確かめられるようにします
束ねる処理は Code ノードで書きます。 正規化した広告文と見出しをつないだ文字列を鍵にして、同じ鍵の広告を1つの束にし、本数、言語の一覧、配信面の一覧、配信の開始日の最も早い日を束に持たせます。束の鍵は前の週の記録にも残し、翌週に同じ鍵の束が出たら「継続」の手がかりにします。
3番目を省くと、エージェントに同じ広告が何十本も渡ります。 費用がかかるだけでなく、「新しい広告が40本」という要約が出て、変化の大きさを読み違えます。 文が完全に同じものは規則で束ね、言語違いだけをエージェントに任せます。
AIに処理させる
させるのは、広告主ごとに、新しい束と止まった束の訴求とオファーを分類し、前の週までと比べて何が変わったかを日本語で要約することです。
| 手順 | エージェントがすること | 使う道具 |
|---|---|---|
| 1 | 新しい束の中で、言語違いの同じ訴求をさらに束ねる | なし(入力だけで判断) |
| 2 | 分類表の区分と手がかりを確かめる | 分類表を引く |
| 3 | 束ごとに、訴求とオファーを分類し、根拠の文を抜き書きする | なし |
| 4 | 競合ごとの前の週までの分類を確かめる | 前の週までの分類を引く |
| 5 | 新しい打ち出し・継続・やめたものに分ける | なし |
| 6 | 広告主の商品と重なる変化を挙げ、日本語で要約する | 商品の一覧を引く |
根拠の文は、原文のまま抜き書きさせ、日本語の訳を別に付けさせます。 訳だけを残すと、値引きの条件(「2点目」「初回のみ」)が訳で落ちたときに気づけません。 ワークフローの側で、抜き書きが広告文の中にそのまま含まれるかを確かめます。
| させないこと | 理由 |
|---|---|
| 画像・動画の中身を推し量る | 文字しか渡していない |
| 競合の広告費・配信量を推し量る | 広告費と表示回数は商品の広告では返らない |
| 競合の狙いを断定する | 広告文から言えるのは「何を言っているか」まで |
| 広告主への提案を書く | 広告主の事情を知る担当者が書く |
| 分類表に無い区分を作る | 週をまたいだ比較が崩れる |
2行目がいちばん起きやすい失敗です。 新しい広告が多い競合について、エージェントは「出稿を強化している」と書きたがります。本数が多いことは、予算が増えたことを意味しません。 書けるのは本数とEUでの推定リーチの範囲までです。
指示内容を固定する
あなたは広告会社の運用部で、欧州向けに販売する広告主のために、
競合が新しく出した広告と止めた広告を調べる担当です。
入力の広告文と、道具で確かめた事実だけで答えてください。
【入力】
- 広告主:{client}(販売国:{countries})
- 競合ごとの新しい束:{new_groups}
(束ID、代表の広告文、見出し、言語、配信の開始日、本数、
EUでの推定リーチ)
- 競合ごとの止まった束:{stopped_groups}
【使える道具】
- get_taxonomy:訴求とオファーの区分と、判断の手がかりを返す
- get_history:競合名を渡すと、前の週までの束と分類を返す
- get_products:広告主の商品の種類と価格帯を返す
【進め方】
1. 新しい束のうち、言語だけが違う同じ訴求をまとめてください。
2. 束ごとに、訴求とオファーを分類表の区分から選んでください。
根拠の文を原文のまま抜き書きし、日本語の訳を別に付けてください。
3. get_history で前の週までと比べ、new / continued / dropped を
付けてください。
4. 広告主の商品と重なる変化を挙げ、日本語で要約してください。
【厳守事項】
- 区分は分類表にあるものだけを使ってください。当てはまらなければ
other とし、理由を書いてください。
- 画像・動画の内容を推し量らないでください。
- 広告費・予算・配信量の増減を書かないでください。
本数とEUでの推定リーチの値だけを書いてください。
- 値引きの率・金額・条件は、広告文にあるとおりに写してください。
訳で条件を省かないでください。
- 競合の狙いや戦略を断定しないでください。
- 広告主への提案を書かないでください。
「値引きの条件を訳で省かない」を明記しないと、「2点目半額」が「半額」になります。 広告主が受け取る報告で、最も読み違えると困る部分です。
「区分は分類表にあるものだけ」も明記します。 エージェントは気の利いた新しい区分を作りがちで、それをすると、先週の「価格」と今週の「お得感」が比べられなくなります。
出力形式を固定する
Structured Output Parser で、次の形のJSONを受け取ります。
{
"client": "",
"week": "2026-09-28/2026-10-04",
"competitors": [
{
"name": "",
"groups": [
{
"group_id": "",
"status": "new | continued | dropped",
"languages": ["de", "fr"],
"ad_count": 0,
"appeal": "",
"offer": "",
"quote_original": "",
"quote_ja": "",
"snapshot_url": ""
}
],
"summary_ja": ""
}
],
"overlap_with_client": [],
"needs_human": false
}
1つ目の理由は、status で週の変化を規則で数えられることです。 報告の冒頭の「新しい打ち出し:3社5件」は、ワークフローが status から数えます。数字をエージェントに書かせません。
2つ目は、quote_original と quote_ja を分けていることです。 担当者は原文と訳を並べて見られ、条件の落ちた訳にすぐ気づけます。
3つ目は、snapshot_url で表示を開けることです。 公式のページでは、表示のURLは圧縮していないメディアで広告を表示するものとされ、ダウンロードしたクリエイティブは分析に使い、利用規約に従うことが求められています。
Structured Output Parser の Generate From JSON Example では、すべての項目が必須として扱われるとされています。空のときは空文字や空の配列を返させます。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 競合の一覧・分類表・商品の一覧 | Google Sheets ノード | 広告主ごとの競合のページIDと、分類の手がかりを読む |
| 広告ライブラリのAPI | HTTP Request ノード(Graph API) | EUに配信された広告を取る |
| Claude API | Anthropic Chat Model ノード | 束ね、分類、要約 |
| 報告の下書きの表 | Google Sheets ノード | 束ごとの結果を1行ずつ書く |
| 運用担当のチャット | n8n のチャットのノード | 広告主ごとの新しい打ち出しの件数を知らせる |
広告主へは自動で送りません。 下書きの表から担当者が報告を作り、上長が見てから送ります。分類の誤りが、そのまま広告主の判断材料になるのを止めるためです。
人が確認する
人が見るのは、status が new の束と、needs_human が立った広告主です。 continued は件数を流し見、dropped は代表の広告文だけを読みます。
newの束の表示を開く …snapshot_urlで画像・動画を見て、訴求とオファーの分類が合っているかを確かめます- 原文と訳を見比べる … 値引きの率・条件が訳に残っているかを見ます
- 広告主にとっての意味を一言書く … この一言は担当者が書きます
- 分類を直したら記録する … どの束の、どの区分を、どう直したかを残します
4番目は、分類表を直す材料になります。 同じ直しが続く区分は、手がかりの書き方が足りていません。
1番目で、表示を開くのは束の代表の1本だけです。 同じ束の他の広告は、画像だけを差し替えていることがあります。画像の違いが報告に要る広告主では、束の全部の表示を開く週を月1回だけ設けます。
目標は、32件をならして1件15分です。 新しい打ち出しの多い週は30分近く、変化の少ない週は数分で終わります。
例外に対処する
| 起きること | 対応 |
|---|---|
| 競合の広告が1件も返らない | EUに配信していないか、ページIDの誤り。 一覧を確かめるよう担当者へ |
| 呼び出しの上限(エラー613) | 待ってから取り直す。続けば翌日に回す |
| アクセストークンの期限切れ | 実行を止め、担当者へ知らせる |
| 広告文が空(画像・動画だけの広告) | 分類をせず、表示のURLだけを needs_human で回す |
| 広告ライブラリから広告が消えた | 前の週の記録に残し、「取得できず」と書く |
| 競合が新しいページを作った | ページIDが一覧に無いので取れない。担当者が月1回、画面で確かめる |
| 抜き書きが広告文に無い | 分類を採らず、needs_human にする |
| Claude API が応答しない | 束と件数だけを表に書き、要約は次の実行で作る |
1行目は、この構成の範囲の外にいる競合を見つける合図です。 日本国内だけに広告を出している競合は、何度呼んでも0件です。0件が続く競合は、一覧から外すか、画面で見る対象に分けます。
記録を残す
- 実行の日時、広告主ごとの呼び出しの条件と、返った広告の件数
- 広告IDごとの、広告文、見出し、配信の開始・終了、表示のURL、初めて見た週
- 束の内容と、エージェントの入力
- 道具の呼び出しの記録と、結果のJSONの全文、抜き書きの照合の結果
- 担当者が直した分類と、報告に書いた一言
- 広告主へ送った報告の版
2つ目は、広告ライブラリから広告が見えなくなった後も、比較を続けるために残します。 Tools Agent の Return Intermediate Steps を有効にすると、途中の手順も残せます。
04実装レベルの3段階
半自動化で、第4章の①がほぼ無くなります。 新しい広告と止まった広告だけが表に並びます。本格構成で②と③が確認の作業に変わり、この段階が本記事の想定です。 差が大きいのは、②の外国語の広告文を訳して分類する作業が、競合の数だけ繰り返される手作業だからです。 段階を飛ばさないでください。 半自動化を1か月回すと、0件の続く競合と、ページIDが変わった競合が分かります。そこを片付けてからエージェントを足します。
05工数削減シミュレーション
導入後 32件 × 15分 ÷ 60 = 8 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 化粧品・食品・家電・雑貨などの日本のブランドが欧州(EU)向けに通販や小売で販売し、その Meta 広告を広告会社が運用している場合。競合の広告を運用担当が広告ライブラリの画面で毎週見て、ドイツ語・フランス語などの広告文を読み、報告を手で作っている場合。広告主ごとに追いかける競合が数社から10社程度に決まっている場合。
- 競合の広告が日本国内だけに配信されている場合(広告ライブラリのAPIでは、EUのどこにも配信されていない広告は、社会問題・選挙・政治に関する広告でない限り返らない)。競合の広告費や表示回数を知りたい場合(政治・社会問題の広告にしか返らない)。なお、競合の狙いの解釈と、広告主への提案の中身は、この構成では代替できません。
07最小構成で試す方法
- 広告主を1社選び、競合を3社に絞る
- 広告ライブラリの画面で、3社の先週の広告文と見出しを書き写す(言語のまま)
- 運用部で、訴求とオファーの分類表を10行ほど作る
- 手元のAIサービスに、分類表と広告文を貼り、「同じ訴求をまとめ、分類表の区分で分類し、根拠の原文と訳を付けてください。値引きの条件を省かないでください」と指示する
- 担当者が先週書いた報告と見比べる
3社は必ず試してください。 ワークフローを組む前に、「分類表で、担当者と同じ分け方ができるか」を確かめます。
| 出てきた内容 | 判断 |
|---|---|
| 担当者と同じ分類と束ね方になった | ワークフローの構築に進む |
| 分類が担当者の間でもそろっていなかった | 構成は有効。分類表を先に決める価値がある |
| 訳で値引きの条件が落ちた | 指示の書き方で直る。原文の抜き書きを必須にする |
2行目が出ることは珍しくありません。 失敗ではなく、報告の書き方がそろわなかった理由が分かったということです。 その場合は、3名で同じ広告を分類して食い違ったところから、分類表の手がかりを書き足します。
あわせて、3社がEUに広告を出しているかも、この時点で確かめます。 広告ライブラリの画面で国をEUの国に絞り、広告が出てこない競合は、この構成の対象から外します。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 競合の広告が0件 | EUに配信されていない広告は返らない。 対象を欧州での競合に絞る |
| 広告費が取れない | 政治・社会問題の広告だけ。本数とEUでの推定リーチで書く |
| 名前で検索して漏れる | キーワードは翻訳されない。ページIDで取る |
| 最初の一部しか取れない | Pagination で次のページのURLをたどる |
| 同じ広告が何十本も並ぶ | 規則で束ね、言語違いだけをエージェントに任せる |
| 訳で値引きの条件が落ちる | 原文の抜き書きを必須にする |
| 分類が週ごとに変わる | 分類表の区分だけを使わせる |
| 画像の中身を書いてしまう | 文字だけを渡していると指示し、表示は人が見る |
| 前から用意された広告を古いと扱う | 作成日時ではなく配信の開始日時で見る |
| トークンの期限切れで週の取得が止まる | 更新日を予定に入れ、期限切れの応答で止めて知らせる |
| 競合が新しいページで広告を出す | 一覧のページIDを月1回、画面で見直す |
上の3行が、この構成の範囲の読み違いです。 どれもエージェントの賢さとは関係が無く、広告ライブラリのAPIの仕様から起きます。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 広告ライブラリで公開されている競合の広告と、広告主ごとの競合の一覧、分類表、広告主の商品の一覧、報告の下書きです。公開の広告に機密はありませんが、どの広告主がどの競合を見ているかは、広告会社にとっての機密です。
- 広告主ごとの情報を混ぜない … エージェントへの入力は広告主ごとに分け、別の広告主の競合や商品を同じ入力に入れません
- 広告ライブラリの利用の条件を守る … 公式のページでは、表示のURLから取ったクリエイティブは分析に使い、利用規約に従うことが求められています。報告に競合の画像を貼るときは、社内で使い方を決めます
- 推し量りを事実のように書かない … 広告費や狙いは取れない情報です。報告では、取れた項目と担当者の見立てを分けて書きます
- アクセストークンを守る … n8n の認証情報に置き、ワークフローの中に書き込みません
- 広告主との約束を確かめる … 競合の広告の報告をどこまでの範囲で出すか、報告を広告主の社外へ出してよいかを、契約や取り決めで先に決めておきます
エージェントに渡すのは、公開の広告文と、その広告主の分類表と商品の一覧だけです。 広告主の売上や広告の成果の数字は渡しません。要約に要らないからです。
誤りが起きた場合のリスクは、競合の変化を見落とすことと、条件を落とした訳で広告主の判断を誤らせることの2つです。 前者は0件の競合の見直しで、後者は原文の抜き書きの照合で防ぎます。
10まず何から始めるか
1週目:競合の一覧をページIDで作り直す
広告主ごとの競合を、Facebook ページのIDと見る国で一覧にします。あわせて、各競合がEUに広告を出しているかを広告ライブラリの画面で確かめます。
2週目:分類表を作り、3社で試す
運用部で訴求とオファーの分類表を作り、手元のAIサービスで3社の広告を分類させます。値引きの条件が訳で落ちていないかを最優先で見ます。
3週目:取得と新旧の判定をつなぐ
n8n で広告ライブラリのAPIを呼び、新しい広告と止まった広告を表に書き出すところまで作ります。この時点ではエージェントを入れず、取りこぼしが無いかだけを見ます。
4週目:0件の競合を片付ける
0件が続く競合を、一覧から外すか、画面で見る対象に分けます。画面で見る対象に分けた競合は、報告書の中でもAPIで取った競合と欄を分け、どちらの方法で見たかを広告主に分かるようにします。 同じ欄に混ぜると、取り方の違いによる差が、競合の動きの差に見えてしまいます。
2か月目: エージェントを足し、束ね・分類・要約を下書きの表に書きます。担当者の直しを毎週見て、分類表を直します。3か月目以降: 1件60分が何分になったかを実測し、広告主への報告で、分類の直しが無い週が続いた時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
ad_type の既定がALLですべての話題を返すこと。EUに配信されていない広告は社会問題・選挙・政治のものしか返らないこと。search_page_ids は10件まで、search_terms は100文字まで、キーワードは翻訳されないこと。ad_active_status、配信日の範囲、エラー613 | Meta for Developers: Ad Library API(ads_archive) | 2026-10-08 |
| 返る項目(広告文、見出し、配信の開始・終了、表示のURL、配信面、言語)と、EUのみ・EUと英国など・政治と社会問題のみの項目。表示のURLから取ったクリエイティブの扱い | Meta for Developers: Archived Ad | 2026-10-08 |
| タイムゾーンの扱いと、公開が要ること | n8n Docs: Schedule Trigger | 2026-10-08 |
| Pagination(Response Contains Next URL) | n8n Docs: HTTP Request | 2026-10-08 |
| 前回までの実行で見た値を除く操作 | n8n Docs: Remove Duplicates | 2026-10-08 |
| Return Intermediate Steps | n8n Docs: Tools Agent | 2026-10-08 |
| サブワークフローを道具にすること、本番では公開が要ること | n8n Docs: Call n8n Workflow Tool | 2026-10-08 |
| 例から作ったスキーマは全項目が必須 | n8n Docs: Structured Output Parser | 2026-10-08 |
| ノードの設定項目 | n8n Docs: Anthropic Chat Model | 2026-10-08 |
競合の動きが広告主にとって何を意味するかは、運用担当と広告主で判断してください。 本記事は上記の公式ページで確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-1128)についてのご相談はこちらから。
