💯

Google Adsenseの売上レポートをGoogle Sheets(スプレッドシート)に出力する

2022/11/25に公開

弊社の運営媒体にGoogle Adsenseを導入することになり、日々の売上を確認する必要が出てきました。
毎日Adsenseの管理画面にアクセスするのも面倒なので、APIを利用し日次でスプレッドシートを自動更新してみましょう。

こんな感じのものが出力されます。

GAS

以下を適当なスプレッドシートのApps Scriptに貼り付けます。
pubIdtargetSheetNameをご自分の環境に合わせて変更してください。

function writeAdsenceReport() {
  const pubId = "pub-xxxxxxxxxxx"; //パブリッシャー ID
  const targetSheetName = "report"; // 出力先のシート名

  const spreadSheet = SpreadsheetApp.getActive();
  const sheet = spreadSheet.getSheetByName(targetSheetName);
  const adsenseAccount = "accounts/" + pubId;
  const adsenseDimensionId = "ca-" + pubId;
  const metrics = getMetrics();

  const report = AdSense.Accounts.Reports.generate(adsenseAccount, {
    filters: ["AD_CLIENT_ID==" + adsenseDimensionId],
    metrics: metrics,
    dimensions: ["DATE"],
    dateRange: "YESTERDAY", // 昨日のレポートを取得する // TODAY,YESTERDAY,MONTH_TO_DATE,YEAR_TO_DATE,LAST_7_DAYS,LAST_30_DAYS,CUSTOM
    // "startDate.year": 2022,
    // "startDate.month": 11,
    // "startDate.day": 1,
    // "endDate.year": 2022,
    // "endDate.month": 11,
    // "endDate.day": 30,
    orderBy: ["+DATE"],
  });

  if (report.rows) {
    // レポートをシートの最終行に出力
    sheet
      .getRange(
        sheet.getLastRow() + 1,
        1,
        report.rows.length,
        report.headers.length
      )
      .setValues(report.rows.map((row) => row.cells.map((cell) => cell.value)));

    // 重複データを防ぐため、日付が同じデータは削除する
    sheet.getDataRange().removeDuplicates([1]);
  }
}

function getMetrics(){
  return [
    "ACTIVE_VIEW_MEASURABILITY",
    "ACTIVE_VIEW_TIME",
    "ACTIVE_VIEW_VIEWABILITY",
    "ADS_PER_IMPRESSION",
    "AD_REQUESTS",
    "AD_REQUESTS_COVERAGE",
    "AD_REQUESTS_CTR",
    "AD_REQUESTS_RPM",
    "CLICKS",
    "COST_PER_CLICK",
    "ESTIMATED_EARNINGS",
    "IMPRESSIONS",
    "IMPRESSIONS_CTR",
    "IMPRESSIONS_RPM",
    "INDIVIDUAL_AD_IMPRESSIONS",
    "INDIVIDUAL_AD_IMPRESSIONS_CTR",
    "INDIVIDUAL_AD_IMPRESSIONS_RPM",
    "MATCHED_AD_REQUESTS",
    "MATCHED_AD_REQUESTS_CTR",
    "MATCHED_AD_REQUESTS_RPM",
    "PAGE_VIEWS",
    "PAGE_VIEWS_CTR",
    "PAGE_VIEWS_RPM",
    "TOTAL_EARNINGS",
    "TOTAL_IMPRESSIONS",
    "WEBSEARCH_RESULT_PAGES",
  ];
}

サービスの追加

デフォルトだとAdSense Management APIが利用できない為、Apps Scriptの左メニューからサービスを追加します。

サービス一覧から、AdSense Management APIを選び、追加してください。

ヘッダー行の追加

今回のコードはヘッダ行の印字は行っていないので、必要あれば以下を出力先シートの1行目にコピペしてください。
カンマ区切りなので、A1セルに貼った後でテキストを列に分割で展開できます。

DATE,ACTIVE_VIEW_MEASURABILITY,ACTIVE_VIEW_TIME,ACTIVE_VIEW_VIEWABILITY,ADS_PER_IMPRESSION,AD_REQUESTS,AD_REQUESTS_COVERAGE,AD_REQUESTS_CTR,AD_REQUESTS_RPM,CLICKS,COST_PER_CLICK,ESTIMATED_EARNINGS,IMPRESSIONS,IMPRESSIONS_CTR,IMPRESSIONS_RPM,INDIVIDUAL_AD_IMPRESSIONS,INDIVIDUAL_AD_IMPRESSIONS_CTR,INDIVIDUAL_AD_IMPRESSIONS_RPM,MATCHED_AD_REQUESTS,MATCHED_AD_REQUESTS_CTR,MATCHED_AD_REQUESTS_RPM,PAGE_VIEWS,PAGE_VIEWS_CTR,PAGE_VIEWS_RPM,TOTAL_EARNINGS,TOTAL_IMPRESSIONS,WEBSEARCH_RESULT_PAGES

定期実行設定

トリガーを追加して、毎日9~10時に前日分のレポートが出力されるようにします。

レポート期間の変更

以下のコードを変更すると取得するレポート期間を変更できます。
例えば初回に過去1ヶ月分のレポートを取得したければ、dateRangeLAST_30_DAYSを指定して手動実行すればOKです。
必要な範囲のデータを取得した後で、dateRangeYESTERDAYに戻し、以降は日次の処理に任せましょう。

もし1ヶ月より過去のデータを取りたいようであれば、dateRangeCUSTOMに変更し、startDate.***endDate.***で任意の年月日を指定してください。

過去1ヶ月分のレポート

    dateRange: "LAST_30_DAYS", 
    // "startDate.year": 2022,
    // "startDate.month": 11,
    // "startDate.day": 1,
    // "endDate.year": 2022,
    // "endDate.month": 11,
    // "endDate.day": 30,

任意の期間のレポート

    dateRange: "CUSTOM", 
    "startDate.year": 2022,
    "startDate.month": 11,
    "startDate.day": 1,
    "endDate.year": 2022,
    "endDate.month": 11,
    "endDate.day": 30,

参考資料

SARAH Tech Blog

Discussion