GA4月次レポートをPythonで自動化してみた話(前編)

2025.08.05 09:00
2025.08.03 20:59
GA4月次レポートをPythonで自動化してみた話(前編)

GA4の管理画面って、ふつうに見やすいんだけど、「月ごとのレポートを毎月自動で出したい」ってなったときには少し手間ですよね。しかも、ちょっとカスタマイズしようとすると「探索」や「比較」では限界があって、「あれ?これ毎月やるの面倒かも…」ってなるんです。

というわけで、Python + GA4 Data API を使って、「月次レポートをコードで自動生成する仕組み」を作ってみました。

やりたかったこと

  • 月単位でアクセス数(パソコン/スマホ別)を取得
  • 前月比を自動で出したい
  • レポート形式に整形して出力(ExcelやCSV)
  • できればGA画面を開かなくても済むように

Data APIを使うにはGoogle Cloudの設定が必要

まず、GA4のデータをPythonから取得するには、GA4 Data API v1 を使う必要があるみたいですね。このAPIを使うには、ちょっとした前提設定が必要らしいです。

  1. Google Cloud Console にアクセス
  2. プロジェクトを作成
  3. GA4 Data API v1 を有効にする
  4. サービスアカウントを作成し、鍵(JSON)をダウンロード
  5. GA4側で、そのサービスアカウントに「閲覧権限(アナリスト)」を付与

PythonからAPIを呼び出す

実際のコードはPythonで書きます。

from google.analytics.data_v1beta import BetaAnalyticsDataClient
from google.analytics.data_v1beta.types import RunReportRequest
from google.oauth2 import service_account

SCOPES = ["https://www.googleapis.com/auth/analytics.readonly"]
KEY_PATH = "service-account.json"
PROPERTY_ID = "XXXXXXX"  # GA4のプロパティID

credentials = service_account.Credentials.from_service_account_file(KEY_PATH, scopes=SCOPES)
client = BetaAnalyticsDataClient(credentials=credentials)

request = RunReportRequest(
    property=f"properties/{PROPERTY_ID}",
    dimensions=[{"name": "deviceCategory"}],
    metrics=[{"name": "activeUsers"}],
    date_ranges=[{"start_date": "2024-07-01", "end_date": "2024-07-31"}],
)

response = client.run_report(request)
for row in response.rows:
    print(f"{row.dimension_values[0].value}: {row.metric_values[0].value}")

取っている内容はこんな感じ

  • 対象期間:2024-07-01 ~ 2024-07-31
  • 指標:アクティブユーザー数(activeUsers
  • ディメンション:デバイスカテゴリ(deviceCategory/desktop, mobile, tablet など)

出力イメージはこんな感じ

desktop: 1234
mobile: 5432
tablet: 345

この出力結果を見ることで、

  • PCとスマホのアクセス比
  • タブレットがどれくらい使われてるか

などがざっくり把握できます。
さらに date ディメンションを加えれば日別で出せるし、country を加えれば国別にもできます。

数値がGA画面と違う…?

最初にデータが出てきたとき、「あれ?UIで見た数と違う?」って思いました。
実際、APIで取れる値とGA画面で見る値が少し違うことがあるんですね。

でも、改善に使うなら「目安」として見れば十分。指標の取り方を毎回統一しておけば、推移を見て判断するには問題ないです。

まだ整形とか出力とか、やりたいことはありますが、
ひとまず「API叩いて数字を取る」とこまではできたので、自分用メモとして残しておきます。
次は月次レポートっぽい形にしてみようと思います。

今回は以上です!