Amazon Product, Price, and Stock Tracker
Pricing
from $4.76 / 1,000 product rows
Amazon Product, Price, and Stock Tracker
Current Amazon price, list price, stock, seller, and rating for ASINs or product URLs, on 9 marketplaces, read for that country's delivery view. Scheduled runs add change rows for price moves and stock changes. One row per product, Clay ready. No login, no key.
Pricing
from $4.76 / 1,000 product rows
Rating
0.0
(0)
Developer
Mamba Labs
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 hours ago
Last modified
Categories
Security
Limited permissionsShare
Give ASINs or product URLs on 9 Amazon marketplaces. You get one flat row per product with the buy box price, list price, stock, seller, and rating, read for that marketplace's own delivery country. Run it on a schedule and it adds a free change row each time a price moves or a product goes out of or back into stock. Mamba Labs pays the platform costs.
Features
- Price for the country you sell in. Amazon prices for the delivery country. A page seen from abroad can show a different price (we measured EUR 87.13 against EUR 74.35 on amazon.de, and GBP 10.89 against GBP 13.07 on amazon.co.uk), so a page priced for another country is refused and read again. Every row says which delivery location the page was priced for.
- Only the buy box price. Product pages carry other products' prices in carousels. The price comes from the buy box only. No featured offer means no price and
stock_statusno_buy_box, not a guess. - Change rows. Change rows report
price_up,price_down,out_of_stock, andback_in_stock, with the previous value and the percent. They are free. - Blocks are free. If Amazon refuses every attempt for a product, you get a free
blockedrow and pay nothing for that product. - Cost guards. A maximum charge per run, and the actor stops cleanly before its timeout.
How the data is read
The actor reads Amazon's public mobile product page, the page a phone browser opens, through the Apify proxy. amazon.com and amazon.ca use the Apify proxy pool with residential addresses as the fallback. The other marketplaces use residential addresses in that country. No Amazon account, no login, no key, and no other developer's actor. Requests are retried on a new address when Amazon answers with a captcha page.
Input
| Field | Type | Default | What it does |
|---|---|---|---|
products | array | ASINs or Amazon product URLs, up to 1,000 per run. A URL uses the marketplace in the URL; a bare ASIN uses the Marketplace setting. | |
marketplace | string | amazon.com | The store a bare ASIN is read from. |
track_changes | string | true | true (default) or false. With true, the actor keeps each product's last reading in a key value store in your account, and a later run writes a change row when the price moves or the product goes out of or back into stock. |
state_key | string | Optional name for the set of last readings, when you keep several separate tracking lists. Letters, numbers, dots, dashes, underscores. | |
previous_snapshot | array | Optional. Rows from an earlier run of this actor, as a JSON list. When given, changes are computed against these rows, not the stored readings. | |
max_charge_usd | string | Optional. The run stops before a charge that would pass this amount. Summary rows are always returned. | |
proxy_mode | string | auto | auto (default): amazon.com and amazon.ca are read through the Apify proxy pool with residential as the fallback; other marketplaces use residential addresses in that country, because Amazon prices for the delivery country. residential: every product uses residential addresses in its marketplace country and is billed as product-row-local. |
Give at least one ASIN or URL. Up to 1,000 products per run. A value that is neither an ASIN nor a product URL on a supported marketplace gets its own free row and the rest still run.
Output
| Field | Type | What it holds |
|---|---|---|
row_type | string | One of: product, change, run_summary. run_summary is the one free row written when the input is refused. |
input | string | The ASIN or URL you gave. |
marketplace | string | The Amazon store read. |
asin | string | The product's Amazon ID. |
asin_on_page | string | Set only when Amazon showed a different ASIN than you asked for, such as a variation. |
product_url | string | Link to the product. |
title | string | Product title. |
brand | string | The brand line on the page. |
price | number | The buy box price as a number. Empty when the product is out of stock or has no featured offer. |
list_price | number | The struck through list price, when the page shows one. |
currency | string | Currency code of the marketplace. |
price_text | string | The price exactly as the page shows it. |
stock_status | string | in_stock, low_stock, out_of_stock, preorder, other (see stock_text), or no_buy_box. |
stock_text | string | The availability message on the page. |
stock_left | integer | The number when the page says Only N left in stock. |
seller | string | Who sells the buy box offer. |
ships_from | string | Who ships the buy box offer. |
rating | number | Average rating out of 5. |
review_count | integer | Number of ratings. |
image_url | string | Main product image. |
delivery_location | string | The delivery location Amazon priced this page for. Prices and stock can differ by location. |
change_type | string | Change rows: price_up, price_down, out_of_stock, or back_in_stock. |
previous_price | number | Change rows: the last price read. |
previous_stock_status | string | Change rows: the last stock status read. |
change_pct | number | Price change rows: percent change from the previous price. |
route | string | Which proxy route read the page. |
attempts | integer | Fetch attempts for this product, refused ones included. |
row_status | string | ok, or why this row carries no data: no_results, no_change, partial, blocked, or error. |
error_reason | string | Why the row is not ok. A refused input reads input_invalid: followed by what to fix. |
billable_events_json | string | What this row was billed as, for example {"product-row":1}. {} means free. |
scraped_at | string | When the row was written, UTC. |
Pricing
Pay per event. You pay for each product page read, and for the run start. Change rows, blocked products, missing products, unreadable pages, and a refused input are free.
| Event | Free plan | Bronze | Silver | Gold |
|---|---|---|---|---|
product-row, one product from amazon.com or amazon.ca | $0.0056 | $0.00532 | $0.00504 | $0.00476 |
product-row-local, one product from any other marketplace, or with Proxy mode residential | $0.015 | $0.01425 | $0.0135 | $0.01275 |
apify-actor-start, once per run (one per GB of memory; the default 256 MB is one) | $0.002 | $0.002 | $0.002 | $0.002 |
Per 1,000 rows of product-row: $5.60 on the free plan, $4.76 on Gold.
Free plan cap: 1.50 USD of evaluation a month, about 268 rows. Any paid Apify plan removes the cap, and it resets on the 1st. The run stops before a charge that passes your maximum charge per run in Apify or your max_charge_usd input.
Mamba Labs pays the platform costs of your run, Apify proxy traffic included.
The second price exists because other marketplaces are read through residential addresses, which cost more than the proxy pool, so those rows cost more than most Amazon actors in the Store.
Usage examples
A daily price and stock watch. Schedule this; the second run on will add change rows.
{"products": ["B00MNV8E0C", "B00FLYWNYQ"],"marketplace": "amazon.com","state_key": "my-watchlist"}
Another marketplace, by URL.
{"products": ["https://www.amazon.de/dp/B01N5IB20Q"]}
Read the rows with GET https://api.apify.com/v2/datasets/{datasetId}/items.
Clay. Number and on or off inputs are text fields, which is what Clay sends. A list input takes a JSON list, so put the column inside a one item list. To compute changes inside a table with no stored state, pass the earlier rows as previous_snapshot.
MCP. The Mamba Labs MCP server @mambalabsdev/mcp-amazon-product-price-stock-tracker exposes this actor to Claude and other MCP clients.
Error handling
| Case | What you get |
|---|---|
| Missing or unreadable input | One free row, row_type run_summary, error_reason starting input_invalid: with what to fix. The run ends successfully and charges nothing but the run start |
| Amazon refuses every attempt for a product | A free row, row_status blocked, with the attempts count |
| The ASIN has no page on that marketplace | A free row, row_status no_results |
| A listing with no featured offer | A charged row with stock_status no_buy_box, an empty price, and title and rating. This also covers a parent listing that needs an option picked |
| A page with no title and no price | A free row, row_status partial |
| Out of stock | A charged row with stock_status out_of_stock and an empty price. That is the answer you asked for |
| The run is close to its timeout | The actor stops starting new work 90 seconds before the timeout and delivers what it has |
Limitations
- Prices and stock are for the location Amazon assigns the address it read from, shown in
delivery_location. You cannot choose a zip code in this version: the location form asked for a sign in on the pages tested. - A parent listing that needs an option picked has no featured offer. Pass the ASIN of the exact variation.
- A residential page is about 200 KB on the wire, so a marketplace outside the US and Canada costs more per row.
- Coupons, member prices, and tax are not added to or taken from the price.
Mamba Labs actor suite
Built by Mamba Labs.