Apps Script拉取Google Analytics 4数据报403权限拒绝错误
403报错核心原因
报错本质为Apps Script当前绑定的Google云项目未启用Google Analytics Data API服务,和已配置的OAuth鉴权范围、请求代码逻辑无直接关联,触发权限拒绝的关联云项目ID已在报错信息中明确标注为640397821842。
落地解决步骤
- 确认当前Apps Script项目绑定的云项目ID,和报错提示的
640397821842完全匹配;如果项目未关联自定义云项目,需要先完成项目绑定,避免在系统默认的隐藏项目里操作时找不到对应配置项 - 在该绑定的云项目中,找到Google Analytics Data API服务的启用开关,完成服务激活;注意不要错选成旧版的Google Analytics Reporting API,二者为独立服务,权限不互通
- 完成API启用后等待3-5分钟,待Google服务端完成权限同步后再重试请求,避免频繁触发无效请求
- 同步修正测试代码中两处会引发新报错的问题,等API权限生效后可直接跑通:
- 原代码将
propertyId错误嵌套在entry字段中,GA4 Data API的runReport接口要求资产ID为请求体的顶层字段,格式固定为properties/GA4资产数字ID(示例:properties/263290444),嵌套在自定义entry字段中的参数会被API直接丢弃 - 原代码调用的
v1alpha版本接口已停止维护,替换为稳定正式版的接口地址即可
- 原代码将
修正后的可运行测试代码
function testFetch(){ const requestPayload = { property: "properties/263290444", dateRanges: [{ startDate: "2020-12-01", endDate: "2021-03-01" }], dimensions: [{ name: "country" }], metrics: [{ name: "activeUsers" }] } const response = UrlFetchApp.fetch( 'https://analyticsdata.googleapis.com/v1:runReport', { method: 'POST', muteHttpExceptions: true, headers: { Authorization : `Bearer ${ScriptApp.getOAuthToken()}` }, contentType: 'application/json; charset=utf-8', payload: JSON.stringify(requestPayload) }); const result = JSON.parse(response.getContentText()); console.log(result); }
补充说明:当前已配置的两个OAuth鉴权范围完全满足接口调用要求,无需额外添加权限范围:
script.external_request支持Apps Script发起跨域请求,analytics.readonly覆盖GA4资产的数据读取权限,无权限缺口。
内容的提问来源于stack exchange,提问作者Shan
相关产品推荐
相关产品推荐

