商品页面显示的是今天的价格。它不会显示上周的价格低十美元,也不会显示旁边那个「原价」是在折扣开始前不久才涨上去的。
价格历史,是「看到竞品的价格」和「看懂竞品的定价」之间的差别。 一次 API 请求就能返回它,同时返回判断一次调价有没有效果所需要的排名和评分历史。
请求
商品历史接口接收一个 ASIN 和一个以毫秒表示的时间窗口:
curl --request POST \
--url https://ecommercedataapi.com/v1/amazon/asin/history \
--header "Content-Type: application/json" \
--header "X-API-Key: ${ECOMMERCE_DATA_API_KEY}" \
--data '{
"marketplace": "US",
"asin": "B0D5B6RLYY",
"startTimestamp": 1757635200000,
"endTimestamp": 1760227200000,
"dailyLatest": true
}'startTimestamp和endTimestamp限定窗口。上面的值是 2025 年 9 月 12 日和 10 月 12 日。dailyLatest表示每天只要最新的一次观测,而不是每一次观测。
返回什么
返回是一个对象,包含商品信息和一组时间序列。每条序列是由 { "timePoint": ..., "value": ... } 组成的数组:
| 序列 | 跟踪的是什么 |
|---|---|
price | 售价 |
priceList | 售价旁边被划掉的划线价 |
buyBox | Buy Box 价格 |
buyBoxSellerIdHistory | 哪个卖家占有 Buy Box |
dealPrice | 秒杀价,有秒杀活动时才有 |
bsr | 大类目下的 BSR 排名 |
subSalesRank | 各个小类目下的排名 |
reviews、rating | 评论数和星级 |
sellers | 这个商品下的卖家数量 |
一个真实商品的一个月
2026 年 10 月 12 日,我们对美国站一个 7 升狗用饮水机发了上面的请求,取的是一年前的 30 天窗口。每条序列返回 31 个点。按日期排序后:
| 日期(2025 年) | 售价 | 划线价 | 宠物用品大类 BSR | 小类目排名 |
|---|---|---|---|---|
| 9 月 12–15 日 | $49.99 | $59.99 | 2,402–2,477 | 5–6 |
| 9 月 16–21 日 | $49.99 | $69.99 | 2,295–2,565 | 4–5 |
| 9 月 22–25 日 | $44.99 | $69.99 | 2,152–2,291 | 4–5 |
| 9 月 26 日–10 月 5 日 | $39.99 | $69.99 | 从 2,194 降到 1,611 | 从 4 升到 2 |
| 10 月 6–11 日 | $49.99 | $69.99 | 1,370–1,780 | 2–3 |
这里能看出四件商品页面上永远看不到的事。
价格是分步走的。 $49.99,然后 $44.99 维持四天,再 $39.99 维持十天,最后回到 $49.99。这是一次有计划的促销,不是永久降价。如果有竞品把价格永久跟到 $39.99,两周之后它压着的就是一个已经不存在的价格。
划线价先涨了。 划线价在 9 月 16 日从 $59.99 涨到 $69.99,比售价降到 $39.99 早了十天。买家看到的折扣幅度是按更高的那个数算的。数据显示的是先后顺序,不显示原因。
排名在折扣期间改善,之后保持住了。 原价期间 BSR 在大约 2,300 到 2,570 之间;$39.99 期间一路降到 1,611;价格涨回去之后的六天里,仍然在 1,370 到 1,780 之间。在小类目里,这个商品从第五、六名升到了第二、三名。
卖家没有变过。 buyBoxSellerIdHistory 全程显示同一个卖家 ID,sellers 一直是 1。没有别人在抢 Buy Box,所以这些调价是品牌自己的决定。
对第三点要谨慎: 降价期间排名变好符合预期,但一个商品一个月的数据不能证明因果。BSR 数字变小意味着相对类目卖得更多,而一个月里还有别的东西在变。
代码里要处理的四件事
1. 序列已按时间排好。 每条数组在到达你之前都已按 timePoint 排序(上游本身返回的是乱序)。如果你要拼接多个窗口,再排一次。
2. 把 -1 当作缺失。 dealPrice 每天都是 -1,因为没有秒杀活动。buyBox 有两天是 -1,reviews 和 rating 有一天是 -1。把它们过滤掉,不要画成「负一美元」的价格。
3. 按日期对齐序列,不要按时间戳。 这次返回里不同序列的观测共用时间戳,但不要依赖这一点。对齐之前先把每个 timePoint 归到日期。
4. 评论数要小心读。 这个窗口里评论数从 3,109 涨到 3,366,其中有一天跳涨了大约 200,随后又小幅回落。变体家族的评论数是合并的,家族发生变动就会表现为跳变。那不是一天新增 200 条评论。合并的规则见父 ASIN 和子 ASIN 的区别。
用来做什么
跟竞品价格之前,先确认那是它的常规价格,还是下周就结束的促销。
大促之前,把主要竞品去年同期的窗口拉出来。它们当时怎么做,是判断这次会怎么做的最好依据。上面的例子正是这样:一个一年前的窗口。
自己的排名变动时,看看同一段日子里有没有竞品调价。
判断一个折扣时,把售价和 priceList 放在一段时间里比,不要只看某一天。
每天存下当日价格的定时任务,和这个接口是两种不同的工具。前者以及两者各自适用的场合,见竞品价格和优惠券监控。一个价格在类目里处于什么位置,见读懂类目的价格带分布。
价格历史不能告诉你什么
价格为什么变。 你看到的是先后顺序,看不到背后的考虑和成本。
买家实际付了多少。 优惠券和标价是分开的。优惠券趋势接口返回优惠券数据。
卖了多少件。 BSR 是排名。把排名换算成销量是估算,见亚马逊销量数据能拿到什么、拿不到什么。
中间的每一个价格。 用 dailyLatest 时每天只有一次观测。一天之内调了又调回去的价格可能不会出现。
常见问题
历史能查到多久以前? 上面的请求完整返回了一年前的一个窗口。覆盖范围因商品而异,请用你关心的 ASIN 测一下。
这是亚马逊的官方数据吗? 不是。亚马逊不提供公开的价格历史 API。这些是对公开商品页面长期采集到的观测。
一次调用能返回多个商品吗? 不能。每次调用一个 ASIN,每次成功调用消耗一个计费单位。
能查竞品商品的历史吗? 可以。这个接口接受支持站点内的任意 ASIN。