先给结论:一个人的店,用 SP-API 把数据拉进 Google Sheet、再让 AI 写公式和周报,完全做得动——但成本不在写脚本,在于私有开发者的审核等待、报表的异步取数和接口口径的长期维护。 只想看销量和库存,买现成工具更划算;要的是别人工具里没有的那几个自定义指标,自己搭才值。本文接口名、报表类型以亚马逊官方开发者文档为准,限流数字以官方 OpenAPI 模型为准,均 2026年7月23日实查,代码按官方文档编写、未在本文中实跑。
先算账:什么情况下才值得自己搭
隐性成本有四块:开发者审核要等(被追问信息须五天内回复,否则 case 关闭);报表要「下单→轮询→下载」三步、还可能是 GZIP 包;订单口径的销售额和结算口径的到账金额天然对不上;接口还会迭代——官方已写明 Reports API 的报表迁入 Data Kiosk 后会被弃用。
| 你的情况 | 建议 | 理由 |
|---|---|---|
| 只看销量、库存、广告花费 | 买现成工具 | 标准指标每家 BI 都有 |
| 要算自己的毛利(含头程、包材、退货摊销) | 自己搭 | 成本结构因人而异,现成工具塞不进你的字段 |
| 多店铺 / 多站点合并看 | 自己搭 | 现成工具的多店铺常锁在高价档 |
| 完全没有编程经验 | 买现成工具 | 连接器路线也要你懂 OAuth 和报表结构 |
横向比现成工具,第三方评测站 AMZFinder 按工作流做了打分,比看厂商功能页省事。
SP-API 接入:私有应用怎么注册和授权
还在按 MWS 写的中文教程基本都过期了——SP-API 已取代 MWS,概念差别见站内旧文亚马逊销售伙伴 API VS MWS,接入流程请以下面这版为准。自用看板走私有开发者(Private Developer) 路线(官方注册页、自授权页,2026年7月23日实查):
- Seller Central 菜单 → Apps and Services → Develop Apps,填注册表,Data Access 选 “Private Developer: I build application(s) that integrate my own company with Amazon Services APIs”。
- 勾选需要的 Roles(决定能读哪些数据,见站内亚马逊销售伙伴 API 中的角色与官方角色页),填 Use Cases 与 Security Controls 后提交等审核。
- 通过后点 Authorize app 生成 refresh token。官方两条硬条件:自授权 Seller Central 账号你必须是该账号的 Primary User;私有应用可一直停在 draft,无需发布。
运行时换令牌是固定动作:POST https://api.amazon.com/auth/o2/token,表单参数 grant_type=refresh_token、refresh_token、client_id、client_secret,返回 access_token(expires_in 通常 3600 秒)。调接口不用做 AWS 签名:官方连接文档的示例就是「URI + 请求头、无签名信息」,需要 x-amz-access-token、x-amz-date 和必填的 user-agent;端点按区域选北美 https://sellingpartnerapi-na.amazon.com、欧洲 -eu、远东 -fe。老教程那大段 SigV4 代码照抄只会多踩坑。
取哪些数据,以及广告数据的坑
广告数据不在 SP-API 里。 花费、ACOS、点击属于独立的 Amazon Ads API,它有自己的 LwA 客户端、授权和 profile ID。看板要有广告数据就得做两套接入——2026年7月23日实查 SP-API 文档目录,其中没有任何广告接口。
性价比最高的几类数据(接口名与报表类型均 2026年7月23日官方实查):
| 想看什么 | 官方取数方式 | 备注 |
|---|---|---|
| 销量/订单额趋势 | Sales API getOrderMetrics | 直接返回聚合值,granularity 支持 Hour/Day/Week/Month/Year/Total |
| 订单明细 | Orders API getOrders | 含买家信息属受限数据,要走 Tokens API 拿 RDT |
| FBA 库存 | FBA Inventory API getInventorySummaries | 实时性最好;库龄与仓储费另走 FBA 报表 |
| Session、转化率、Buy Box | 报表 GET_SALES_AND_TRAFFIC_REPORT | JSON 输出,需 Brand Analytics 角色;dateGranularity 默认按天聚合 |
| 到账与扣费 | 报表 GET_V2_SETTLEMENT_REPORT_DATA_FLAT_FILE_V2 | 制表符文件;不可主动下单,由亚马逊自动生成、只能取;旧 flat file 与 XML 版官方公告 2026年11月11日移除 |
报表类走 Reports API v2021-06-30 三步:createReport → 轮询 getReport → getReportDocument 拿一个有效期五分钟的下载地址(响应带 compressionAlgorithm: GZIP 要先解压)。
结算报表是唯一例外,别照三步走:官方报表类型页写死了「Settlement reports cannot be requested or scheduled. They are automatically scheduled by Amazon.」——它由亚马逊按结算周期自动生成,对它调 createReport 只会拿到「该报表类型此时不允许请求」的报错。正确姿势是两步:getReports 按 reportTypes=GET_V2_SETTLEMENT_REPORT_DATA_FLAT_FILE_V2 列出已生成的那批(可加 processingStatuses=DONE、createdSince 缩范围,官方默认回溯 90 天),取到 reportDocumentId 再走 getReportDocument 下载。官方 changelog 另公告旧的 XML 版与 flat file 版结算报表 2026年11月11日移除,新搭看板直接用 V2 版。
另有一个中文教程少提的新东西:Data Kiosk API(v2023-11-15),用 GraphQL 查数、结果给 JSONL,取销售与流量这类指标同样需要 Brand Analytics 角色;官方原话是它「具备 Reports API 现有的全部功能且更多」。新搭看板值得先去 Schema Explorer 看一眼要的指标在不在,省得半年后返工。
落到 Google Sheet:两条路线
| 路线 | 怎么做 | 适合谁 | 短板 |
|---|---|---|---|
| 连接器 | API 连接器插件,如 Apipheny(支持自定义请求头、OAuth 2.0、定时刷新;2026年7月23日官网标价免费档 50 次调用、Pro 档 $15/月 5000 次,付费档均按席位计费) | 不碰代码、只要几张固定表 | 按调用次数计费;报表的「轮询+解压」兜不住 |
| 写脚本 | Apps Script 用 UrlFetchApp + 时间触发器 | 会一点 JS、要自定义口径 | 重试、分页、解压都得自己写 |
顺带澄清一个误会:IMPORTDATA 救不了你——它的官方语法是 IMPORTDATA(url),只吃一个 URL,没有传 HTTP 头的入口,而 SP-API 每个请求都必须带 x-amz-access-token。
脚本路线的最小骨架:
const ENDPOINT = 'https://sellingpartnerapi-na.amazon.com';
const CFG = PropertiesService.getScriptProperties(); // 凭证放脚本属性,别写死
function getAccessToken() {
const res = UrlFetchApp.fetch('https://api.amazon.com/auth/o2/token', {
method: 'post',
payload: {
grant_type: 'refresh_token',
refresh_token: CFG.getProperty('REFRESH_TOKEN'),
client_id: CFG.getProperty('CLIENT_ID'),
client_secret: CFG.getProperty('CLIENT_SECRET')
},
muteHttpExceptions: true
});
return JSON.parse(res.getContentText()).access_token;
}
function pullDailySales() {
const interval = '2026-07-01T00:00:00-07:00--2026-07-22T00:00:00-07:00';
const url = ENDPOINT + '/sales/v1/orderMetrics?marketplaceIds=ATVPDKIKX0DER'
+ '&interval=' + encodeURIComponent(interval)
+ '&granularity=Day&granularityTimeZone=' + encodeURIComponent('America/Los_Angeles');
const res = UrlFetchApp.fetch(url, {
method: 'get',
headers: {
'x-amz-access-token': getAccessToken(),
'user-agent': 'MyDashboard/1.0 (Language=AppsScript)' // 官方要求每个请求都带
},
muteHttpExceptions: true
});
if (res.getResponseCode() !== 200) throw new Error(res.getContentText());
const rows = JSON.parse(res.getContentText()).payload.map(function (p) {
return [p.interval, p.unitCount, p.orderCount, p.totalSales.amount];
});
if (!rows.length) return; // 区间内没订单时 payload 为空,getRange 传 0 行会报错
SpreadsheetApp.getActive().getSheetByName('raw_sales')
.getRange(2, 1, rows.length, 4).setValues(rows);
}
function createTrigger() { // 执行一次即可建立定时触发器
ScriptApp.newTrigger('pullDailySales').timeBased().everyHours(6).create();
}
Apps Script 有硬上限(官方配额页,2026年7月23日实查):单次执行 6 分钟、UrlFetch 每天 20000 次(gmail 账号)或 100000 次(Workspace)、触发器每天总时长 90 分钟(gmail)或 6 小时(Workspace)。别在一个触发器里同步等一个跑十分钟的报表,拆成「下单」和「取结果」两个。
看板放什么指标、什么时候报警
| 指标 | 数据来源 | 起步告警阈值 |
|---|---|---|
| 日销售额 / 单量 | getOrderMetrics | 连续 3 天低于近 28 天均值 20% |
| 可售天数 | getInventorySummaries ÷ 近 14 天日均销量 | < 30 天催补货,< 14 天转紧急 |
| 转化率 | GET_SALES_AND_TRAFFIC_REPORT | 周环比跌 15% |
| Buy Box 占比 | GET_SALES_AND_TRAFFIC_REPORT | < 90% 查跟卖与定价 |
| 单位净利 | 结算报表金额 ÷ 单量 | 低于保本线即报警 |
| 广告花费占比 | Amazon Ads API 报表 ÷ 销售额 | 超目标 ACOS 5 个百分点 |
阈值这列是起步参考、不是行业标准,跑满一个月后用你自己的历史分布替换掉。广告那行怎么落到批量改动,接站内亚马逊广告批量操作表格实战。
AI 那一层:写公式和写周报
我在 Google Sheet 有一张表 raw_sales:A 列 date(YYYY-MM-DD 文本)、
B 列 units、C 列 orders、D 列 sales。请给三条 Google Sheets 公式:
1. F2 算最近 7 天 sales 合计(以今天为准,不含今天);
2. G2 算最近 7 天与前 7 天的环比变化百分比;
3. H2 输出状态:跌超 20% 显示"预警",跌 5%-20% 显示"观察",否则"正常"。
只用 Google Sheets 支持的函数,日期列是文本要先转日期,不要引用不存在的列。
下面是我店铺的周度看板数据(日销售额、单量、Session、转化率、可售天数、
广告花费占比,以及上周同口径数字)。请你:
1. 用 5 句话说清这周和上周比发生了什么,每句必须引用具体数字;
2. 指出 2 个最值得追查的异常,说明依据是哪两个指标同时变动;
3. 给 3 条下周动作建议,按影响大小排序。
只用我给的数据,缺字段直接说"数据不足",不要推测原因,不要编造行业均值。
AI 在这层会写错什么,必须人工核这四处:
- 函数方言:AI 常把 Excel 写法混进来,粘进 Sheet 直接报
#NAME?;粘完先看报错,再抽一行手工验算。 - 时区:SP-API 返回时间带时区偏移,Sheet 按文件时区解析——日销售额对不上后台,多半差在这几个小时。
- 口径:你问「销售额」,它可能给含税的、或把退款算进去了;每个求和范围你都要能说出统计的是哪几列。
- 编造基准:问它「转化率 8% 算好吗」,它会编一个"行业平均",所以那句「不要编造行业均值」不能删。
AI 读后台报表的通用做法(脱敏、分表、交叉验证)见站内用 ChatGPT 读懂亚马逊后台报表。
限流与稳定性
SP-API 用令牌桶限流,每个操作有自己的速率和突发上限。以下为 2026年7月23日从官方 OpenAPI 模型仓库实查(数字写在每个操作的 Usage Plan 表里,可自己点开核):
| 操作 | 速率(次/秒) | 突发 | 换算 |
|---|---|---|---|
getOrders | 0.0167 | 20 | 约 1 次/分钟 |
getOrderMetrics | 0.5 | 15 | 2 秒 1 次 |
getInventorySummaries | 2 | 2 | 桶很浅,连发即限流 |
createReport | 0.0167 | 15 | 约 1 次/分钟 |
getReport | 2 | 15 | 轮询够用 |
getReportDocument | 0.0167 | 15 | 约 1 次/分钟 |
三条实战结论:getInventorySummaries 桶只有 2、最容易被限,遍历 SKU 必须限速别开并发;报表别高频下单——createReport 自己就只有约 1 次/分钟的速率,而销售与流量报表默认按天聚合,正确姿势是每天定时拉一次、结果缓存在 Sheet 里;限流不是异常而是常态,收到 429 就退避重试(等 1 分钟、每次翻倍),这也是官方建议。令牌桶原理见站内亚马逊销售伙伴 API 的使用方案和速率限制。
行动清单
- 先做第一节那道选择题:现成工具没有的那几个指标,才是自建的理由。
- 按私有开发者注册,勾最小够用的 Roles(要 Sales & Traffic 或 Data Kiosk 就得有 Brand Analytics)。
- 拿到 refresh token 存进脚本属性,绝不写死在代码里。
- 先只接
getOrderMetrics跑通闭环,别一上来就接六个接口。 - 加时间触发器,报表类拆成「下单」和「取结果」两个,避开 6 分钟上限。
- 广告数据单独走 Amazon Ads API,别指望一套凭证通吃。
胜负手不是代码多漂亮,是把口径定死、把限流让开、把维护量压到最小。 剩下的重复劳动交给 AI 就行。
延伸阅读
- SP-API 与 MWS 的区别:亚马逊销售伙伴 API VS MWS
- 申请权限前先看懂角色:亚马逊销售伙伴 API 中的角色
- 限流原理细讲:亚马逊销售伙伴 API 的使用方案和速率限制
- 不写代码直接让 AI 读报表:用 ChatGPT 读懂亚马逊后台报表
- 各环节该用什么工具:2026 跨境电商卖家 AI 工具栈全盘点