Amazon Price Tracker: Watch a List of ASINs Over Time avatar

Amazon Price Tracker: Watch a List of ASINs Over Time

Pricing

from $4.00 / 1,000 products with a prices

Go to Apify Store
Amazon Price Tracker: Watch a List of ASINs Over Time

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

Amazon Scrapers

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

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:

MarketplaceProducts priced
amazon.com57 of 60
amazon.ca5 of 5
amazon.co.uk5 of 6
amazon.fr4 of 5
amazon.it1 of 5
amazon.es1 of 5
amazon.de0 of 8
amazon.com.au0 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

FieldWhat it holds
priceCurrent price from Amazon's own buy box data (this is what you are charged for)
listPriceThe struck-through price, when Amazon shows one
savingsAmountHow much is off in money
discountPercentHow much is off as a percentage
currencyThree-letter code, from the page itself
pricePerUnitPrice per count, ounce, litre, whatever Amazon uses
priceSourceWhere the price came from, so you can audit it
isDiscountedWhether it is currently below list price
couponThe clip-coupon text, when there is one
dealBadgeLightning deal, limited time deal, and similar
hasSubscribeAndSaveWhether a subscription price exists

Stock and delivery

FieldWhat it holds
inStockTrue, false, or null when Amazon does not say
availabilityAmazon's own availability sentence

Identity and catalogue

FieldWhat it holds
asinThe product id
titleFull product title, shortened only past 1000 characters
marketplaceWhich shop this row came from
urlThe page this was read from
scrapedAtTimestamp of the read

A real row

asin B0DXXYS4BJ
title Roku Streaming Stick HD with Voice Remote
price 29.99
currency USD
priceSource buybox-data
listPrice 39.99
savingsAmount 10.00
discountPercent 25
isDiscounted true
coupon null
dealBadge Limited time deal
pricePerUnit null
hasSubscribeAndSave false
inStock true
availability In Stock
marketplace com
scrapedAt 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

SettingWhat it does
marketplaceOne of nineteen, from com to co.jp. The currency follows the shop.
proxyCountryLeave 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.
maxItemsHard ceiling on delivered products. Zero means no ceiling.
maxItemsPerListHow many products to take from each search term or category link.
maxListPagesHow deep to walk each list.
lanesHow 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.
maxAttemptsAttempts per product, each from a different address. Twelve by default.
residentialFallbackOff 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.
economicalHangs 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 price
run 2 12 of 12 delivered, 10 with a price
run 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.

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.