GA4とスプレッドシートをAPIで連携する方法:GASスクリプト作成と実行
本記事では、前回設定した認証情報を使ってGoogle Apps Script(GAS)でGA4データを取得し、スプレッドシートに取り込む方法をご紹介します。
今回のサンプルスクリプトはシンプルなデータを取得するものですが、スクリプトをカスタマイズすることでアドオンに比べて自由度の高いデータ取得が可能になります。
前回の記事はこちら
リフレッシュトークンの取得
Google Analytics Data APIを利用するには、アクセストークン(APIにアクセスするために必要な一時的な認証情報)を取得するためのリフレッシュトークンが必要です。
リフレッシュトークンは、一度取得したアクセストークンが期限切れになった場合に、新しいアクセストークンを取得するために使用されるトークンです。
これを取得するには、以下の手順で進めます。
OAuth 2.0 Playgroundを使ったリフレッシュトークンの取得
右上の歯車アイコンをクリックし、「Use your own OAuth credentials」を選択します。
その後表示された部分にクライアントIDとクライアントシークレットを入力します。
入力したら「Close」をクリックします。
「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
認証後、「Exchange authorization code for tokens」をクリックして、リフレッシュトークンを取得します。
取得したリフレッシュトークンをコピーします。
この際、「Auto-refresh the token before it expires」のチェックボックスにチェックを入れることで、アクセストークンの期限が切れる前に自動更新されるように設定できます。
自動更新を設定することで手動での更新作業を減らすことができるため、特に長期間の自動化を行う場合に便利です。
Googleスプレッドシートを開き、メニューの「拡張機能」から「Apps Script」をクリックしてGASエディタを開きます。
「プロジェクトの設定」を選択します。
「スクリプトプロパティを追加」を選択して、以下のキー名と値を入力します。
キー名 | 値 |
---|---|
REFRESH_TOKEN | 取得したリフレッシュトークン |
GASスクリプト作成・実行
Googleスプレッドシートを開き、メニューの「拡張機能」から「Apps Script」をクリックして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プロパティから以下のデータをスプレッドシートに出力します。
- 日付ごとのアクティブユーザー数
- 特定の期間内(例: 2024年11月1日から11月15日)
必要に応じてdimensions:
, metrics:
, dateRanges:
の内容をご変更ください。
スクリプトを書いたら、名前を付けて保存します。
(例:「GA4データ取得」)
スクリプトを実行してデータを取得します。
初めてそのスクリプトを実行する場合は権限の確認が必要です。
そのため、『権限を確認』を押します。
許可の詳細手順
「詳細」をクリックします。
「無題のプロジェクト(安全ではないページ)に移動」をクリックします。
「許可」をクリックします。
スプレッドシートのA列に日付、B列にアクティブユーザー数が表示されます。
まとめ
GA4データをスプレッドシートに取り込むスクリプトの作成から実行までをご紹介しました。
アドオンに比べてスクリプトの作成と実行には手間がかかるものの、カスタマイズ性の高さ、他のGoogleサービスとの連携といった点でメリットがあります。
柔軟なデータ取得と処理を行いたい場合や、業務全体を自動化したい場合にはGASを利用すると便利です。
弊社では、Google Apps Script(GAS)を活用した業務効率化のサポートを提供しております。
GASのカスタマイズやエラー対応にお困りの際は、ぜひお気軽にご相談ください。
また、ITツールの導入支援やIT導入補助金の申請サポートも行っております。
貴方の業務改善を全力でサポートいたします。
コメント