【Google広告】MCCのすべてのアカウントから運用レポートを取得する

2021年12月28日

前回の記事に引き続きMCCのアカウントからレポートを取得する方法になります。
AdsApp.reportはクエリ言語のいずれかを使用して生成できます。

AdsApp.reportを使用する主な利点

  • 通常のGoogle広告エンティティ(セグメントを含む)では利用できないさまざまな統計情報へのアクセス。
  • 大量のデータにアクセスする機能。現在、レポートは割り当ての対象ではなく、100万行のレポートを取得することができる。
  • パフォーマンス-レポートのダウンロードには時間がかかる場合がありますが、レポート行の反復処理は非常に高速である。

Google広告スクリプト

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);
    }
}

GAS,広告運用

Posted by Next-k