MCC アカウント全体で Google 広告の目標ステータスを監視する方法
MCC アカウント全体で Google 広告の目標ステータスを監視する方法

Googleシートを使ってMCCアカウント全体のGoogle Adsゴールステータスを監視する方法

この記事を楽しんでいますか?
ソーシャルメディアでシェアする
内容

このチュートリアルでは、MCC配下の全アカウントのコンバージョンゴールアクティビティを監査するスクリプトについて説明します。結果をGoogleシートに書き出し、各ゴールの健全性をタグ付けし、ステータスを色分けし、問題がある場合のみサマリーをメールで送信します。

不必要なツールやサードパーティのダッシュボードはなく、生のコントロールと完全な可視性だけだ。

MCCアカウント全体でGoogle広告の目標ステータスを監視する

このスクリプトの機能

このスクリプトは、あなたのMCCの下にあるすべてのGoogle Adsアカウントを監査し、定義されたルックバック期間にわたって各コンバージョンゴールのステータスを評価します。どのゴールがアクティブか、または壊れているかを推測する代わりに、このシステムはGoogleシートでリアルタイムのスナップショットを提供し、注意が必要な場合にのみ警告を発します。

  • MCCに接続し、リンクされた各アカウントをループする
  • Skips accounts you've blocklisted (excluded)
  • 設定されたルックバック期間におけるキャンペーンレベルのコンバージョン実績をプルする。
  • 各コンバージョン目標の健全性を評価する
  • Googleシートに結果を記録し、ステータスに背景色を適用する。
  • 問題のあるアカウントやゴールだけをまとめてメールで送信

メール通知

There will be two email notifications: one for accounts needing attention and the other for all good accounts.

問題のある口座や目標
メッセージ

Got it, your script needs two distinct email outputs:

  1. "All Good "Eメール問題が見つからなかった場合)

  2. ⚠️ "Needs Attention"(要注意)Eメール(活動休止、欠落、低パフォーマンスの目標がある場合

あなたのサンプルデータと現在のロジックを使って、両方のバージョンがどのように見えるべきかを正確に示します:

メッセージ#1

モニターされているすべてのコンバージョン目標は、過去60日間の活動を報告しています。

どの口座でも問題は見つかっていない。

レポート全文を見る
https://docs.google.com/spreadsheets/d/yoursheetid

メッセージ #2

以下のコンバージョン目標は見直しが必要かもしれない(例:最近コンバージョンしていない、活動休止中):

Bright Widgets Inc (123-456-789) - 問い合わせフォームの送信 (要注意)
Acme Corp (987-654-321) - スケジュールコール (休止中)
Acme Corp (987-654-321) - 無料トライアル登録 (要注意)
Rocket Leads (456-789-123) - (設定済み、活動なし) (最近のコンバージョンなし)
Beta Test Group (321-654-987) - (未設定) (非アクティブ)
Zebra Analytics (999-111-222) - ホワイトペーパーダウンロード (要注意)

レポート全文を見る
https://docs.google.com/spreadsheets/d/yoursheetid

必要条件

スクリプトをデプロイする前に、お使いの環境が正しく設定されていることを確認してください。このスクリプトは、Google Ads MCC コンテキスト内で実行し、データを書き込んでアラートを送信するように設計されています。

  • Google Ads MCCアカウント
  • グーグル・スプレッドシート(手動で作成すること)

オリジナル脚本

これはスクリプトの完全な未編集版です。すべてのコメント、書式、ロジックは最初に書かれたとおりです。このチュートリアルで後述する内訳に従うつもりなら、これを修正しないでください。

// ========== CONFIGURATION ==========

const SHEET_ID = '1PvpW3eUl5fqRwabBg0P7D8LKzW83MOTVX1KDBMB3ipA';

const LOOKBACK_DAYS = 60;

const EXCLUDED_ACCOUNT_IDS = [

'000-000-000', '000-000-000', '000-000-000'

];

const RECIPIENT_EMAILS = '[email protected]';

// ===================================

function main() {

const sheet = SpreadsheetApp.openById(SHEET_ID).getSheets()[0];

sheet.clear();

sheet.appendRow(['Account Name', 'Account ID', 'Goal Name', 'Conversions', 'Status', 'Date Range']);

const startDate = getDateXDaysAgo(LOOKBACK_DAYS);

const endDate = getTodayDate();

const dateRangeLabel = `Last ${LOOKBACK_DAYS} days (${startDate} to ${endDate})`;

const accounts = MccApp.accounts().get();

const flagged = [];

let rowIndex = 2;

while (accounts.hasNext()) {

const account = accounts.next();

const accountId = account.getCustomerId();

const accountName = account.getName();

Logger.log(`⏳ Checking account: ${accountName} (${accountId})`);

if (EXCLUDED_ACCOUNT_IDS.includes(accountId)) {

Logger.log(`🚫 Skipping excluded account: ${accountName} (${accountId})`);

continue;

}

try {

MccApp.select(account);

const query = `

SELECT ConversionTypeName, Conversions

FROM CAMPAIGN_PERFORMANCE_REPORT

DURING ${startDate},${endDate}

`;

const report = AdsApp.report(query);

const rows = report.rows();

const goalMap = {};

while (rows.hasNext()) {

const row = rows.next();

const goalName = row['ConversionTypeName'] || '(not set)';

const conversions = parseFloat(row['Conversions']) || 0;

if (!goalMap[goalName]) {

goalMap[goalName] = 0;

}

goalMap[goalName] += conversions;

}

if (Object.keys(goalMap).length === 0) {

Logger.log(`⚠️ No conversion data returned for account: ${accountName} (${accountId})`);

const status = 'No Recent Conversions';

sheet.appendRow([

accountName,

accountId,

'(configured, no activity)',

0,

status,

dateRangeLabel

]);

setStatusColumnColor(sheet, rowIndex, status);

flagged.push(`${accountName} (${accountId}) - no conversion goals triggered`);

rowIndex++;

continue;

}

for (const [goalName, totalConversions] of Object.entries(goalMap)) {

let status;

if (totalConversions > 0) {

status = 'Active';

} else if (goalName.toLowerCase().includes('test') || goalName === '(not set)') {

status = 'Inactive';

} else {

status = 'Needs Attention';

}

sheet.appendRow([

accountName,

accountId,

goalName,

totalConversions,

status,

dateRangeLabel

]);

setStatusColumnColor(sheet, rowIndex, status);

if (status !== 'Active') {

flagged.push(`${accountName} (${accountId}) - ${goalName} (${status})`);

}

rowIndex++;

}

} catch (e) {

Logger.log(`❌ Error processing account: ${accountName} (${accountId}) - ${e.message}`);

}

}

if (flagged.length > 0) {

const subject = '⚠️ Conversion Goals Needing Attention';

const body = `The following conversion goals may need review (e.g., no recent conversions or inactive):\n\n`

+ flagged.join('\n')

+ `\n\nView the full report:\nhttps://docs.google.com/spreadsheets/d/${SHEET_ID}`;

MailApp.sendEmail(RECIPIENT_EMAILS, subject, body);

} else {

Logger.log('✅ All goals are reporting conversions.');

}

}

// 🎨 Apply color to only the "Status" column (Column E)

function setStatusColumnColor(sheet, row, status) {

const range = sheet.getRange(row, 5); // Column E

switch (status) {

case 'Active':

range.setBackground('#d9ead3'); // Light green

break;

case 'Inactive':

range.setBackground('#f4cccc'); // Light red

break;

case 'Needs Attention':

range.setBackground('#fff2cc'); // Light yellow

break;

case 'No Recent Conversions':

range.setBackground('#e6e6fa'); // Light purple

break;

default:

range.setBackground(null);

}

}

// 🕒 Helpers

function getTodayDate() {

const date = new Date();

return Utilities.formatDate(date, AdsApp.currentAccount().getTimeZone(), 'yyyyMMdd');

}

function getDateXDaysAgo(days) {

const date = new Date();

date.setDate(date.getDate() - days);

return Utilities.formatDate(date, AdsApp.currentAccount().getTimeZone(), 'yyyyMMdd');

}

スクリプトのセクション別内訳

構成

  • SHEET_ID: Google Sheetsのすべての出力先
  • LOOKBACK_DAYS:報告ウィンドウの日数
  • 除外するアカウントID:スキップするクライアントアカウント
  • recipient_emails:問題発生時にメールを受け取る人

main()関数

  • シートを開き、クリアし、ヘッダーを設定する。
  • 日付の範囲を計算する
  • すべてのMCCサブアカウントをループする
  • Skips any that are blocklisted
  • CAMPAIGN_PERFORMANCE_REPORTを使用して、すべてのゴールデータを取り出します。
  • それぞれの目標に対して:
    • コンバージョンの合計
    • ステータスを割り当てる:
      • アクティブ:コンバージョン > 0
      • 非アクティブ:テストゴールまたは未設定
      • 要注意:コンバージョンはゼロ、テストではない
      • 最近のコンバージョンがない:ゴールデータが返されない
  • シートにデータを追加する
  • setStatusColumnColor() をコールして各行をマークする。
  • フラグ付きリストを作成し、問題が見つかった場合は電子メールを送信する。

setStatusColumnColor(sheet, row, status)

  • ゴールの状態に応じて、E列に背景色を適用する:
    • 緑はアクティブ
    • アクティブでない場合は赤
    • 注意が必要な場合は黄色
    • 紫色は活動なし

デート・ヘルパー

  • getTodayDate() は、今日の日付を正しいタイムゾーンで返します。
  • getDateXDaysAgo() は X 日前の日付を返します。

This walkthrough shows how to set up the conversion goal health checker for your Google Ads MCC account. Follow each step to get the system running, write to Google Sheets, and send alerts when something breaks.

ステップ1:Googleシートを作成する

出力先の設定から始める。

  1. グーグル・シートへ
  2. 新規スプレッドシートを作成するには「Blank」をクリックする。
  3. Please give it a name like Goal Monitor
  4. 真ん中の部分があなたのシートIDです。
  5. その ID をスクリプトの const SHEET_ID = '...' と書かれているところに貼り付けます。

ステップ2:Google広告スクリプトパネルを開く

このスクリプトをMCCアカウントにデプロイします。

  1. Google Ads MCCのアカウントにログインします。
  2. ナビゲーション上部の「ツールと設定」をクリックします。
  3. Under "Bulk Actions," select "Scripts."
  4. 新しいスクリプトを追加するには、プラス(+)ボタンをクリックします。
  5. スクリプト全体を、書かれたとおりにコードエディタに貼り付ける。

ステップ3:スクリプトを承認する

スクリプトを初めて使用するときは、認証が必要です。

  1. 右上の「Authorize」をクリック
  2. Googleアカウントを選択
  3. 要求されたすべての許可を承認する

このステップを完了しないと、スクリプトの実行に失敗します。

ステップ4:スクリプトの設定を行う

スクリプトの内部で、以下の内容を確認し、修正する:

  • SHEET_ID: コピーしたシートIDを貼り付ける。
  • LOOKBACK_DAYS:必要に応じて変更(デフォルトは60)
  • exclude_account_ids:スキャンされたくないアカウントを追加する
  • recipient_emails:アラートレポートを受信する電子メール(複数可)を追加する

スクリプトの残りはそのままでいい。

ステップ5:手動テストの実行

手動で一度実行し、すべてがうまくいくことを確認する。

  1. ナビゲーションの一番上にある "Run "をクリックする。
  2. 実行が完了するまで待つ。
  3. 接続されているGoogleシートを開きます。
  4. それを確認する:
    • ヘッダーの作成
    • データはアクティブなアカウントごとに書き込まれた。
    • E列のステータスと色は正しく適用されている。

ステップ6:スクリプトをスケジュールする(オプション)

これを自動化するには、定期的なスケジュールで実行するように設定する。

  1. スクリプトエディタで、"Create Schedule "をクリックします。
  2. 頻度を選ぶ(毎日がおすすめ)
  3. 走行時間を設定する(早朝が理想的)
  4. 保存して閉じる

スクリプトは自動的に実行され、何かがオフのときだけ警告を発する。

ステップ7:アラートの確認

スクリプトが実行されると、すべてのコンバージョンゴールをチェックします。非アクティブまたは未発火のものがあれば、Eメールを受け取ります。

概要

このスクリプトは単なるデータダンプではありません。Google Ads MCC全体のあらゆるコンバージョン目標の監視役です。何かが壊れたり、止まったり、トラッキングが静かに止まったりするとアラートが表示されます。何も問題がないときは、沈黙が訪れます。

管理するすべてのアカウントをチェックし、アクティブでない目標やパフォーマンスの低い目標にフラグを立て、フィルタリングされたノイズのないレポートを受信トレイに直接送信します。Googleシートは、アカウント、ゴール名、コンバージョンボリュームごとにゴールステータスをライブ表示します。

インターフェイスを調べたりはしない。月末まで待って盲点に気づくこともない。問題になる前にコントロールできる。

同様の記事をチェックする

同様の記事をチェックする

If you manage multiple accounts, don’t miss our guide on tracking GA4 issues from numerous properties or exporting top-performing actual search terms with a lightweight script to refine your targeting.

お問い合わせ

トラッキングが機能しているかどうかを推測することにうんざりしていませんか?単なる報告書ではなく、システムを構築するチームをお望みですか?

Bright Vessel doesn’t just manage Google Ads; we engineer performance visibility at scale. Whether you need help deploying this script, integrating it into a larger automation stack, or building a custom analytics layer that tells you something, we’re ready.

他の代理店が偽造しているものを作っているチームと話す。

ブライト・ヴェッセルへのお問い合わせ

無料SEO診断

無料SEO監査フォーム

「は必須項目

このフィールドは検証用であり、変更しないでください。
内容
この記事を楽しんでいますか?
ソーシャルメディアでシェアする
無料SEO診断

無料SEO監査フォーム

「は必須項目

このフィールドは検証用であり、変更しないでください。
無料SEO診断

無料SEO監査フォーム

「は必須項目

このフィールドは検証用であり、変更しないでください。
この記事をお楽しみいただけましたか?
ソーシャルメディアでシェアする

別のブログ記事をご覧ください!

すべてのブログ記事に戻る
© 2024 Bright Vessel.無断複写・転載を禁じます。
クロスメニューシェブロンダウン矢印左