運用している広告アカウントの前日の数値をエージェントが毎朝見回り、予算消化・CPA・配信停止・不承認の異常に原因の候補と対応の案を付ける
運用している広告アカウントの前日の数値を毎朝取り込み、予算消化の早すぎ・遅すぎ、CPAの急変、配信の止まり、広告の不承認を拾います。拾った異常ごとに、エージェントが原因の候補と担当者が取るべき対応の案を付けます。
- 生成AI
- ChatGPT/Claude/Gemini
- 連携・自動化
- Make/n8n/Power Automate/Python/Zapier
- 対象業界
- EC/小売/広告
- 対象部門
- マーケティング
- 対象業務
- 内容確認・チェック/集計・分析
- 主な課題
- 人手が足りない/属人化している/期限・対応漏れが起きる
- AIで行う処理
- エージェント
- 主な効果
- 対応スピード向上/工数削減/機会損失防止
- 導入難易度
- ★★★★☆
- 実装レベル
- 本格構成
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 運用担当が、受け持ちのアカウントの管理画面を1つずつ開く
- 前日の費用、表示回数、クリック数、コンバージョン数、CPAを見る
- 月の予算表と照らし、消化が予定より早すぎないか・遅すぎないかを暗算する
- 不承認の広告、配信が止まったキャンペーン、支払いの警告が出ていないかを見る
- 気になる数値があれば、作業記録を開いて前日に何を変えたかを確かめる
- 原因の当たりが付いたら直し、付かなければ担当営業に広告主の事情を聞く
- 対応したことを作業記録に書く
- 自動毎朝7時30分に n8n のワークフローが動く
- 自動Google 広告と Meta 広告の API から、全アカウントの前日の数値、キャンペーンの状態、広告の審査の状態を取り込む
- 自動予算表と直近の数値から、消化のペース、CPAの変化、表示回数の急減を計算し、規則で異常を拾う
- 自動不承認の広告、配信が止まったキャンペーン、支払いの問題を拾う
- 自動前回までに拾って対応中のものを外す
- 自動残った異常ごとに、エージェントが作業記録・広告主の予定・不承認の理由・リンク先の応答などを必要なだけ引き、原因の候補と対応の案をまとめる
- 自動担当者ごとの朝の一覧を作り、社内チャットへ送る
- 人運用担当が一覧を見て、異常のあるアカウントだけを管理画面で開く
- 人対応を決めて実行する。予算や配信の変更は人が行う
- 人対応の結果と、原因の候補が当たっていたかを一覧に記録する
各工程の詳しい説明を読む
- 運用担当が、受け持ちのアカウントの管理画面を1つずつ開く
- 前日の費用、表示回数、クリック数、コンバージョン数、CPAを見る
- 月の予算表と照らし、消化が予定より早すぎないか・遅すぎないかを暗算する
- 不承認の広告、配信が止まったキャンペーン、支払いの警告が出ていないかを見る
- 気になる数値があれば、作業記録を開いて前日に何を変えたかを確かめる
- 原因の当たりが付いたら直し、付かなければ担当営業に広告主の事情を聞く
- 対応したことを作業記録に書く
(a)見回りが朝の時間を食う。 1アカウント4分でも15アカウントで1時間で、異常の無いアカウントにも同じ時間をかけています。
(b)気づくのが遅れる。 配信が止まったアカウントが受け持ちの最後のほうにあると、気づくのは昼前です。 その間、広告主の売上の機会が失われます。不承認も同じで、週末に出た不承認に月曜の昼に気づくことがあります。
(c)原因の探し方が担当者で違う。 経験の長い担当者は、CPAが上がれば入札の変更、リンク先の不調、セールの終わり、の順に当たりを付けます。経験の浅い担当者は、何から調べればよいかが分からず、担当営業に「数値が悪いです」とだけ伝えることになります。
(d)予算の暗算は間違える。 月の途中で予算が増額されると消化のペースの暗算は外れ、使い切りに気づくのが月の25日、ということが起きます。
- 【自動】 毎朝7時30分に n8n のワークフローが動く
- 【自動】 Google 広告と Meta 広告の API から、全アカウントの前日の数値、キャンペーンの状態、広告の審査の状態を取り込む
- 【自動】 予算表と直近の数値から、消化のペース、CPAの変化、表示回数の急減を計算し、規則で異常を拾う
- 【自動】 不承認の広告、配信が止まったキャンペーン、支払いの問題を拾う
- 【自動】 前回までに拾って対応中のものを外す
- 【自動】 残った異常ごとに、エージェントが作業記録・広告主の予定・不承認の理由・リンク先の応答などを必要なだけ引き、原因の候補と対応の案をまとめる
- 【自動】 担当者ごとの朝の一覧を作り、社内チャットへ送る
- 【人】 運用担当が一覧を見て、異常のあるアカウントだけを管理画面で開く
- 【人】 対応を決めて実行する。予算や配信の変更は人が行う
- 【人】 対応の結果と、原因の候補が当たっていたかを一覧に記録する
8番目が、この設計の分かれ目です。 一覧に何も無いアカウントを念のため全部開く運用にすると、見回りの時間はほとんど減りません。
9番目を人に残すのも、意図してのことです。 エージェントには API の読み取りの権限しか渡しません。予算の変更や配信の停止は、広告主との約束に関わる判断です。
02今回想定するシステム構成
Google 広告(Google Ads API) Meta 広告(マーケティング API) 月次の予算表/運用の作業記録/広告主の予定 │ ▼【トリガー】n8n の Schedule Trigger(毎朝7時30分、Asia/Tokyo) n8n のワークフロー ├──▶ HTTP Request ノードで全アカウントの前日の数値と状態を取得 ├──▶ Code ノードで消化ペース・CPAの変化・表示回数の急減を計算 │ 規則で異常を拾う(計算はここで確定させる) ├──▶ 対応中の異常を外す ▼ AI Agent ノード(Tools Agent)+ Claude │ 異常1件ごとに、道具を選んで事実を集める │ ・作業記録を引く ・広告主の予定を引く │ ・不承認の理由を引く ・リンク先の応答を確かめる │ ・過去の同じ種類の異常と対応を引く │ Structured Output Parser で決まった形のJSONを返す ▼ 担当者ごとの朝の一覧(スプレッドシート)+社内チャットへの通知 ▼ 【人】異常のあるアカウントだけを開き、対応を決めて実行する
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| ワークフロー | n8n | Make、Zapier、Power Automate |
| 生成AI | Claude API(n8n の Anthropic Chat Model ノード) | OpenAI API、Gemini API |
| 集計 | JavaScript(n8n の Code ノード) | Python |
| 連携 | Google Ads API | 媒体の管理画面のレポートの定期出力 |
| 連携 | Meta マーケティング API | 同上 |
| 保管 | Google スプレッドシート | SharePoint リスト |
| 通知 | 社内チャット | メール |
媒体の管理画面にも、自動のルールや通知の機能があります。 まずそちらを確認してください。自前で組む価値があるのは、2つの媒体を同じ基準で見たい場合と、社内の作業記録や広告主の予定と結びつけたい場合です。
n8n を選ぶ理由は、道具を選ばせるエージェントをワークフローの中にそのまま組めることです。 AI Agent ノードは、つないだ道具のどれを呼ぶかをエージェントが決める作りで、少なくとも1つの道具のサブノードが必要とされ、現在はすべて Tools Agent として動きます。
Google Ads のノードには制約があります。 n8n の Google Ads ノードが対応しているのは、キャンペーンの一覧の取得と、1つのキャンペーンの取得だけです。前日の数値や広告の審査の状態は取れません。ノードに無い操作は、同じ認証情報を使って HTTP Request ノードから API を呼ぶよう案内されています。この構成では、取得はすべて HTTP Request ノードで行います。
Google Ads API では、Google 広告のクエリ言語(GAQL)で取りたい項目を指定します。 公式のクエリ集には、キャンペーンごとに campaign_budget.amount_micros、metrics.cost_micros、metrics.impressions などを直近7日の範囲で取る例が載っています。金額は micros(通貨単位の100万分の1)で返るため、Code ノードで円に直します。
不承認の広告は、ad_group_ad の policy_summary.approval_status が DISAPPROVED のものとして取れます。 公式のサンプルでは、あわせて policy_summary.policy_topic_entries を取り、どのポリシーに当たったかの名称と、根拠となった文字列を出しています。
Meta 広告では、広告の effective_status で状態を見ます。 値には ACTIVE、PAUSED、PENDING_REVIEW、DISAPPROVED、PENDING_BILLING_INFO、CAMPAIGN_PAUSED、ADSET_PAUSED、WITH_ISSUES などがあります。審査の結果は ad_review_feedback、配信に影響する問題は issues_info で取れるとされています。
03どうやって実装するのか
処理の起点を決める
n8n の Schedule Trigger で、営業日の毎朝7時30分に動かします。 Schedule Trigger は、秒・分・時・日・週・月の間隔と、カスタムの cron 式に対応しています。cron 式は (秒) 分 時 日 月 曜日 の6つの欄で、秒の欄は省略できるとされています。月曜から金曜の7時30分なら 30 7 * * 1-5 です。
タイムゾーンを必ず設定してください。 Schedule Trigger は、ワークフローにタイムゾーンが設定されていればそれを、なければインスタンスのタイムゾーンを使います。自分でホストする場合の既定は America/New York、n8n Cloud は登録時に検出を試み、できなければ GMT とされています。ワークフローのタイムゾーンを Asia/Tokyo にします。 忘れると、朝の見回りが夜中に動き、「前日」の範囲がずれます。
保存して公開しないと動きません。 Schedule ノードをトリガーにするワークフローは保存して公開するよう注意書きがあり、cron 式に変数を使った場合は、その値が公開の時点で評価されるとされています。時刻を変えたら公開し直します。
7時30分にするのは、出社前に一覧をそろえるためです。 取り込んだ前日の値が朝のうちに管理画面の値と変わっていないかを試しの期間に確かめ、時刻を決めます。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 前日の数値 | アカウント・キャンペーンごとの費用、表示回数、クリック数、コンバージョン数 | Google Ads API/Meta マーケティング API |
| 直近の数値 | 同じ項目の直近28日分 | 同上(前回までの取り込みを保存したもの) |
| 状態 | キャンペーンの状態、広告の審査の状態、支払いの問題 | 同上 |
| 予算表 | 広告主・アカウントごとの月の予算、期間、月の途中の増減 | 社内の予算表 |
| 作業記録 | 日時、アカウント、誰が何を変えたか(入札、予算、広告文、配信の設定) | 運用の作業記録 |
| 広告主の予定 | セール、新商品の発売、サイトの改修、休業日 | 担当営業が書き込む予定表 |
| 異常の台帳 | 前回までに拾った異常、原因、対応、当たっていたか | スプレッドシート |
質を決めるのは、作業記録と広告主の予定の2つです。 この2つが無ければ、エージェントは数値だけから原因を推し量るしかなく、「入札の変更によるものと考えられます」のような、根拠の無い候補を出します。 作業記録に「いつ、誰が、何を変えたか」が残っていれば、候補は記録を指して書かれます。
広告主の予定は、担当営業に書いてもらいます。 セールの終わりでCPAが上がるのは異常ではありません。予定が書かれていないと、毎月同じ時期に同じ「異常」が上がり、一覧が読まれなくなります。
データの取得方法を決める
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 予算・費用・表示回数 | GAQL で campaign・campaign_budget・metrics を指定 | 消化のペースと数値の変化の計算 |
| 不承認の広告 | GAQL で policy_summary.approval_status = DISAPPROVED を指定 | 不承認の検出と、当たったポリシーの名称 |
| Meta の広告の状態 | 広告の effective_status、issues_info | 配信の止まり、不承認、支払いの問題 |
| 作業記録・予定・台帳 | スプレッドシートの読み取り(道具) | エージェントが必要なときに引く |
数値と状態は、ワークフローの冒頭で全アカウント分を取ります。 ここは決まった手順なので、エージェントに任せません。作業記録と広告主の予定は、冒頭では読みません。 異常の出たアカウントについてだけ、エージェントが道具で引きます。120アカウント分の記録を毎朝まるごと生成AIへ渡さないためです。
取り込んだ前日の数値は、毎朝保存しておきます。 直近28日の比較を毎回 API から取り直すと呼び出しが増え、後から値が変わっていた場合に比べる基準が日によって変わります。
AIへ渡す前に整形する
- 金額の換算 … Google Ads API の micros を円に直します。Meta の金額の単位もそろえます
- 消化のペースの計算 … 月の予算、月の途中の増減、経過日数から、前日時点で使っているはずの額を出し、実際の費用と比べます
- CPAの変化の計算 … 前日のCPAを、直近7日の平均と、前週の同じ曜日と比べます
- 表示回数の急減の検出 … 配信中のキャンペーンで、前日の表示回数が0か、直近の平均から大きく下がったものを拾います
- 状態の異常の検出 … 不承認、支払いの問題、
WITH_ISSUESなどを拾います - 少ない数での揺れを外す … コンバージョンが数件のアカウントでは、1件の差でCPAが倍になります。一定の件数に満たないものは、CPAの変化としては拾いません
- 台帳との突き合わせ … 同じアカウント・同じ種類の異常で、対応中のものは外します。状態が変わったものだけを残します
2番目で、予算の増減を必ず入れてください。 月の途中で増額されたのに元の予算で計算すると、正常な消化を「早すぎ」として毎日拾います。 予算表に増減の日付と額の列を持たせます。
6番目を省くと、一覧が小さなアカウントの揺れで埋まります。 コンバージョンの少ないアカウントは、CPAではなく費用とクリック数の変化で見ます。 閾値は、試しの期間に拾った件数を見て決めます。
AIに処理させる
させるのは、規則で拾った異常1件ごとに、必要な道具を選んで事実を集め、次の4つを組み立てることです。
| 組み立てるもの | 中身 |
|---|---|
| 何が起きたか | 異常の種類と数値を、担当者が一目で分かる言葉にする |
| 原因の候補 | 1〜3個。それぞれに、根拠にした記録(作業記録の行、予定、不承認の理由、リンク先の応答)を付ける |
| 対応の案 | 担当者が確かめること、担当営業に聞くこと、直す候補 |
| 急ぎの度合い | 規則で決めた区分をそのまま使う |
| 道具 | 中身 | 呼ぶ場面 |
|---|---|---|
get_change_log | そのアカウントの直近7日の作業記録 | 数値の変化の原因を探すとき |
get_client_calendar | 広告主の予定(セール、改修、休業) | CPAや表示回数の変化のとき |
get_policy_detail | 不承認の広告の、当たったポリシーの名称と根拠の文字列 | 不承認のとき |
check_landing_page | リンク先のページの応答(状態コード) | コンバージョンの急減のとき |
get_past_incidents | 同じアカウント・同じ種類の過去の異常と、当たっていた原因 | すべての異常 |
どの道具を呼ぶかを決めるのが、エージェントの仕事です。 不承認なら get_policy_detail、コンバージョンだけが急に0になったなら check_landing_page と get_change_log を先に呼ぶ、というように、異常の種類と、呼んだ結果によって次に呼ぶものが変わります。 これを固定の手順で書くと、分岐が異常の種類の数だけ増えます。
| させないこと | 理由 |
|---|---|
| 異常かどうかの判定 | 規則で決める。日によって揺れないようにする |
| 急ぎの度合いの判定 | 規則で決める。配信停止と不承認は常に最優先 |
| 予算・入札・配信の変更 | 広告主との約束に関わる。道具に書き込みの操作を持たせない |
| 根拠の無い原因の候補 | 記録に無い原因を「考えられる」と書かせない |
| 広告主への連絡文の送信 | 連絡するかどうかは担当者と担当営業が決める |
3行目は、指示ではなく道具の作りで守ります。 指示で「変更しないでください」と書いても、変更できる道具がつながっていれば呼ぶことがあります。API の認証情報を読み取りの権限だけにし、書き込みの道具をそもそもつながないのが確実です。
指示内容を固定する
AI Agent ノードの System Message に次を入れます。
あなたは広告代理店の運用部で、毎朝の見回りを手伝う立場です。
渡された異常1件について、道具を使って事実を集め、
原因の候補と、担当者が取るべき対応の案をまとめてください。
【異常は判定済みです】
異常の種類、数値、急ぎの度合いは、規則ですでに決まっています。
それらを変えたり、異常ではないと判断したりしないでください。
【道具の使い方】
- まず get_past_incidents で、同じアカウントの過去の同じ種類の異常を見てください
- 数値の変化なら get_change_log と get_client_calendar を見てください
- 不承認なら get_policy_detail を見てください
- コンバージョンが急に減ったなら check_landing_page を見てください
- 同じ道具を同じ条件で2回呼ばないでください
【原因の候補の書き方】
- 候補は1〜3個までにしてください
- すべての候補に、根拠にした記録を evidence として付けてください
(作業記録の日時と内容、予定の名前、ポリシーの名称、状態コードなど)
- 道具で得た記録に根拠が無い原因は、候補に入れないでください
- 根拠が見つからないときは、原因の候補を空にし、
cause_unknown を true にしてください。推測で埋めないでください
- 媒体の仕組みの変更や競合の動きなど、確かめようのない原因を書かないでください
【対応の案の書き方】
- 担当者が確かめること、担当営業に聞くことを分けて書いてください
- 予算を増やす・減らす、配信を止めるといった判断を、結論として書かないでください。
「〜を確かめる」「〜を検討する」の形にしてください
【異常】{anomaly_json}
「根拠が無ければ空にする」を書かないと、エージェントは必ず何かを書きます。 作業記録にも予定にも手がかりが無いとき、「季節要因」「競合の出稿の増加」のような、確かめようのない候補で埋めます。 担当者はそれを読んで、調べるのをやめてしまいます。分からないことを分からないと返させることが、この一覧を信用してもらう条件です。
「同じ道具を2回呼ばない」は、繰り返しを止めるためです。 Tools Agent には、答えを作るためにモデルを何回回すかの上限(Max Iterations)があり、既定は10とされています。見回りでは、異常1件あたり道具を5回ほど呼べば足りるので、上限を下げておきます。 上限に達したものは、cause_unknown として一覧に出します。
出力形式を固定する
Tools Agent の「Require Specific Output Format」を有効にし、Structured Output Parser をつなぎます。 次の形のJSONで受け取ります。
{
"account_id": "",
"platform": "google | meta",
"anomaly_type": "budget_pace_fast | budget_pace_slow | cpa_spike | impressions_drop | disapproved | billing | delivery_issue",
"severity": "critical | high | normal",
"what_happened": "",
"cause_candidates": [
{ "cause": "", "evidence": "", "source": "change_log | calendar | policy | landing_page | past_incident" }
],
"cause_unknown": false,
"actions": {
"check_by_operator": [ "" ],
"ask_sales": [ "" ]
},
"tools_called": [ "" ]
}
1つ目の理由は、severity と anomaly_type を規則の側から持ち込めることです。 この2つはエージェントに渡した値をそのまま返させ、ワークフローの側で、渡した値と返ってきた値が同じかを確かめます。 違っていれば、エージェントが判定を書き換えたということなので、その行は差し戻します。
2つ目は、source で根拠の種類が分かることです。 担当者は、候補が作業記録から来たのか、予定から来たのかを見て、どこを確かめればよいかがすぐ分かります。
severity | 付けるもの(規則で決める) |
|---|---|
critical | 配信の停止、支払いの問題、主力の広告の不承認 |
high | 予算の消化が大きく早い(月内に使い切る見込み)、CPAが直近の平均から大きく悪化 |
normal | 消化が遅い、表示回数の緩やかな減少 |
critical のものは、朝の一覧を待たずに担当者へ直接通知します。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| Google Ads API | HTTP Request ノード(読み取りのみ) | 数値、予算、キャンペーンの状態、不承認の広告 |
| Meta マーケティング API | HTTP Request ノード(読み取りのみ) | 数値、広告の effective_status、issues_info |
| 予算表・作業記録・予定・台帳 | スプレッドシートの読み取り(道具) | エージェントが必要なときに引く |
| 朝の一覧 | スプレッドシートへの書き込み | 担当者ごと・異常ごとの行 |
| 社内チャット | 通知 | 担当者ごとの一覧の要約と、critical の即時通知 |
媒体の API には書き込みません。 認証情報は読み取りの権限に絞り、この構成から予算も入札も配信の状態も変えられないようにします。 自動のルールで予算を動かしたいなら、それは媒体の機能で、人が条件を決めて設定するものです。
作業記録にも書き込みません。 作業記録は運用担当が書くもので、エージェントの出力を混ぜると、「誰が何を変えたか」の記録に、変えていないことが紛れ込みます。
人が確認する
運用担当が見るのは、自分の担当分の朝の一覧です。全アカウントを開くことはしません。
criticalを最初に見る … 配信の停止、支払い、不承認。すぐに管理画面を開いて状態を確かめますhighの原因の候補を確かめる …evidenceの記録を見て、候補が当たっているかを判断しますcause_unknownのものを自分で調べる … エージェントが根拠を見つけられなかったもの。経験の出番はここです- 対応を決めて実行する … 予算や配信の変更は、広告主との約束の範囲で担当者が行います
- 候補が当たっていたかを記録する … 当たった、外れた、別の原因だった、を台帳に残します
5番目を省かないでください。 この記録が get_past_incidents の中身になり、次に同じアカウントで同じ異常が出たとき、エージェントが最初に見る根拠になります。 記録がたまるほど、候補が当たるようになります。
一覧に何も無いアカウントは開きません。 ただし週に1回、受け持ちの全アカウントを流し見る時間を別に取ります。 規則の閾値に掛からない緩やかな悪化は、この一覧では拾えないからです。
例外に対処する
| 起きること | 対応 |
|---|---|
| 媒体の API が応答しない・認証が切れた | そのアカウントを「取得できなかった」として一覧の先頭に出す。「異常なし」と区別する |
| 前日の値が朝のうちに変わっていた | 取得の時刻を記録し、昼にもう一度取り直す |
| 拾った異常が普段の数倍ある | エージェントに渡さず、担当者へ知らせる。媒体側の障害や、共通の設定の誤りを疑う |
| 予算表にそのアカウントが無い | 消化のペースを計算せず、「予算表に無い」として出す |
| エージェントが上限の回数に達した | cause_unknown として出す |
返ってきた severity が渡した値と違う | その行を差し戻し、渡した値で一覧に出す |
| リンク先の確認で応答が返らない | 状態コードが取れなかったこと自体を根拠として書く |
| 同じ異常が数日続く | 台帳で対応中のものは外し、状態が変わったときだけ再び出す |
1行目がいちばん大事です。 取得に失敗したアカウントが一覧に何も出ないと、担当者は「異常なし」と読みます。 失敗は、異常よりも目立つ場所に出します。
3行目は、媒体の側の障害の日のためです。 多くのアカウントで同時に表示回数が落ちた日は、1件ずつ原因を探しても答えは出ません。 まとめて知らせ、人が判断します。
記録を残す
- 毎朝取り込んだ数値と状態(アカウント・日付ごと)
- 規則で拾った異常と、そのとき使った閾値と予算表の内容
- エージェントの入力、呼んだ道具とその結果(Return Intermediate Steps で取得)、出力のJSON
- 担当者が取った対応と、原因の候補が当たっていたか
- 取得に失敗したアカウントと、その理由
3つ目の「呼んだ道具とその結果」は、Tools Agent の Return Intermediate Steps を有効にして残します。 エージェントが途中でたどった手順を最終の出力に含める設定です。候補が外れたときに、どの記録を見てその候補を出したのかを後から追えます。 外れの理由が、記録の不足なのか、読み違いなのかで、直す場所が変わります。
04実装レベルの3段階
半自動化だけでも、全アカウントを開く必要はなくなります。 ただし原因の当たり付けは担当者に残り、経験による差はそのままです。本格構成で1件1分になり、この段階が本記事の想定です。 段階を飛ばさないでください。 規則が落ち着かないうちにエージェントを足すと、拾いすぎた異常の1件ずつに候補が付き、一覧がさらに長くなります。
05工数削減シミュレーション
導入後 2,400件 × 1分 ÷ 60 = 40 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 複数の広告主から検索広告とSNS広告の運用を受託し、担当者1人で10以上のアカウントを持っている広告代理店・インハウスの運用部門。毎朝の管理画面の見回りが担当者の経験に頼っており、予算の使い切りや配信停止に昼まで気づかなかったことがある場合。運用の作業記録と広告主のセールなどの予定を、表の形で残せる場合。
- 運用するアカウントが数個で、毎朝の見回りに数分しかかからない場合。入札や予算を媒体の自動の仕組みに任せきりで、日々の数値を人が見ていない場合。広告主との契約で、アカウントのデータを外部の生成AIへ渡すことが認められていない場合。なお、予算の増減や配信の停止を決めることは、この構成では代替できません。
07最小構成で試す方法
- 先月、実際に異常があったアカウントの日を10件選ぶ(配信停止、不承認、CPAの急変、予算の使い切りを混ぜる)
- その日について、管理画面から前日までの数値を書き出し、作業記録と広告主の予定の該当する行を抜き出す
- 手元の生成AIの画面に、数値と記録を貼り、「この異常の原因の候補を、貼った記録を根拠に1〜3個挙げてください。根拠が無ければ不明としてください」と指示する
- 出てきた候補を、当時の実際の原因と突き合わせる
組む前に、「記録があれば候補が当たるのか」を確かめます。
| 出てきた内容 | 判断 |
|---|---|
| 当時の実際の原因が候補に入った | API の取り込みとエージェントの組み立てに進む |
| 根拠の無い候補で埋めてきた | 指示の書き方で直る。構成は有効 |
| 記録が足りず、ほとんどが不明になった | 作業記録と予定の残し方が先。 AIの問題ではない |
3行目が出ることは珍しくありません。 失敗ではなく、原因の探し方が担当者の頭の中にしか無かったということです。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| エージェントが根拠の無い原因で埋める | 根拠が無ければ空にし cause_unknown にすると指示で明記する |
| エージェントが異常の判定や急ぎの度合いを書き換える | 規則の値を渡して返させ、ワークフローの側で一致を確かめる |
| 朝の見回りが夜中に動く | Schedule Trigger のタイムゾーンを Asia/Tokyo に設定する |
| 時刻を変えたのに動く時刻が変わらない | 保存して公開し直す |
| Google Ads ノードで数値が取れない | ノードはキャンペーンの取得だけ。 HTTP Request ノードで API を呼ぶ |
| 費用が100万倍で表示される | micros を円に直す |
| 予算の増額後に毎日「早すぎ」が出る | 予算表に月の途中の増減を持たせる |
| 小さなアカウントのCPAの揺れで一覧が埋まる | コンバージョンの件数が少ないものは、CPAで拾わない |
| 取得に失敗したアカウントが「異常なし」に見える | 失敗を一覧の先頭に出す |
| 媒体の障害の日に同じ異常が大量に出る | 件数が普段の数倍ならエージェントに渡さず、人に知らせる |
| エージェントが同じ道具を何度も呼ぶ | 指示で禁じ、Max Iterations(既定10)を下げる |
| エージェントに予算の変更をさせようとする | 書き込みの道具をつながず、認証情報を読み取りに絞る |
上の2行が、この構成の失敗のほとんどです。 どちらも、エージェントに「分からない」と「決めない」を許していないことから起きます。
最後の行も、最初から守ってください。 候補が外れていたとき、誤った変更が一晩で全アカウントに広がります。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 広告主ごとの予算、費用、成果の数値、広告文とリンク先、セールや新商品の予定、運用の作業記録です。広告主にとっては、競合に知られたくない情報です。
- 広告主との契約で、外部の生成AIへ渡してよいかを確かめる … とくに発表前の新商品やセールの予定は、渡す前に広告主の了承が要ることがあります
- 生成AIに渡す範囲を、異常1件分に限る … 全アカウントの数値を毎朝渡すのではなく、規則で拾った異常と、エージェントが道具で引いた記録だけを渡します
- 媒体の認証情報を読み取りに絞る … 書き込みの権限を持つ認証情報を n8n に置かないでください
- 自動で広告主へ連絡しない … 異常の知らせを広告主へ送るかどうかは、担当者と担当営業が決めます。原因の候補が外れていたときの連絡は、取り消せません
- この構成は運用の判断を代替しません … 予算を増やすか、配信を止めるかは、広告主との約束と運用の方針に基づいて担当者が決めることです
- エージェントの途中の手順を残す … 候補が外れたときに、どの記録を見たかを追えるようにします
誤りが起きた場合のリスクは、異常を見落とすことと、誤った候補を信じて誤った対応をすることの2つです。 前者は取得の失敗を「異常なし」と見せると起き、後者は根拠の無い候補を許すと起きます。
10まず何から始めるか
1週目:作業記録と広告主の予定の書き方をそろえる
作業記録に日時・アカウント・誰が・何を・どう変えたかの列をそろえ、「入札調整」の一言で済ませないよう決めます。担当営業には、広告主のセール、新商品、サイトの改修、休業日を書く予定表を用意してもらいます。
2週目:10件で試す
先月の異常のあった日から10件を選び、手元の生成AIの画面で原因の候補を出させます。当時の実際の原因と突き合わせ、根拠の無い候補で埋めていないかを最優先で見ます。
3週目:API の取り込みと規則をつくる
n8n の Schedule Trigger を Asia/Tokyo で設定し、HTTP Request ノードで Google Ads API と Meta マーケティング API から前日の数値と状態を取り込みます。Code ノードで消化のペースとCPAの変化を計算し、規則で拾った異常を一覧に書き出すところまで作ります。 この時点ではエージェントを入れません。
4週目:閾値を調整する
1週間分の一覧で、拾いすぎと拾い漏れを担当者と確かめます。
2か月目: AI Agent ノードに道具を5つつなぎ、原因の候補と対応の案を付けます。候補が当たっていたかを毎日記録します。3か月目以降: critical の即時通知を足し、1件4分が何分になったかを実測します。担当者が朝に全アカウントを開かなくなり、候補の当たりの記録がたまり始めた時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| Schedule Trigger が秒・分・時・日・週・月の間隔とカスタムの cron 式に対応し、cron 式が6つの欄で秒は省略できること。タイムゾーンがワークフロー、なければインスタンスの設定を使い、自分でホストする場合の既定が America/New York、n8n Cloud は検出できなければ GMT であること。保存して公開する必要があり、cron 式の変数は公開時に評価されること | n8n Docs: Schedule Trigger node | 2026-09-30 |
| AI Agent ノードがすべて Tools Agent として動き、道具のサブノードが必要なこと。System Message、Max Iterations(既定10)、Return Intermediate Steps、Require Specific Output Format と Structured Output Parser | n8n Docs: Tools AI Agent node | 2026-09-30 |
| Google Ads ノードがキャンペーンの一覧と1件の取得だけに対応し、それ以外は同じ認証情報で HTTP Request ノードから API を呼ぶよう案内されていること | n8n Docs: Google Ads node | 2026-09-30 |
ad_group_ad.policy_summary.approval_status = DISAPPROVED で不承認の広告を取り、policy_topic_entries でポリシーの名称と根拠の文字列を出せること | Google Ads API: Get all disapproved ads | 2026-09-30 |
GAQL で campaign_budget.amount_micros、metrics.cost_micros などを期間を指定して取る例があり、金額が micros で表されること | Google Ads API: Query Cookbook | 2026-09-30 |
広告の effective_status の値(ACTIVE、PAUSED、PENDING_REVIEW、DISAPPROVED、PENDING_BILLING_INFO、CAMPAIGN_PAUSED、ADSET_PAUSED、WITH_ISSUES など)と、ad_review_feedback、issues_info の項目 | Meta for Developers: Ad(Marketing API Reference) | 2026-09-30 |
媒体の API の利用の申請と権限の範囲は、各媒体の最新の案内に従ってください。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-0391)についてのご相談はこちらから。
