A product page shows today's price. It does not show that the price was ten dollars lower last week, or that the "was" price next to it went up shortly before the discount started.
Price history is the difference between seeing a competitor's price and understanding their pricing. One API request returns it, together with the rank and rating history you need to judge whether a price change did anything.
The request
The product history endpoint takes an ASIN and a time window in milliseconds:
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
}'startTimestampandendTimestampbound the window. The values above are 12 September and 12 October 2025.dailyLatestasks for the latest observation of each day instead of every observation.
What comes back
The response is one object with product information and a set of time series. Each series is an array of { "timePoint": ..., "value": ... } pairs:
| Series | What it tracks |
|---|---|
price | The selling price |
priceList | The list price shown struck through next to it |
buyBox | The Buy Box price |
buyBoxSellerIdHistory | Which seller held the Buy Box |
dealPrice | The deal price, when a deal was running |
bsr | Best Sellers Rank in the main category |
subSalesRank | Rank in each subcategory |
reviews, rating | Review count and star rating |
sellers | Number of sellers on the listing |
One month of a real product
We ran the request above on 12 October 2026 for a 7-litre dog water fountain on the US marketplace, asking for a 30-day window a year earlier. It returned 31 points per series. Sorted by date:
| Dates (2025) | Price | List price | BSR in Pet Supplies | Rank in subcategory |
|---|---|---|---|---|
| 12–15 Sep | $49.99 | $59.99 | 2,402–2,477 | 5–6 |
| 16–21 Sep | $49.99 | $69.99 | 2,295–2,565 | 4–5 |
| 22–25 Sep | $44.99 | $69.99 | 2,152–2,291 | 4–5 |
| 26 Sep–5 Oct | $39.99 | $69.99 | 2,194 falling to 1,611 | 4 rising to 2 |
| 6–11 Oct | $49.99 | $69.99 | 1,370–1,780 | 2–3 |
Four things are visible here that a product page never shows.
The price moved in steps. $49.99, then $44.99 for four days, then $39.99 for ten, then back to $49.99. That is a planned promotion, not a permanent cut. A competitor who matched $39.99 permanently would have been undercutting a price that no longer existed two weeks later.
The list price went up first. The struck-through price rose from $59.99 to $69.99 on 16 September, ten days before the selling price reached $39.99. The discount shoppers saw was measured against the higher figure. The data shows the sequence; it does not show the reason.
Rank improved during the discount and held afterwards. BSR ran between about 2,300 and 2,570 at full price, fell steadily to 1,611 during the $39.99 period, and stayed between 1,370 and 1,780 in the six days after the price went back up. In the subcategory the product moved from fifth or sixth to second or third.
The seller never changed. buyBoxSellerIdHistory shows the same seller ID throughout, and sellers stays at 1. Nobody else was competing for the Buy Box, so the price moves were the brand's own decisions.
A caution on that third point: rank improving while the price is lower is what you would expect, but one product over one month is not proof of cause. A lower BSR number means more sales relative to the category, and other things change in a month too.
Four things to handle in code
1. The series are in time order. Each array is sorted by timePoint before it reaches you (the data service itself returns them unordered). If you merge several windows, sort again.
2. Treat -1 as missing. dealPrice was -1 on every day because no deal ran. buyBox was -1 on two days, and reviews and rating on one. Filter these out; do not chart them as a price of minus one dollar.
3. Join series on the day, not the timestamp. Observations in different series share timestamps in this response, but do not rely on it. Reduce each timePoint to a date before joining.
4. Read review counts with care. In this window the count went from 3,109 to 3,366, including a jump of about 200 in a single day followed by a small drop. Counts on a variation family are pooled, so a change in the family shows up as a jump. That is not 200 new reviews in a day. Parent and child ASINs explains the pooling.
What to use it for
Before matching a competitor's price, check whether it is their normal price or a promotion that ends next week.
Before a sales event, pull last year's window for the main competitors. What they did then is the best available guide to what they will do now. The example above is exactly that: a window from a year ago.
When your own rank moves, look at whether a competitor changed price in the same days.
When judging a discount, compare the selling price with priceList over time, not on one day.
A daily job that stores today's price is a different tool from this one. Competitor price and coupon monitoring covers that, and when each makes sense. Where a price sits within its category is in reading a category's price bands.
What price history cannot tell you
Why a price changed. You see the sequence, not the reasoning or the cost behind it.
What a shopper actually paid. Coupons are separate from the listed price. The coupon trends endpoint returns those.
Units sold. BSR is a rank. Turning rank into units is an estimate; see what Amazon sales data can and cannot tell you.
Every price in between. With dailyLatest, you get one observation per day. A price that changed and changed back within a day may not appear.
Questions
How far back does the history go? The request above returned a complete window from a year earlier. Coverage depends on the product; test the ASINs you care about.
Is this Amazon's official data? No. Amazon does not offer a public price-history API. These are observations of the public product page collected over time.
Does one call return several products? No. One ASIN per call, and each successful call uses one billing unit.
Can I get history for a competitor's product? Yes. The endpoint takes any ASIN in the supported marketplaces.