笔记 by 车东

给 Agent 开 GCP service account 访问 Search Console 和 GA4 数据

TLDR

想让 Claude Code 之类的 Agent 直接读 Google Search Console 和 GA4 的统计做 SEO 分析,不能靠 OAuth 浏览器授权(Agent 没有交互式登录),正确做法是 GCP service account:建一个服务账号 → 启用两个 API → 把这个服务账号邮箱加到 Search Console / GA4 里授权 → Agent 拿 JSON key 调 REST API。本文记录完整流程和踩的坑。

架构

Agent (Claude Code)
  → CLI 脚本 (gsc.py / ga.py)
  → service account JSON key 认证
  → Search Console API / Analytics Data API
  → 你的站点数据

关键点:service account 不是「你的 Google 账号」,而是 GCP 项目里的一个机器身份。权限不是靠账号密码,而是靠「把这个机器身份的邮箱加进目标资源」。

步骤 1:创建 service account

入口直达(PROJECT_ID 换成你的项目 ID):

https://console.cloud.google.com/iam-admin/serviceaccounts?project=PROJECT_ID

菜单路径:☰ 导航 → IAM 与管理 → 服务账号

流程:+ 创建服务账号 → 填名称(如 seo-bot)→ 角色步骤可跳过(权限后面通过「加邮箱到 GSC/GA」给)→ 完成 → 回到列表点进账号 → 密钥 标签 → 添加密钥 → 创建新密钥 → JSON,浏览器下载一个 .json。

下载的 key 存到本地:

mkdir -p ~/.config/google
mv ~/Downloads/xxx.json ~/.config/google/key.json
chmod 600 ~/.config/google/key.json   # 私钥,收紧权限

坑 1:macOS 下 mv 下载文件夹里的文件可能报 Operation not permitted,这是 TCC 隐私保护(终端没「下载文件夹」访问权限)。要么在 系统设置 → 隐私与安全性 → 文件与文件夹 里给终端开权限,要么用 Finder 拖拽。

记下 service account 的邮箱(形如 seo-bot@PROJECT_ID.iam.gserviceaccount.com),后面授权要用。

步骤 2:启用两个 API

「建服务账号」和「启用 API」是两件独立的事,容易漏。不启用会报 accessNotConfigured / SERVICE_DISABLED。

两个直达 URL(注意 PROJECT_NUMBER 是数字项目编号,不是项目 ID——GCP 里这俩是不同的东西,API 启用页用的是数字编号):

Search Console API:

https://console.developers.google.com/apis/api/searchconsole.googleapis.com/overview?project=PROJECT_NUMBER

Analytics Data API(GA4 用):

https://console.developers.google.com/apis/api/analyticsdata.googleapis.com/overview?project=PROJECT_NUMBER

各点一下「启用」,变成「管理」就是启用了。启用后等 1-2 分钟让 Google 传播。

坑 2:PROJECT_ID(字母数字,如 my-project-123)和 PROJECT_NUMBER(纯数字,如 123456789012)是两个不同的标识。IAM 页用 ID,API 启用页用 NUMBER。搞混了 URL 会 404。

步骤 3:授权 service account 到 Search Console

直达 URL(SITE_URL 换成你的站点):

https://search.google.com/search-console/users?resource_id=SITE_URL_ENCODED

resource_id 是 URL 编码后的站点地址,例如 https%3A%2F%2Fwww.example.com%2F。

→ 添加用户 → 粘贴 seo-bot@PROJECT_ID.iam.gserviceaccount.com → 权限选 「受限」(只读够用)。

步骤 4:授权到 GA4

直达 URL:

https://analytics.google.com/analytics/web/#/admin

→ 管理 → 媒体资源 列 → 媒体资源访问管理 → + 添加用户 → 粘同一邮箱 → 角色 「查看者」。

注意 GA4 里有两个 ID:

ID 类型 形如 用途
测量 ID G-XXXXXXXXXX 埋点 JS 里用的
媒体资源 ID 纯数字(如 123456789) API 查询用这个

ga.py 的 --property 参数填数字媒体资源 ID,不是 G- 开头那个。数字 ID 在 管理 → 媒体资源设置 里看。

步骤 5:CLI 脚本

两个轻量 Python 脚本(service account key 走 ~/.config/google/key.json):

# Search Console:近 30 天点击量 top 页面
python3 cli/gsc.py --site https://www.example.com/ --dimension page --days 30

# Search Console:top 查询词
python3 cli/gsc.py --dimension query --limit 20

# Search Console:单 URL 索引状态
python3 cli/gsc.py --inspect /path/to/page

# Search Console:sitemap 提交状态
python3 cli/gsc.py --sitemaps

# GA4:近 30 天活跃用户
python3 cli/ga.py --property 123456789 --metrics activeUsers,sessions --days 30

依赖与虚拟环境:

python3 -m venv .venv
.venv/bin/pip install google-api-python-client google-auth

坑 3:Homebrew 的 Python 是 externally-managed(PEP 668),直接 pip install 会被拒(除非 --break-system-packages,不推荐)。用项目级 .venv 最干净。

步骤 6:验证

两个脚本各跑一条,能出数据就通了:

.venv/bin/python cli/gsc.py --sitemaps
.venv/bin/python cli/ga.py --property 123456789 --metrics activeUsers --days 30

踩坑总结

# 坑 症状 解法
1 macOS TCC mv ~/Downloads/xxx 报 Operation not permitted 终端授权或 Finder 拖拽
2 PROJECT_ID vs NUMBER API 启用页 404 用数字编号
3 漏启用 API accessNotConfigured / SERVICE_DISABLED 步骤 2 点「启用」
4 测量 ID vs 媒体资源 ID ga.py 报 404 用数字媒体资源 ID
5 Homebrew PEP 668 pip install 被拒 项目 .venv

参考资料