目次
Google Analytics 4 (GA4) と Search Console のデータをスクリプトから取得したい場合、サービスアカウント認証が一番シンプルです。OAuth と違ってブラウザ操作もリフレッシュトークンの管理も不要で、CIや定期実行に向いています。この記事では、Google Cloud のプロジェクト作成から Python で動作確認するまでの最小手順をまとめます[1][2]。
なお、サービスアカウントを GA4 や Search Console に追加する UI で詰まることが少なくありません(執筆者も詰まりました)。自分自身が GA4 と Search Console のオーナーである個人ブログ用途であれば、サービスアカウントよりもユーザーOAuthのほうが楽 です。ユーザーOAuth版の手順は別記事 個人ブログのGA4とSearch Console分析用にユーザーOAuthをセットアップする手順 にまとめました。
必要なもの
- 計測対象のGA4プロパティとSearch Consoleプロパティ(既に登録済みの想定)
- Googleアカウント(GA4管理者権限を持つもの)
- Python 3.9以上
- ターミナル
Google Cloud プロジェクトを用意する
最初にAPIを有効化するための器となるプロジェクトを用意します。
Google Cloud Console にログインして、新しいプロジェクトを作成します。プロジェクト名は何でも構いません(例: blog-analytics)。
すでに別用途のプロジェクトがあれば流用しても問題ありません。
必要なAPIを有効化する
プロジェクトに対して、データ取得に使うAPIを2つ有効化します。
プロジェクトの「APIとサービス」→「ライブラリ」から以下の2つを有効化します。
検索ボックスに API名を貼り付けて、表示された結果から「有効にする」を押すだけです。
サービスアカウントを作成してJSONキーを発行する
スクリプトから認証するためのサービスアカウントを作り、その鍵となるJSONをローカルに保存します。
「IAMと管理」→「サービスアカウント」→「サービスアカウントを作成」を選びます。
- サービスアカウント名:
blog-analytics-reader(任意) - ロール: ここでは付与しない(後で個別に付ける)
作成後、サービスアカウントの詳細画面で「キー」タブを開き、「鍵を追加」→「新しい鍵を作成」→ JSON 形式を選んでダウンロードします。
ダウンロードしたJSONはGitリポジトリに含めない場所に置きます。推奨は次の場所です。
mkdir -p ~/.config/gcp
mv ~/Downloads/blog-analytics-*.json ~/.config/gcp/blog-analytics.json
chmod 600 ~/.config/gcp/blog-analytics.json
サービスアカウントのメールアドレス(xxx@<project>.iam.gserviceaccount.com の形式)は次のステップで使います。
GA4とSearch Consoleにサービスアカウントを追加する
サービスアカウントは作成しただけでは何も読めません。GA4とSearch Consoleの双方に「ユーザー」として追加することで、ようやくAPIからデータが取れるようになります。
GA4 側
GA4の「管理」→「プロパティのアクセス管理」→「+」→「ユーザーを追加」を選び、サービスアカウントのメールアドレスを入力します。
ロールは「閲覧者」で十分です。「メールでこの新しいユーザーに通知する」のチェックは 必ず外してください。サービスアカウントは Gmail を持たないため、通知を有効にするとエラーになります。
それでも「このメールアドレスは Google アカウントと一致しません」というエラーが出てサービスアカウントを追加できない場合があります。その対処は別記事GA4『このメールアドレスはGoogleアカウントと一致しません』でサービスアカウントが追加できない時の対処にまとめました。
Search Console 側
Search Consoleの対象プロパティを開き、「設定」→「ユーザーと権限」→「ユーザーを追加」を選びます。同じくサービスアカウントのメールアドレスを入力します。
権限は「制限付き」(読み取り専用)で十分です。
Pythonで動作確認する
設定が正しくできているかを、最小のスクリプトで確認します。
仮想環境を作って必要なライブラリを入れます。
python3 -m venv ~/.venvs/blog-analytics
source ~/.venvs/blog-analytics/bin/activate
pip install google-analytics-data google-api-python-client google-auth
GA4 のPV取得を試すスクリプトを作ります。
# check_ga4.py
import os
from google.analytics.data_v1beta import BetaAnalyticsDataClient
from google.analytics.data_v1beta.types import RunReportRequest, DateRange, Dimension, Metric
os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = os.path.expanduser(
"~/.config/gcp/blog-analytics.json"
)
PROPERTY_ID = "XXXXXXXXX" # GA4のプロパティID(数字のみ、Gや-は含めない)
client = BetaAnalyticsDataClient()
request = RunReportRequest(
property=f"properties/{PROPERTY_ID}",
dimensions=[Dimension(name="pagePath")],
metrics=[Metric(name="screenPageViews")],
date_ranges=[DateRange(start_date="30daysAgo", end_date="today")],
limit=10,
)
response = client.run_report(request)
for row in response.rows:
page = row.dimension_values[0].value
pv = row.metric_values[0].value
print(f"{pv:>6} {page}")
PROPERTY_ID はGA4の「管理」→「プロパティ設定」で確認できます。実行してPV上位10ページが表示されれば成功です。
python check_ga4.py
Search Console 側も同様に試せます。
# check_gsc.py
import os
from googleapiclient.discovery import build
from google.oauth2 import service_account
creds = service_account.Credentials.from_service_account_file(
os.path.expanduser("~/.config/gcp/blog-analytics.json"),
scopes=["https://www.googleapis.com/auth/webmasters.readonly"],
)
service = build("searchconsole", "v1", credentials=creds)
SITE_URL = "sc-domain:example.com" # ドメインプロパティ。URLプレフィックスなら https://example.com/
response = service.searchanalytics().query(
siteUrl=SITE_URL,
body={
"startDate": "2026-04-06",
"endDate": "2026-05-06",
"dimensions": ["page"],
"rowLimit": 10,
},
).execute()
for row in response.get("rows", []):
print(f"{row['clicks']:>6} clicks pos={row['position']:.1f} {row['keys'][0]}")
よくあるエラー
セットアップでつまずきやすい代表的なエラーと、その対処法を紹介します。
403 PERMISSION_DENIED
サービスアカウントがGA4 / Search Console 側に追加されていないか、権限が不足しています。「GA4とSearch Consoleにサービスアカウントを追加する」の手順をやり直してください。
Search Console 側で User does not have sufficient permission
ドメインプロパティとURLプレフィックスでサービスアカウントが別扱いになることがあります。SITE_URL の指定形式(sc-domain: か https://...)と、Search Console 上で同じ形式のプロパティに追加されているかを確認します。
GOOGLE_APPLICATION_CREDENTIALS が読まれていない
スクリプト冒頭で os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = ... を from google.~ import より 前に 書く必要があります。順序を逆にするとライブラリの初期化時にキーが見えません。
GA4のユーザー追加で「このメールアドレスは Google アカウントと一致しません」と出る
サービスアカウントは正しく作成されているのに、GA4 のプロパティのアクセス管理 UI で「Google アカウントと一致しません」と表示されて追加できないことがあります。詳しい切り分けと、API を直接叩いて UI をスキップする回避策を別記事 GA4『このメールアドレスはGoogleアカウントと一致しません』でサービスアカウントが追加できない時の対処 にまとめました。
まとめ
サービスアカウント認証の手順は「GCPでプロジェクト作成 → API有効化 → サービスアカウント作成 → GA4/Search Consoleにメールアドレス追加 → JSONキーで動作確認」の5ステップです。一度通せば、あとはスクリプトから自由にデータを取得できます。
参考文献
Google Analytics API quickstart (2026-05-07 アクセス) ↩︎
Quickstart: Run a Search Console App in Python (2026-05-07 アクセス) ↩︎
Method: properties.runReport - Google Analytics Data API (2026-05-07 アクセス) ↩︎
Search Analytics: query - Search Console API (2026-05-07 アクセス) ↩︎
