GA4とスプレッドシートをAPIで連携する方法:GASスクリプト作成と実行

本記事では、前回設定した認証情報を使ってGoogle Apps Script(GAS)でGA4データを取得し、スプレッドシートに取り込む方法をご紹介します。

今回のサンプルスクリプトはシンプルなデータを取得するものですが、スクリプトをカスタマイズすることでアドオンに比べて自由度の高いデータ取得が可能になります。

前回の記事はこちら

目次

リフレッシュトークンの取得

Google Analytics Data APIを利用するには、アクセストークン(APIにアクセスするために必要な一時的な認証情報)を取得するためのリフレッシュトークンが必要です。

リフレッシュトークンは、一度取得したアクセストークンが期限切れになった場合に、新しいアクセストークンを取得するために使用されるトークンです。

これを取得するには、以下の手順で進めます。

OAuth 2.0 Playgroundを使ったリフレッシュトークンの取得

STEP
OAuth 2.0 Playgroundにアクセス

OAuth 2.0 Playgroundにアクセスします。

STEP
クライアントIDとクライアントシークレットを入力

右上の歯車アイコンをクリックし、「Use your own OAuth credentials」を選択します。

その後表示された部分にクライアントIDクライアントシークレットを入力します。

入力したら「Close」をクリックします。

STEP
「Authorize APIs」をクリック

Google Analytics Data API v1beta」のスコープ(https://www.googleapis.com/auth/analytics.readonly)を選択し、「Authorize APIs」をクリックします。

クリック後、無効となる場合

無効となる場合は、Google Cloud Console の OAuth 2.0 クライアント ID 、

承認済みのリダイレクト URI」に以下が追加されているかご確認ください。

https://developers.google.com/oauthplayground

STEP
リフレッシュトークンを取得

認証後、「Exchange authorization code for tokens」をクリックして、リフレッシュトークンを取得します。

取得したリフレッシュトークンをコピーします。

この際、「Auto-refresh the token before it expires」のチェックボックスにチェックを入れることで、アクセストークンの期限が切れる前に自動更新されるように設定できます。
自動更新を設定することで手動での更新作業を減らすことができるため、特に長期間の自動化を行う場合に便利です。

STEP
GASエディタを開く
画像に alt 属性が指定されていません。ファイル名: GAS.png

Googleスプレッドシートを開き、メニューの「拡張機能」から「Apps Script」をクリックしてGASエディタを開きます。

STEP
プロジェクトの設定を開く

プロジェクトの設定」を選択します。

STEP
スクリプトプロパティを追加

スクリプトプロパティを追加」を選択して、以下のキー名と値を入力します。

キー名
REFRESH_TOKEN取得したリフレッシュトークン

GASスクリプト作成・実行

STEP
GASエディタを開く

Googleスプレッドシートを開き、メニューの「拡張機能」から「Apps Script」をクリックしてGASエディタを開きます。

STEP
GASスクリプトの作成

function myFunction(){

}

が最初から入っているため、消去して以下のスクリプトを貼り付けます。

function getGA4Data() {
  const scriptProperties = PropertiesService.getScriptProperties();
  const clientId = scriptProperties.getProperty('CLIENT_ID');
  const clientSecret = scriptProperties.getProperty('CLIENT_SECRET');
  const propertyId = scriptProperties.getProperty('PROPERTY_ID');
  const refreshToken = scriptProperties.getProperty('REFRESH_TOKEN');

  const tokenResponse = getOAuthToken(clientId, clientSecret, refreshToken);
  const accessToken = tokenResponse.access_token;

  const url = `https://analyticsdata.googleapis.com/v1beta/properties/${propertyId}:runReport`;
  const payload = {
    dimensions: [{ name: 'date' }],
    metrics: [{ name: 'activeUsers' }],
    dateRanges: [{ startDate: '2024-11-01', endDate: '2024-11-15' }]
  };

  const options = {
    method: 'post',
    contentType: 'application/json',
    headers: {
      Authorization: 'Bearer ' + accessToken,
    },
    payload: JSON.stringify(payload)
  };

  const response = UrlFetchApp.fetch(url, options);
  const data = JSON.parse(response.getContentText());

  // スプレッドシートにデータを書き込む
  let sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('GA4データ');
  if (!sheet) {
    sheet = SpreadsheetApp.getActiveSpreadsheet().insertSheet('GA4データ');
  }
  sheet.getRange(1, 1).setValue('Date');
  sheet.getRange(1, 2).setValue('Active Users');
  const rows = data.rows;
  for (let i = 0; i < rows.length; i++) {
    sheet.getRange(i + 2, 1).setValue(rows[i].dimensionValues[0].value);
    sheet.getRange(i + 2, 2).setValue(rows[i].metricValues[0].value);
  }
}

function getOAuthToken(clientId, clientSecret, refreshToken) {
  const tokenUrl = 'https://oauth2.googleapis.com/token';

  const payload = {
    client_id: clientId,
    client_secret: clientSecret,
    refresh_token: refreshToken,
    grant_type: 'refresh_token'
  };

  const options = {
    method: 'post',
    contentType: 'application/x-www-form-urlencoded',
    payload: Object.entries(payload)
      .map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(value)}`)
      .join('&')
  };

  const response = UrlFetchApp.fetch(tokenUrl, options);
  return JSON.parse(response.getContentText());
}
スクリプトの説明
getGA4Data() 関数
function getGA4Data() {
  const scriptProperties = PropertiesService.getScriptProperties();
  const clientId = scriptProperties.getProperty('CLIENT_ID');
  const clientSecret = scriptProperties.getProperty('CLIENT_SECRET');
  const propertyId = scriptProperties.getProperty('PROPERTY_ID');
  const refreshToken = scriptProperties.getProperty('REFRESH_TOKEN');
  
  • Google Analytics 4 (GA4) のデータを取得して、スプレッドシートに書き込むためのメインの処理を行います。
  • スクリプトプロパティから、保存された認証情報(クライアントID、クライアントシークレット、プロパティID、リフレッシュトークン)を取得します。
アクセストークンの取得
const tokenResponse = getOAuthToken(clientId, clientSecret, refreshToken);
const accessToken = tokenResponse.access_token;
  • 取得したリフレッシュトークンを使って、新しいアクセストークンを取得します。
  • このアクセストークンは、Google Analytics Data APIにアクセスするために必要な一時的な認証情報です。
APIリクエストのURLとペイロードの設定
const url = `https://analyticsdata.googleapis.com/v1beta/properties/${propertyId}:runReport`;
const payload = {
  dimensions: [{ name: 'date' }],
  metrics: [{ name: 'activeUsers' }],
  dateRanges: [{ startDate: '2024-11-01', endDate: '2024-11-15' }]
};
  • urlにはGoogle Analytics Data APIのエンドポイントURLを設定します。
  • このURLにリクエストを送ることで、GA4からのレポートデータを取得できます。
  • payloadはAPIリクエストの内容(取得したいディメンションとメトリクス)を指定しています。
  • この例では「日付ごとのアクティブユーザー数」を取得しています。
APIリクエストの実行
const options = {
  method: 'post',
  contentType: 'application/json',
  headers: {
    Authorization: 'Bearer ' + accessToken,
  },
  payload: JSON.stringify(payload)
};
const response = UrlFetchApp.fetch(url, options);
const data = JSON.parse(response.getContentText());
  • UrlFetchApp.fetch()を使ってAPIにリクエストを送ります。
  • optionsにはリクエストの設定情報(メソッド、コンテンツタイプ、アクセストークン)を含みます。
  • レスポンスから取得したデータをJSON形式に変換します。
スプレッドシートにデータを書き込む
let sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('GA4データ');
if (!sheet) {
  sheet = SpreadsheetApp.getActiveSpreadsheet().insertSheet('GA4データ');
}
sheet.getRange(1, 1).setValue('Date');
sheet.getRange(1, 2).setValue('Active Users');
const rows = data.rows;
for (let i = 0; i < rows.length; i++) {
  sheet.getRange(i + 2, 1).setValue(rows[i].dimensionValues[0].value);
  sheet.getRange(i + 2, 2).setValue(rows[i].metricValues[0].value);
}
  • この部分では、データを書き込むためにシートを取得または作成します。
  • シート名は「GA4データ」として指定しています。
  • 指定したシートが存在しない場合は、新たに作成します。
  • シートの1行目に「Date」と「Active Users」というヘッダーを設定し、取得したデータをループで各セルに書き込んでいます。
getOAuthToken() 関数
const tokenUrl = 'https://oauth2.googleapis.com/token';
const payload = {
  client_id: clientId,
  client_secret: clientSecret,
  refresh_token: refreshToken,
  grant_type: 'refresh_token'
};
  • リフレッシュトークンを使って新しいアクセストークンを取得します。
  • tokenUrlはアクセストークンを取得するためのGoogleのエンドポイントです。
  • payloadには、必要な情報(クライアントID、クライアントシークレット、リフレッシュトークン、グラントタイプ)を含みます。
アクセストークンの取得
const options = {
  method: 'post',
  contentType: 'application/x-www-form-urlencoded',
  payload: Object.entries(payload)
    .map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(value)}`)
    .join('&')
};
const response = UrlFetchApp.fetch(tokenUrl, options);
return JSON.parse(response.getContentText());
  • UrlFetchApp.fetch()を使ってアクセストークンをリクエストします。
  • リクエストの形式はapplication/x-www-form-urlencodedで、payloadの内容をURLエンコードします。
  • レスポンスから取得したアクセストークンを返します。
GA4データ取得内容

このサンプルスクリプトは、GA4プロパティから以下のデータをスプレッドシートに出力します。

  • 日付ごとのアクティブユーザー数
  • 特定の期間内(例: 2024年11月1日から11月15日)

必要に応じてdimensions:, metrics:, dateRanges:の内容をご変更ください。

STEP
スクリプトを保存

スクリプトを書いたら、名前を付けて保存します。

(例:「GA4データ取得」)

STEP
スクリプトを実行

スクリプトを実行してデータを取得します。

初めてそのスクリプトを実行する場合は権限の確認が必要です。

そのため、『権限を確認』を押します。

許可の詳細手順

「詳細」をクリックします。

無題のプロジェクト(安全ではないページ)に移動」をクリックします。

許可」をクリックします。

STEP
スプレッドシートにデータが反映

スプレッドシートのA列に日付、B列にアクティブユーザー数が表示されます。

まとめ

GA4データをスプレッドシートに取り込むスクリプトの作成から実行までをご紹介しました。

アドオンに比べてスクリプトの作成と実行には手間がかかるものの、カスタマイズ性の高さ、他のGoogleサービスとの連携といった点でメリットがあります。

柔軟なデータ取得と処理を行いたい場合や、業務全体を自動化したい場合にはGASを利用すると便利です。

弊社では、Google Apps Script(GAS)を活用した業務効率化のサポートを提供しております。

GASのカスタマイズやエラー対応にお困りの際は、ぜひお気軽にご相談ください。

また、ITツールの導入支援やIT導入補助金の申請サポートも行っております。

貴方の業務改善を全力でサポートいたします。

お問い合わせはこちら

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次