Amazon Price Tracker: Watch a List of ASINs Over Time
Pricing
from $4.00 / 1,000 products with a prices
Amazon Price Tracker: Watch a List of ASINs Over Time
Track what a fixed list of Amazon products costs, run after run. Price, list price, discount, coupon, deal badge and stock, with a timestamp on every row so a schedule becomes a price history. 19 marketplaces. You only pay for rows that arrive with a price.
Pricing
from $4.00 / 1,000 products with a prices
Rating
0.0
(0)
Developer
Amazon Scrapers
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Amazon price tracker: watch a fixed list of ASINs over time
Give it the products you care about. Get back what each one costs right now, what it used to cost, what discount is running, and a timestamp on every row, so a schedule turns into a price history you own.
There is a price tracker on this Store already and it does not track prices. It takes a keyword and a country and hands back search results. No fixed list, no history, no change over time. This one is the other thing: you give it the ASINs, it reads the same ASINs tomorrow, and the dataset grows into a record.
Eighteen fields per product, nineteen marketplaces, and a price that is never guessed.
Read this before your first run
Amazon does not hand out prices everywhere. The price this Actor reports comes from the buy box, and on several marketplaces Amazon leaves the buy box out of the page entirely when it cannot work out where to deliver.
Measured on 2026-08-24, share of products that came back with a price:
| Marketplace | Products priced |
|---|---|
| amazon.com | 57 of 60 |
| amazon.ca | 5 of 5 |
| amazon.co.uk | 5 of 6 |
| amazon.fr | 4 of 5 |
| amazon.it | 1 of 5 |
| amazon.es | 1 of 5 |
| amazon.de | 0 of 8 |
| amazon.com.au | 0 of 5 |
If your marketplace is at the bottom of that table this Actor has little to tell you, and it will not pretend otherwise: those rows arrive without a price and without a charge. Five approaches were tried to get German prices out, including the shop's own language, matching country addresses, locale cookies and the mobile page. None of them worked, and one of them made everything else worse.
Run twenty products on your own marketplace first. It costs nothing when the prices are not there.
It will not guess a price
Amazon puts up to nine price-shaped numbers on a product page: the subscribe option, a used offer, a struck-through list price, a per-unit price, a bundle, a Prime upsell that shows two different amounts in the same block.
Reading the markup and picking one gets it wrong more often than right. Measured on this engine: prices derived from the markup were correct zero times out of six. Prices taken from the buy box data Amazon itself uses to render the page were correct nine times out of nine.
One concrete case from that measurement: a product selling for $16.99 came back as $11.70 from the markup, because the cheapest visible number belonged to a used offer three blocks down. On a price tracker that is not a small error. You would have repriced against a number nobody was charging.
So the buy box data is the only source, priceSource records it on every row,
and when that data is absent you get no price rather than a wrong one. The row
still arrives with the stock status, the title and the timestamp.
You are not charged for a row without a price.
Every field it returns
Eighteen per product, and eleven of them are about the price. That is the point: this Actor goes narrow and deep rather than wide.
Price and offer
| Field | What it holds |
|---|---|
price | Current price from Amazon's own buy box data (this is what you are charged for) |
listPrice | The struck-through price, when Amazon shows one |
savingsAmount | How much is off in money |
discountPercent | How much is off as a percentage |
currency | Three-letter code, from the page itself |
pricePerUnit | Price per count, ounce, litre, whatever Amazon uses |
priceSource | Where the price came from, so you can audit it |
isDiscounted | Whether it is currently below list price |
coupon | The clip-coupon text, when there is one |
dealBadge | Lightning deal, limited time deal, and similar |
hasSubscribeAndSave | Whether a subscription price exists |
Stock and delivery
| Field | What it holds |
|---|---|
inStock | True, false, or null when Amazon does not say |
availability | Amazon's own availability sentence |
Identity and catalogue
| Field | What it holds |
|---|---|
asin | The product id |
title | Full product title, shortened only past 1000 characters |
marketplace | Which shop this row came from |
url | The page this was read from |
scrapedAt | Timestamp of the read |
A real row
asin B0DXXYS4BJtitle Roku Streaming Stick HD with Voice Remoteprice 29.99currency USDpriceSource buybox-datalistPrice 39.99savingsAmount 10.00discountPercent 25isDiscounted truecoupon nulldealBadge Limited time dealpricePerUnit nullhasSubscribeAndSave falseinStock trueavailability In Stockmarketplace comscrapedAt 2026-08-26T09:14:22.031Z
Twenty-five percent off with a limited time deal running, and priceSource says
the number came from Amazon's own buy box data rather than from anywhere else on
the page. That last field is what lets you audit a surprising price instead of
wondering about it.
Turning it into a history
Run it once and you have today's prices. Set it to run daily from the Schedules
tab, point every run at the same named dataset, and the rows accumulate. Sorting
by asin and scrapedAt gives you the price line per product.
Nothing here computes a delta for you, and that is deliberate. Which comparison matters depends on your question: yesterday, last week, the lowest ever, the price before the coupon. A dataset with honest timestamps answers all of them. A "price changed" flag whose rules you cannot inspect answers one, badly.
For the same reason there is no alerting built in. Put a webhook on the run and compare the last two rows for an ASIN in your own code. Keeping the comparison outside means you can change the rule without redeploying anything.
What to put in
ASINs or product URLs. This is the main way in. Paste them in any shape: a
bare B08N5WRWNW, a full URL with tracking parameters, a spreadsheet cell that
still says ASIN: B08N5WRWNW, quotes or a trailing full stop around it.
Duplicates are removed across everything you give it, so a product listed twice
is fetched once and billed once.
A search term or a category link, if you want to establish which products to track before you start tracking them. Most people run a category once, take the ASINs, and track those from then on.
The list is yours and it stays yours. This Actor never expands it on your behalf, never follows a variant family, never adds the products Amazon suggests. Every one of those would quietly multiply what you are billed.
Settings worth knowing about
| Setting | What it does |
|---|---|
marketplace | One of nineteen, from com to co.jp. The currency follows the shop. |
proxyCountry | Leave empty and it follows the marketplace. Worth setting by hand only when you want the price as a shopper in a specific country sees it. |
maxItems | Hard ceiling on delivered products. Zero means no ceiling. |
maxItemsPerList | How many products to take from each search term or category link. |
maxListPages | How deep to walk each list. |
lanes | How many products are read at once, each on its own exit address. Eight by default. Sixteen roughly halves the run time and costs a few prices, because Amazon strips the buy box sooner when you push. On a price tracker that trade is usually not worth it. |
maxAttempts | Attempts per product, each from a different address. Twelve by default. |
residentialFallback | Off by default. Retries through residential addresses after half the attempts have failed. Measured 2026-08-26: on a sixty product run it cost roughly six times as much and returned two more prices. Leave it off unless a marketplace is refusing everything. |
economical | Hangs up on each page once the price block has arrived. Off by default; measured across three pairs of runs it saves nothing, because hanging up mid-page produces aborted connections that come back as retries. |
How it works, in plain terms
Amazon refuses roughly six requests in ten to an address it has not seen before. For a tracker that is worse than for a one-off report: a refused product is not a missing row, it is a hole in a time series that you cannot fill in later.
So every product gets up to twelve attempts, each from a different exit address, and the same address is never used twice in a row. Addresses that work are remembered for the rest of the run and tried first. Addresses that keep getting refused are dropped.
The pace adapts. When refusals go up the runner slows down instead of pushing harder, because pushing harder is how an entire run gets locked out for an hour. Anything still refused at the end goes into a second pass at half speed using only the addresses that already proved themselves.
There is one more rule specific to prices. A page that came back complete but without a price gets retried too, up to a point, because a missing buy box is often a page variant rather than a fact. After five complete pages in a row without a price it stops asking: that is Amazon telling you something, not Amazon being difficult.
Reading the run log
Every run ends with a summary:
Done: 16 charged (+4 delivered without a price, free), 0 refused by Amazon, 0 other. 864 KB per charged result, 167 attempts in total.Exit addresses: 123 used, 2 proven good, 12 burned.Attempts by outcome: {"refused by Amazon":108,"page did not carry the field this Actor needs":38,"http_500":3,"ok":16,"delivered, product unavailable":1,"network error":1}
charged is what you pay for. The bracketed number arrived complete but without
a price and cost you nothing. On amazon.com the second number is usually small;
if it is most of your run, check the marketplace table at the top of this page.
If a run ever delivers rows and charges for none of them, the log says so in capitals at the bottom.
Reliability, measured
Three consecutive runs of twelve products on 26 August 2026, at the default settings:
run 1 11 of 12 delivered, 9 with a pricerun 2 12 of 12 delivered, 10 with a pricerun 3 11 of 12 delivered, 10 with a price
And one run of sixty products the same day: 60 delivered, 53 with a price, in 10.0 minutes.
Worth reading out of that: the longer run has the better delivery rate, 100 percent against 94, and that is not luck. The engine spends the first products of a run working out which exit addresses Amazon is tolerating today, so a short run pays the whole warm-up over fewer products. If delivery matters more to you than turnaround, batch your work into larger runs.
The second is the residential switch, and the honest version is less dramatic than it sounds. Measured 26 August on the same sixty products, twice: with the switch off, fifty-one came back with the field this Actor charges on, for $0.0205 of platform usage. With it on, fifty-three came back, for $0.1192. Two more products for roughly six times the cost.
That is why it is off by default. It is in your input form, so if a marketplace is refusing almost everything you can turn it on and pay for the difference.
What you can build with it
A repricing input. Daily prices on the products you compete with, with
listPrice and discountPercent so you can tell a real cut from a struck-through
number that never moves.
A promotion calendar. dealBadge and coupon over a month show when a
competitor runs promotions, and how deep.
A price floor alarm. Compare today against the lowest price you have on
record for that ASIN. The record is your dataset, so the rule is yours.
A supplier check. If you buy to resell, tracking the source listing tells you when your margin is about to change.
A subscription-price watch. hasSubscribeAndSave flags listings where a
lower recurring price sits next to the one you are reading, which is a different
competitive position from a straight discount.
Working it into your stack
Every run writes to a dataset you can download as CSV, JSON, Excel or XML, or pull through the API. For a tracker the API matters more than the download: point repeated runs at one named dataset and query it as a table.
Schedules take a cron expression. Webhooks fire on completion. The output is flat, so it loads into a spreadsheet or a database without unpacking anything.
Marketplaces
Nineteen, from amazon.com to amazon.co.jp, read in their own language. A German
rating saying "4,5 von 5 Sternen" and a Japanese one putting the number last both
come back as 4.5, and a German "Derzeit nicht verfügbar" comes back as
inStock: false rather than as an empty field.
Prices are the one thing that does not travel everywhere, and the table at the top of this page is the honest picture.
One more thing worth knowing: currency reports what Amazon actually quoted, not
what the marketplace usually uses. amazon.ca quotes US dollars to a visitor it
places in the United States. A tracker that silently relabelled that as Canadian
dollars would give you a price history with a thirty percent step in it that
never happened.
Pricing
Four dollars per thousand products with a price, plus three cents to start a run.
Watching fifty products daily costs twenty-three cents a day: fifty times four tenths of a cent, plus the three cent start fee. You are not charged for a row without a price or for a product that never arrived, and platform usage is included, so there is no separate compute or proxy bill.
Because you are only billed for prices, a run against a marketplace that does not give them costs you three cents and tells you so.
The rest of this family
Eleven Actors on one engine. For a tracker the useful neighbours are:
- Amazon Stock Checker when the question is availability rather than price, and you want to be billed on the stock answer instead.
- Amazon Offer Checker when you need to know how many sellers are on the listing and whether a used offer is dragging the price picture around.
- Amazon BSR Tracker for rank over time, which moves days before price does.
- Amazon Product Scraper when you want all sixty-four fields rather than the eighteen here.
Questions people ask
How often should I run it. Daily is the usual cadence. Amazon changes prices more often than that, but for most decisions a daily point is enough, and hourly runs mostly buy you noise plus a bigger bill.
Why is listPrice often empty. Because Amazon only shows a struck-through
price when there is a discount to show. An empty listPrice with a filled
price means the product is at its normal price.
What is priceSource for. Auditing. When a price surprises you, that field tells you it came from Amazon's own data rather than from somewhere on the page that might have belonged to a different offer.
Can it tell me the price history before today. No. Nobody can: Amazon does not publish it. The history starts the first day you run this.
Can I track products across several marketplaces at once. One marketplace per
run, but you can schedule one run per marketplace into the same dataset. Every
row carries marketplace, so they stay apart.
How many products can it track. No built-in ceiling. Sixty took 10.0 minutes on the measured run above, so fifty is around 8.
What it does not collect
No review text, no reviewer names, no customer questions, no seller names. Those are personal data, and scraping them out of a public website is almost always a GDPR problem in Europe regardless of how public the page is.
Legal note
This Actor reads public pages and takes product facts: prices, discounts, availability. Business information about an item, not information about a person.
You are responsible for what you do with the output. Check Amazon's terms for your own use case.