【Google広告スクリプト】MCCアカウントから全アカウントの運用レポートを取得する方法
Google広告のMCC(管理アカウント)配下に複数の広告アカウントがある場合、それぞれのアカウントのデータをまとめてスプレッドシートに出力したい場面があります。
本記事ではAdsManagerAppを使ってMCCの全アカウントをループ処理し、AdsApp.report()でレポートを取得してスプレッドシートに蓄積する方法を解説します。
目次
AdsApp.reportを使用する主な利点
- 通常のGoogle広告エンティティでは取得できない詳細な統計情報にアクセスできる
- 100万行のレポートを取得できる大量データ対応
- レポート行の反復処理が高速
詳細はGoogle広告スクリプトのリファレンスを参照してください。
MCCアカウントでAdsApp.report()できないときの対処
MCCアカウントでAdsApp.report()を使って複数アカウントのデータを取得しようとすると、最初のアカウントのデータしかスプレッドシートに出力できないことがあります。
これはreport.exportToSheet()をmain関数内で直接呼ぶと上書きが発生するためです。report.exportToSheetを別の関数に切り出すことで解決します。
スクリプトの実装
Google広告MCCアカウントのスクリプト画面でコードを記入します。

スクリプト全体
function main() {
var accountIterator = AdsManagerApp.accounts().get();
Logger.log('アカウント件数 : ' + accountIterator.totalNumEntities());
while (accountIterator.hasNext()) {
account = accountIterator.next();
AdsManagerApp.select(account);
report = AdsApp.report(
"SELECT segments.date, segments.hour, campaign.name,metrics.impressions,metrics.cost_micros,metrics.clicks,metrics.all_conversions " +
"FROM campaign " +
"WHERE segments.date BETWEEN '2021-12-27' AND '2021-12-27'");
set_record(report)
}
}
function set_record(report) {
var spreadsheet = SpreadsheetApp.openById("スプレッドシートID")
var temp_sheet = spreadsheet.getSheetByName('temp');
const db_sheet = spreadsheet.getSheetByName('data');
report.exportToSheet(temp_sheet);
if (temp_sheet.getLastRow() > 1) {
const values = temp_sheet.getRange(2, 1, temp_sheet.getLastRow() - 1, temp_sheet.getLastColumn()).getValues();
const ranges = db_sheet.getRange(db_sheet.getLastRow() + 1, 1, values.length, values[0].length);
ranges.setValues(values);
}
}
各セクションの説明
MCCのアカウントリストを取得してループ処理する
var accountIterator = AdsManagerApp.accounts().get();
while (accountIterator.hasNext()) {
account = accountIterator.next();
AdsManagerApp.select(account); // 処理するアカウントを切り替える
// ...
}
レポートを取得する
report = AdsApp.report(
"SELECT segments.date, segments.hour, campaign.name,metrics.impressions,metrics.cost_micros,metrics.clicks,metrics.all_conversions " +
"FROM campaign " +
"WHERE segments.date BETWEEN '2021-12-01' AND '2021-12-31'");
上記の例は各キャンペーンの1時間毎のデータを取得するクエリです。クエリの詳細はこちらを参照してください。
スプレッドシートに出力する(別関数化がポイント)
function set_record(report) {
var spreadsheet = SpreadsheetApp.openById("スプレッドシートID")
var temp_sheet = spreadsheet.getSheetByName('temp');
const db_sheet = spreadsheet.getSheetByName('data');
// tempシートに一度出力(exportToSheetは上書き)
report.exportToSheet(temp_sheet);
if (temp_sheet.getLastRow() > 1) {
const values = temp_sheet.getRange(2, 1, temp_sheet.getLastRow() - 1, temp_sheet.getLastColumn()).getValues();
// dataシートに追記
const ranges = db_sheet.getRange(db_sheet.getLastRow() + 1, 1, values.length, values[0].length);
ranges.setValues(values);
}
}
report.exportToSheet()はシートのデータを上書きします。そのため「temp」シートに一度出力したデータを保存用「data」シートにコピーする方式を採用しています。
スプレッドシートの準備
事前に出力先スプレッドシートにtempシートとdataシートを作成しておきます。tempシートは中間バッファとして使用するため、非表示にしても構いません。
取得できるデータの例
segments.date:日付segments.hour:時間帯campaign.name:キャンペーン名metrics.impressions:インプレッション数metrics.clicks:クリック数metrics.cost_micros:費用(マイクロ単位、100万で割ると円)metrics.all_conversions:コンバージョン数







ディスカッション
コメント一覧
まだ、コメントがありません