心配性なシステム運用日記
【GA4 API】ローカル環境からCURLでGoogle Analyticsデータを取得してみた
2026.04.17 更新

【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データを取得

します。

GA4-API-overview.png

手順

以降は、Google Analytics APIデータを、ローカル上でCURLを用いて取得する手順を説明します。

① Google Analytics Data APIの有効化

まず、Google Cloudコンソールの「APIとサービス」→「ライブラリ」を開き、「Google Analytics Data API」を検索して有効化します。

GA4-API-activate-on-GCP

② サービスアカウントの作成と鍵の取得

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

create-service-account-1

サービスアカウントの詳細設定を行っていきます。

項目設定内容
サービスアカウント名任意の英数字
サービスアカウントIDアカウント名を入れると自動反映される
サービスアカウントの説明任意
ロール閲覧者
サービスアカウントユーザーロール空欄
サービスアカウント管理者ロール空欄

※ロールや権限まわりは、後でGA4との疎通により自動で設定される。

create-service-account-2

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

service-account-lists

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

download-service-account-json

③ GA4側でサービスアカウントの登録

GA4側でサービスアカウントの登録を行い、GCPとGA4側の疎通設定を行います。

GA4の左下「管理」(歯車アイコン)→「プロパティ」→「プロパティのアクセス管理」を選択。
「+」→「ユーザーを追加」を選択し、サービスアカウントのメールアドレスと「閲覧者」権限を選択し追加。

add-service-account-on-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は左上のブログタイトルを開き、下図場所の数字を取得する。 get-blog-property

トラブルシューティング

主に、JSON鍵のDLの際に生じたトラブルを記録していきます。

②-トラブル:JSON鍵が権限で作成できない場合

下記のように、「iam.disableServiceAccountKeyCreation」(サービスアカウント鍵不許可権限)が適用されていることで、JSON鍵が作成できないことがあります。
error-create-service-account-disableServiceAccountKeyCreation

その場合、リソースを選択「プロジェクト」→「IAMと管理」→「IAM」から、「iam.disableServiceAccountKeyCreation」を検索・選択し、「ポリシーを管理」を開きます。

edit-disableServiceAccountKeyCreation-1

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

edit-disableServiceAccountKeyCreation-2

これによって、サービスアカウント鍵不許可権限「iam.managed.disableServiceAccountKeyCreation」が無効化し、JSON鍵が作成できるようになります。

②-トラブル:「iam.managed.disableServiceAccountKeyCreation」が無効化できない場合

組織権限「組織ポリシー管理者」→プロジェクト権限「iam.managed.disableServiceAccountKeyCreation」→プロジェクト権限「iam.disableServiceAccountKeyCreation」のうち、
「組織ポリシー管理者」の未権限の継承により、孫権限「iam.disableServiceAccountKeyCreation」の操作ができないことがありました。
対処法として、「組織ポリシー管理者」の操作権限をユーザ(プリンシパル)に与えます。

リソースを選択「組織」→「IAMと管理」→「IAM」から、自分ユーザ(プリンシパル)に対してロール「組織ポリシー管理者」を与えます。

edit-organization-policy-admin

これを実施し、「iam.disableServiceAccountKeyCreation」の無効化を再度試みます。

おわりに

サービスアカウントJSON鍵を用いて、ローカル環境からCURLを用いてGA4 APIを叩いてみました。
ローカル/GCP/GA4と3つの場所を行き来するため手数が多いものの、サービスアカウントで一貫して認証を行っているため、実はシンプルな構成となっています。

今回はローカル上にJSON鍵をDLしてGA4 APIを叩きましたが、JSON鍵を特定のマシンにインストールするよりも、そもそもJSON鍵をローカルにDLしない方がセキュリティ的にも運用的にもいいかもしれません。
どこかで代替の認証方法を紹介しようと思います。

それでは。

Xでシェア
Menu