【GA4 API】ローカル環境からCURLでGoogle Analyticsデータを取得してみた
目次
こんにちは。
今回はGoogle Analytics Data APIをローカル上からCURLで叩いてみようと思います。
GA4では本来、GA4サイト内でウェブマーケティングデータを触ることができます。
一方で、Big Queryや今回のGA4 APIを使用することで、GA4外でデータを触ることができます。
ちなみに今回のGA4 APIは、Big Queryほどのデータウェアハウスを持つ必要がなく、小規模でのデータ取得を行いたい人向けとなります。
Google Analytics APIをローカル上で取得する全体像
ローカル上でGA4 APIでデータを取得する全体像は以下の通りです。
準備として、
- GA4 APIを使えるようにGCPで有効化
- サービスアカウントを作成し、ローカル環境にサービスアカウントの鍵(JSON)をDL
- サービスアカウントを用いてGCPとGA4間の疎通
実行段階として、
- JSON鍵を用いてCURLでGoogle Analyticsデータを取得
します。

手順
以降は、Google Analytics APIデータを、ローカル上でCURLを用いて取得する手順を説明します。
① Google Analytics Data APIの有効化
まず、Google Cloudコンソールの「APIとサービス」→「ライブラリ」を開き、「Google Analytics Data API」を検索して有効化します。

② サービスアカウントの作成と鍵の取得
次に、サービスアカウントを作成します。
「IAMと管理」→「サービスアカウント」を開き、「サービスアカウントを作成」を選択。

サービスアカウントの詳細設定を行っていきます。
| 項目 | 設定内容 |
|---|---|
| サービスアカウント名 | 任意の英数字 |
| サービスアカウントID | アカウント名を入れると自動反映される |
| サービスアカウントの説明 | 任意 |
| ロール | 閲覧者 |
| サービスアカウントユーザーロール | 空欄 |
| サービスアカウント管理者ロール | 空欄 |
※ロールや権限まわりは、後でGA4との疎通により自動で設定される。

上記設定が完了すると、サービスアカウントが作成されます。
後続の作業で、サービスアカウントのメールアドレスが必要になるので、メモしておきます。

また、メール欄をクリックし、サービスアカウントのJSON鍵をDLしておきます。

③ GA4側でサービスアカウントの登録
GA4側でサービスアカウントの登録を行い、GCPとGA4側の疎通設定を行います。
GA4の左下「管理」(歯車アイコン)→「プロパティ」→「プロパティのアクセス管理」を選択。
「+」→「ユーザーを追加」を選択し、サービスアカウントのメールアドレスと「閲覧者」権限を選択し追加。

これで、GCPとGA4の紐付けが完了しました。
④ CURLでローカルからGA4 APIを叩く
準備が整ったので、ローカル環境からAPIを叩いてみます。
DLしたJSONファイルをアクティベートすることで認証情報を生成し、認証情報をもとにCURLを行います。
# ローカルからGCPへのログイン
gcloud auth login
# DLしたJSON鍵から認証情報を作成
gcloud auth activate-service-account --key-file=xxxxxxxxxxxx.json
# JSON鍵から作成した認証情報を付属してCURL
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token --scopes=https://www.googleapis.com/auth/analytics.readonly)" \
-H "Content-Type: application/json" \
-d '{
"dateRanges": [{ "startDate": "2026-01-01", "endDate": "today" }],
"dimensions": [{ "name": "city" }],
"metrics": [{ "name": "activeUsers" }]
}' \
"https://analyticsdata.googleapis.com/v1beta/properties/<ブログのプロパティID>:runReport"
※ ブログのプロパティIDは左上のブログタイトルを開き、下図場所の数字を取得する。

トラブルシューティング
主に、JSON鍵のDLの際に生じたトラブルを記録していきます。
②-トラブル:JSON鍵が権限で作成できない場合
下記のように、「iam.disableServiceAccountKeyCreation」(サービスアカウント鍵不許可権限)が適用されていることで、JSON鍵が作成できないことがあります。
その場合、リソースを選択「プロジェクト」→「IAMと管理」→「IAM」から、「iam.disableServiceAccountKeyCreation」を検索・選択し、「ポリシーを管理」を開きます。

「親のポリシーをオーバーライドする」→適用「オフ」にして完了。
※「iam.managed.disableServiceAccountKeyCreation」→「iam.disableServiceAccountKeyCreation」のように権限が継承されています。
そのため、下位の運用権限「iam.disableServiceAccountKeyCreation」は親権限を上書きして、無効化(JSON作成可)にします。

これによって、サービスアカウント鍵不許可権限「iam.managed.disableServiceAccountKeyCreation」が無効化し、JSON鍵が作成できるようになります。
②-トラブル:「iam.managed.disableServiceAccountKeyCreation」が無効化できない場合
組織権限「組織ポリシー管理者」→プロジェクト権限「iam.managed.disableServiceAccountKeyCreation」→プロジェクト権限「iam.disableServiceAccountKeyCreation」のうち、
「組織ポリシー管理者」の未権限の継承により、孫権限「iam.disableServiceAccountKeyCreation」の操作ができないことがありました。
対処法として、「組織ポリシー管理者」の操作権限をユーザ(プリンシパル)に与えます。
リソースを選択「組織」→「IAMと管理」→「IAM」から、自分ユーザ(プリンシパル)に対してロール「組織ポリシー管理者」を与えます。

これを実施し、「iam.disableServiceAccountKeyCreation」の無効化を再度試みます。
おわりに
サービスアカウントJSON鍵を用いて、ローカル環境からCURLを用いてGA4 APIを叩いてみました。
ローカル/GCP/GA4と3つの場所を行き来するため手数が多いものの、サービスアカウントで一貫して認証を行っているため、実はシンプルな構成となっています。
今回はローカル上にJSON鍵をDLしてGA4 APIを叩きましたが、JSON鍵を特定のマシンにインストールするよりも、そもそもJSON鍵をローカルにDLしない方がセキュリティ的にも運用的にもいいかもしれません。
どこかで代替の認証方法を紹介しようと思います。
それでは。