GA4『このメールアドレスはGoogleアカウントと一致しません』でサービスアカウントが追加できない時の対処

公開日:
目次

GA4 のプロパティのアクセス管理から、サービスアカウントのメールアドレス(*.iam.gserviceaccount.com)を追加しようとして「このメールアドレスは Google アカウントと一致しません」というエラーが出るケースがあります。サービスアカウントは正しく作っているのに弾かれるという、なかなか原因が分かりにくいケースです。これは GA4 のユーザー追加 UI 側の制約が原因で、Google Analytics Admin API を直接叩いて登録する ことで回避できます。この記事では切り分けと、API 経由での登録手順をまとめます。

このエラーが出る状況

サービスアカウントは Google Cloud で正しく作成済み、JSON キーも手元にある、GA4 プロパティの管理者権限も自分が持っている、それなのにプロパティのアクセス管理 UI でメールアドレスを入力すると弾かれる、という状態です。

私の場合、切り分けで次が確認できました。

  • メールアドレスは JSON キーの client_email と1文字違わず完全一致
  • サービスアカウント自体は別途叩いた GA4 Data API でメタ情報取得まで成功(つまり認証としては正常に動作)
  • 普通の Gmail アドレスを試しに追加すると、エラーなく通る

つまり サービスアカウント形式 (*.iam.gserviceaccount.com) のメールアドレスだけが UI で弾かれている、という症状です。

試したけどダメだったこと

定番の対処法をひととおり試しました。今回のケースではこれらでは解消しませんでした。

「メールでこのユーザーに通知する」のチェックを外す

サービスアカウントは Gmail を持たないため、通知を有効にしておくと弾かれるという報告があります。ただし今回はチェックを外してもエラーは出続けました。

Cloud Resource Manager API の有効化

GA4 が裏でこの API を呼んでサービスアカウントの実在を検証する、という事例があります。GCP のライブラリから有効化して10分以上置いても、UI 側のエラーは変わりませんでした。

シークレットウィンドウ・別ブラウザで試す

ブラウザの拡張機能や Cookie が干渉している場合があるので、まず試す価値はあります。今回はシークレットでも別ブラウザでも同じエラーが出ました。

解決策: GA4 Admin API で直接登録する

GA4 のユーザー管理は API 経由でも操作できます。UI が弾く相手でも、API なら通ります[1]。手順は次のとおりです。

  • OAuth Playground で必要なスコープのアクセストークンを取得する
  • 自分の GA4 プロパティ ID を確認する
  • 取得したトークンとプロパティ ID で API に POST する
  • サービスアカウントから実際にデータを取って動作確認する

アクセストークンを取得する

OAuth Playground を開きます。これは Google が提供する OAuth 認証の動作確認ツールで、ブラウザ上で短時間有効なアクセストークンを発行できます[2]

左カラム「Step 1 - Select & authorize APIs」の最下部に「Input your own scopes」という入力欄があります。ここに次のスコープを貼り付けます。

https://www.googleapis.com/auth/analytics.manage.users

Authorize APIs」を押し、GA4 の管理者権限を持つ Google アカウントでログインして許可します。次の Step 2 で「Exchange authorization code for tokens」を押すと、Access token 欄に ya29.… で始まる文字列が表示されます。これを控えます。

プロパティIDを確認する

GA4 のレポート画面を開いた状態で、ブラウザのアドレスバーを見ます。

https://analytics.google.com/analytics/web/?authuser=0#/a148580905p413714906/...
                                                       ↑アカウント↑プロパティ

p の直後の9〜10桁の数字がプロパティIDです。上の例では 413714906。GA4 → 管理(歯車)→ 右カラムの「プロパティ設定」を開いても、画面上部に「プロパティID」として表示されています。

APIに POST してサービスアカウントを登録する

ターミナルで次のコマンドを実行します。<TOKEN><PROPERTY_ID><SA_EMAIL> を自分の値に置き換えてください。

TOKEN="ya29.…取得したアクセストークン…"
PROPERTY_ID="413714906"
SA_EMAIL="[email protected]"

curl -X POST \
  "https://analyticsadmin.googleapis.com/v1alpha/properties/$PROPERTY_ID/accessBindings" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d "{
    \"user\": \"$SA_EMAIL\",
    \"roles\": [\"predefinedRoles/viewer\"]
  }"

成功すると次のようなレスポンスが返ります。

{
  "name": "properties/413714906/accessBindings/AYVX2…",
  "user": "[email protected]",
  "roles": ["predefinedRoles/viewer"]
}

注意点として、APIは v1beta ではなく v1alpha を使う ことです。accessBindings リソースは v1beta にはまだ存在せず、v1beta で叩くと 404 を返します(執筆時点)。

サービスアカウントからデータが取れるか確認する

登録できたら、サービスアカウントの JSON キーから実際にレポートを取って動作確認します。

import os
os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "/path/to/your-service-account.json"

from google.analytics.data_v1beta import BetaAnalyticsDataClient
from google.analytics.data_v1beta.types import RunReportRequest, DateRange, Dimension, Metric

client = BetaAnalyticsDataClient()
req = RunReportRequest(
    property="properties/413714906",
    dimensions=[Dimension(name="pagePath")],
    metrics=[Metric(name="screenPageViews")],
    date_ranges=[DateRange(start_date="30daysAgo", end_date="today")],
    limit=10,
)
res = client.run_report(req)
for row in res.rows:
    print(row.metric_values[0].value, row.dimension_values[0].value)

PV上位10ページが表示されれば、サービスアカウントから正常にデータが取れている状態です。

後始末

OAuth Playground で取得した「リフレッシュトークン」(Refresh token 欄)は、アクセストークンと違って長期有効です。第三者に流出すると、ログインなしでアカウントの操作に使われる恐れがあります。用が済んだら明示的に取り消しておきます。

Google アカウントの「サードパーティのアプリとサービス」管理画面 にアクセスし、「Google OAuth 2.0 Playground」のアクセスを削除します。

まとめ

GA4 のサービスアカウント追加 UI が *.iam.gserviceaccount.com 形式を弾くケースは、定番の対処(通知チェックを外す・シークレットウィンドウで試す・Cloud Resource Manager API を有効化する)で解決しないことがあります。その場合は、GA4 Admin API(v1alpha)の accessBindings.create を直接叩くことで UI をスキップして登録できます。サービスアカウントの実体に問題がない限り、API 経由ならまず通ります。

参考文献

脚注
  1. Method: properties.accessBindings.create - Google Analytics Admin API (2026-05-10 アクセス) ↩︎

  2. OAuth 2.0 Playground - Google Identity (2026-05-10 アクセス) ↩︎