GASでスプレッドシートにGoogleアナリティクスのデータを定期的に出力する

拡張機能のGoogleAnalyticsだとサンプリングに引っかかったり、期間の調整が必要になるのでそれをGoogleAppScriptで自動化するコードを書きました。

参考 こういった出力が期待できます。
出力するメトリクスはセッション数以外でもUU数や目標完了数など必要に応じて変更可能です。
値は公式ドキュメントを参照してください。

ga-dev-tools.web.app

GASでスプレッドシートにアナリティクスのデータを定期的に出力するスクリプト

GAで作成したセグメントのデータを指定したシートに出力するスクリプト

function main() {
  const spreadsheet = SpreadsheetApp.getActiveSpreadsheet()
  const configs = [
      // sheetName:データを反映するシート名、 segment:GAセグメントIDを入力してください
      { sheetName: 'ga_all', segment: 'gaid::ABCDEFG },
    ]

  configs.forEach(({ sheetName, segment }) => {
    let sheet = spreadsheet.getSheetByName(sheetName)
    // 無ければシートを作る
    if (!sheet) {
      sheet = spreadsheet.insertSheet(sheetName)
    }

    // 動かなかったときのため直近n日分を更新する
    const nDay = 4;
    let date = new Date()
    date.setDate(date.getDate()-nDay);
    for(let n=0; n<nDay; n++) { 
      date.setDate(date.getDate()-1);

      const result = getGoogleAnalytics({ date, segment })
      result.forEach(row => {
        const rowDate = toDate(row[0])
        // スプシ上ではスラッシュ区切り
        const formatDate = Utilities.formatDate(rowDate, 'JST', 'yyyy/MM/dd')
        let cell = getCell({ sheet, text: formatDate })
        if (!cell) {
          // 無ければA列最後のセルを使う
          cell = sheet.getRange(sheet.getLastRow() + 1, 1)
        }
        // 列を結果の個数分広げる
        const range = cell.offset(0, 0, 1, row.length)
        let insertRow = row.concat()
        insertRow[0] = formatDate
        range.setValues([insertRow])
      })
    }
  })
}

function getGoogleAnalytics({ date, segment }) {
  // GA APIではハイフン区切り
  const formatDate = Utilities.formatDate(date, 'JST', 'yyyy-MM-dd')
  //Google Analytics APIリクエストして、グーグルアナリティクスのデータを取得する
  const gaData = Analytics.Data.Ga.get(
    'ga:123456', // GAビューIDを入力してください
    formatDate,
    formatDate,
    'ga:sessions', // メトリクス https://ga-dev-tools.web.app/dimensions-metrics-explorer/
    {
      segment,
      'dimensions': 'ga:date'
    }
  ).getRows()

  return gaData
}

function toDate (str) {
  var arr = (str.substr(0, 4) + '/' + str.substr(4, 2) + '/' + str.substr(6, 2)).split('/');
  return new Date(arr[0], arr[1] - 1, arr[2]);
};

// 指定されたテキストのセル(Range)を返す
function getCell({ sheet, text }) {
  var textFinder = sheet.createTextFinder(text);
  var cells = textFinder.findAll();
  
  for(var i=0; i<cells.length; i++){ 
    return cells[i]
  }
}

使い方解説

GAビューIDを設定

ここに利用するビューIDを設定してください。

  const gaData = Analytics.Data.Ga.get(
    'ga:123456', // GAビューIDを入力してください

GAでセグメントIDを設定

アナリティクス上でセグメントを作ってからセグメントIDを取得します。
UA Query Explorerで検索可能です。

segment 部分に取得したセグメントIDを入力してください。

  const configs = [
      // sheetName:データを反映するシート名、 segment:GAセグメントID
      { sheetName: 'ga_all', segment: 'gaid::ABCDEFG },
    ]

書き出すシートを用意する

sheetName に書いた名前のシートを用意します。

1行目に date sessions など適宜見出しをつけます。

定期実行を設定