【Google広告】MCCのすべてのアカウントから運用レポートを取得する
前回の記事に引き続きMCCのアカウントからレポートを取得する方法になります。
AdsApp.reportはクエリ言語のいずれかを使用して生成できます。
目次
AdsApp.reportを使用する主な利点
- 通常のGoogle広告エンティティ(セグメントを含む)では利用できないさまざまな統計情報へのアクセス。
- 大量のデータにアクセスする機能。現在、レポートは割り当ての対象ではなく、100万行のレポートを取得することができる。
- パフォーマンス-レポートのダウンロードには時間がかかる場合がありますが、レポート行の反復処理は非常に高速である。
MCCアカウントでAdsApp.report()できないときの対処
MCCアカウントでAdsApp.report()で出力しても、1つ目のアカウントのデータしかスプレッド出力できませんでした。原因は謎のままですがreport.exportToSheetを別の関数にすることで改善されました。
スクリプト
GoogleAds MCCアカウントのスクリプトにコードを記入していきます。
MCCのアカウントリストを取得して、AdsAppのアカウントをセットする。
var accountIterator = AdsManagerApp.accounts().get();
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時間毎のデータを取得するクエリです。
クエリの詳細はこちらから
スプレッドシートに出力する
var spreadsheet = SpreadsheetApp.openById("1slZ********")
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);
}
report.exportToSheet()はシートのデータを上書きしてしまうので、「temp」シートに一度出力したデータを保存用シートにコピーさせています。
スクリプト全体
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("1slZ********")
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);
}
}
ディスカッション
コメント一覧
まだ、コメントがありません