Amazon Price & Buy Box Scraper
Pricing
from $6.00 / 1,000 asin checks
Amazon Price & Buy Box Scraper
Scrapes price, Buy Box winner, availability and the full offer list per ASIN across 18 Amazon marketplaces — with watchlist history, change detection and cross-marketplace checks. Errors never charged.
Pricing
from $6.00 / 1,000 asin checks
Rating
0.0
(0)
Developer
Torchtechnology LTD
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
6 minutes ago
Last modified
Categories
Share
What does this Actor do?
Amazon Price & Buy Box Scraper checks any list of Amazon products and returns everything that matters about the money side: the current price as a structured number with the marketplace's own currency, list price and discount, coupons and deal badges, stock/availability, the Buy Box winner (seller name, seller ID, fulfillment, Amazon-or-not), and — optionally — the complete offer list with every seller's price, condition, shipping, delivery promise, ships-from and Prime badge. It works across eighteen verified marketplaces: amazon.de, .com, .co.uk, .fr, .it, .es, .ca, .com.au, .co.jp, .in, .nl, .se, .pl, .com.be, .com.mx, .com.br, .ae, and .sa.
Built-in watchlist history: every successful check is recorded per watchlist, so repeated runs of the same ASIN build a price/Buy-Box time series. Turn on monitor mode to get change detection (price moves, Buy Box flips to another seller, stock changes) with deltas and a plain-English summary, and includeHistory to have past snapshots attached directly to each result. No external state needed on your side.
It is designed for both humans and AI agents: deterministic JSON output, documented error semantics, and pay-per-result pricing where errors are never charged.
Why use this Actor?
- Sellers & repricers — know the moment you lose the Buy Box (
changeDetected,buyboxSellerName,buyboxIsAmazon), not when sales dry up. - Resellers & arbitrage — catch real price drops and see the full offer list, including the cheapest offer (
lowestOffer) without scrolling "All offers" pages by hand. - Brand owners — watch your ASINs for unauthorized sellers winning the Buy Box across all EU marketplaces in one run.
- Cross-border price comparison —
alsoCheckMarketplaceschecks the same ASIN on up to 17 more marketplaces in the same run. - Price history without Keepa subscription — schedule the Actor and read the stored snapshots (
includeHistory), pay-per-check instead of a flat monthly fee.
When not to use it: you need review texts (use a reviews actor), ranked category charts (use a bestsellers actor), or keyword rankings (use a search actor).
How to use this Actor
- Click Try for free and open the Input tab.
- Enter ASINs (with a marketplace), paste full Amazon product URLs, or drop search/category URLs to collect ASINs from.
- Leave monitor mode off for a one-time check — or turn it on, give the run a stable watchlist ID, and schedule it (hourly/daily) to build history.
- Run it. Results land in the dataset, downloadable as JSON, CSV, Excel, or pulled via the API.
Input
| Field | Type | Default | Description |
|---|---|---|---|
asins | string[] | — | Plain ASINs (e.g. B0CZ9LH53B), checked on marketplace. Duplicates in one run are checked once — use includeHistory for past results of the same ASIN. |
productUrls | string[] | — | Product URLs (/dp/…, /gp/product/…, marketplace auto-detected) — or search (/s?k=…) and category/chart URLs (/gp/bestsellers/…, /b?node=…) to collect ASINs from first. |
marketplace | string | com | One of the 18 marketplace codes; applies to plain ASINs only. |
alsoCheckMarketplaces | string[] | — | Cross-marketplace fan-out: every ASIN is additionally checked on each listed marketplace. |
maxAsinsPerListUrl | integer | 20 | Cap for ASINs collected per search/category URL (each is charged like a direct ASIN). |
includeAllOffers | boolean | true | Also fetch the "All offers" page per ASIN and parse every offer. |
maxOffers | integer | 20 | Upper bound of parsed offers per ASIN. |
monitorMode | boolean | false | Diff every ASIN against its last stored snapshot: changeDetected, changes[], priceDelta, changeSummary. |
watchlistId | string | default | Namespaces the history store (price-history-v2-<watchlistId>). Keep it stable across scheduled runs. |
includeHistory | boolean | false | Attach past snapshots of the same marketplace+ASIN (newest first, current check excluded). |
historyLimit | integer | 10 | How many past snapshots to attach (0 = all stored; up to 200 kept per ASIN). |
requestDelayMs | integer | 0 | Extra pause between ASIN checks; raise it if you see bot-detection errors. |
proxyConfiguration | object | Apify Residential | Proxy settings; custom proxyUrls supported. |
proxiesByMarketplace | object | — | Geo-pinned proxies per marketplace ({"co.uk": ["http://…"]}). Overrides proxyConfiguration for that marketplace. |
Output
One dataset item per ASIN check:
{"asin": "B0CZ9LH53B","parentAsin": "B0DZP9GR4J","marketplace": "com","url": "https://www.amazon.com/dp/B0CZ9LH53B","title": "Anker 737 Power Bank (PowerCore 24K), 24,000mAh …","brand": "Visit the Anker Store","image": "https://m.media-amazon.com/images/I/…jpg","price": { "value": 109.99, "currency": "USD" },"priceString": "$109.99","priceRange": null,"listPrice": null,"discountPercent": null,"pricePerUnit": null,"coupon": null,"inSale": false,"hasFeaturedOffer": true,"buyboxPrice": { "value": 109.99, "currency": "USD" },"buyboxSellerName": "AnkerDirect","buyboxSellerId": "A2MSUK46IX9JJW","buyboxIsAmazon": false,"buyboxFulfilledBy": "Amazon","inStock": true,"availabilityText": "Only 7 left in stock - order soon.","offerCountRendered": null,"offerCountParsed": 10,"offers": [{"sellerName": "AnkerDirect","sellerId": "A2NSXUMBQKZERF","price": { "value": 109.99, "currency": "USD" },"priceString": "$109.99","condition": "New","shipping": null,"delivery": "FREE delivery Saturday, August 8 …","shipsFrom": "Amazon","isPrime": true}],"lowestOffer": { "value": 109.99, "currency": "USD", "sellerName": "AnkerDirect", "isPrime": true },"rating": 4.7,"reviewCount": 1215,"bestsellerRanks": [{ "rank": 57116, "category": "Cell Phone Portable Power Banks" }],"monitorMode": true,"watchlistId": "default","isFirstCheck": false,"changeDetected": true,"changes": ["Price dropped from 119.99 USD to 109.99 USD (-8.3%)."],"changeSummary": "Price dropped from 119.99 USD to 109.99 USD (-8.3%).","previousPrice": 119.99,"priceDelta": -10.0,"priceDeltaPercent": -8.3,"previousBuyboxSeller": "AnkerDirect","history": [{ "checkedAt": "2026-08-15T…", "price": 119.99, "buyboxSeller": "AnkerDirect", "inStock": true }],"historyCount": 3,"input": "B0CZ9LH53B","scrapedAt": "2026-08-16T10:33:30Z"}
You can download the dataset in various formats such as JSON, HTML, CSV, or Excel. The Output tab has four views: Overview (one row per ASIN), All offers (one row per offer), Price history (one row per stored snapshot), and Errors.
Data table
| Field | Meaning |
|---|---|
price / priceString | Current price as {value, currency} plus the raw rendered string. null when Amazon shows none (e.g. variant range → see priceRange) |
priceRange | {min, max, currency} when the product only shows a variant price range |
listPrice, discountPercent, pricePerUnit | Strikethrough reference price, Amazon's rendered saving %, unit price |
coupon | {text, percent, amount} when a coupon badge is rendered, else null |
inSale, dealBadgeText | Sale flag from discount/deal-badge evidence, plus the badge text |
hasFeaturedOffer | Buy Box presence — from the purchase UI only, never derived from price existence |
buyboxPrice, buyboxSellerName, buyboxSellerId, buyboxIsAmazon, buyboxFulfilledBy | Who holds the Buy Box and at what price. Seller ID comes only from the seller link — never guessed |
noFeaturedOfferNotice | Amazon's own "no featured offers" notice text when shown |
inStock, availabilityText | Tri-state stock (true/false/null = no robust statement) plus Amazon's raw availability text |
offerCountRendered / offerCountParsed | Offer count link on the PDP vs. actually parsed offers |
offers[] | Every parsed offer: seller, seller ID, structured price, condition, shipping, delivery, ships-from, Prime, plus seller feedback (sellerRating, sellerRatingsCount, sellerPositivePercent when rendered). The pinned featured (Buy Box) offer is included and flagged isFeaturedOffer: true — for single-offer ASINs it is the only one Amazon renders |
lowestOffer | Cheapest parsed offer by item price (computed from the parsed list, shipping excluded) |
rating, reviewCount, bestsellerRanks | PDP rating context and all rendered Best-Sellers-Rank entries |
isFirstCheck, changeDetected, changes, changeSummary, previousPrice, priceDelta, priceDeltaPercent, previousBuyboxSeller | Monitor mode only — diff against the watchlist's previous snapshot |
history, historyCount | With includeHistory: past snapshots (newest first, current excluded) |
notes | Partial-failure notes (e.g. offer list unavailable — PDP evidence still delivered) |
null means "not rendered by Amazon" — never a guess. Error items carry error + errorDescription and are never charged:
error | Meaning | Typical action |
|---|---|---|
invalid_asin | Not a 10-char ASIN | Fix the input |
invalid_url | Not a product/search/category URL | Fix the URL |
unsupported_marketplace | Domain not among the 18 marketplaces | Use a supported domain |
product_not_found | Amazon 404 for the /dp/ page | ASIN gone — remove it |
page_not_found | Amazon 404 for a search/category URL | Check the URL |
no_results_found | List page rendered no product links | Retry later |
blocked | Bot-detection page after one automatic retry | Use residential/geo-pinned proxies |
transport | Navigation failure (proxy/timeout) | Simply retry |
unexpected_page | Page rendered without title, price block and availability (bot variant) | Retry with residential proxies |
Pricing
Pay-per-event; you only pay for real answers:
result— one per ASIN check (also per first/baseline check in monitor mode)result-changed— monitor mode check with a detected changeresult-unchanged— monitor mode check confirming nothing changed (price it cheaper in the Console so daily monitoring stays affordable)
Error items are free. The offer list, history attachment and change detection ride along on the ASIN event — no per-offer or per-snapshot charges. Event prices are set on the Pricing tab.
Tips
- Batch your ASINs into one run — per-run startup cost is shared.
- Keep a stable
watchlistIdand schedule the run (Apify Scheduler, e.g. daily): that is what builds the history time series and makes monitor mode compare against your last check instead of starting fresh. - The proxy exit country must match the marketplace for correct local prices. Every task walks the proxy tier chain: your
proxiesByMarketplacepool first, then the bundled pool (per-Actor named KVSproxy-pool-amazon-price-buybox, recordpool— works under LIMITED_PERMISSIONS; the user input always wins), then Apify datacenter, then Apify Residential (retries only on bot detection/transport). - Turn
includeAllOffersoff when you only need price + Buy Box — it saves one page load per ASIN. - Search/category URLs multiply output fast (
maxAsinsPerListUrl× URL count) — cap them while exploring. - Running behind a firewall of blocks? Raise
requestDelayMsto 2000–5000.
Get alerted on price changes and Buy Box flips
Monitor mode tells you what changed — combine it with the Apify Scheduler and a webhook to turn that into an alert:
- Save a task with
monitorMode: true, a stablewatchlistIdand your ASINs (or start from the ready-made example Watch Amazon price drops with a watchlist on the Examples tab). - In Apify Console, open the task → Schedule and pick an interval (hourly or daily works well).
- Add an integration on the task: Webhooks (or Slack/Zapier/Make via the Integrations tab) with the event
ACTOR.RUN.SUCCEEDEDpointing at your endpoint. - In the webhook handler, fetch the finished run's dataset (
GET /v2/actor-runs/<runId>/dataset/items) and alert only on items withchangeDetected: true— thechangesarray lists exactly what moved (e.g. price old → new, Buy Box seller old → new), andchangeSummarygives a one-line human summary.
No code? Use the dataset of the scheduled runs directly: every run carries the full diff, so a daily digest is just the latest dataset filtered to changeDetected: true.
Known limitations
- Amazon renders at most ~20–30 offers on the first All-Offers page;
maxOfferscaps what is parsed (first page only). isPrimeper offer is only reported when the row actually renders a Prime badge — otherwisenull, never a guessedfalse.- Seller IDs exist only where Amazon links the seller profile — Amazon itself often sells without a link (
sellerId: null, name still reported). - Verified marketplaces: de, com, co.uk, fr, it, es, ca, com.au, co.jp, in, nl, se, pl, com.be, com.mx, com.br, ae, sa (18). Others may work but are untested — report via the Issues tab.
Use with AI agents (MCP)
This Actor is MCP-ready and works as a structured Amazon price/Buy-Box tool for AI agents. Exact identity: cyprusapi/amazon-price-buybox.
Tool description: check Amazon ASINs on 18 marketplaces and return structured records with current price, list price, discount, coupon, stock, Buy Box winner (seller, ID, fulfillment), the full offer list, and — per watchlist — stored history snapshots and change detection.
Example prompt: "Check these three ASINs on amazon.com, tell me the Buy Box seller and the cheapest offer, and attach the price history from my 'main' watchlist." → input:
{"asins": ["…"], "marketplace": "com", "includeHistory": true, "watchlistId": "main"}
Output interpretation for agents:
price.value/price.currencyare numeric and marketplace-local — safe for arithmetic- Items with an
errorfield are failures — never charged, never count them as data changeDetectedis only meaningful in monitor mode; on first checks it isnull- A field set to
nullmeans "not rendered by Amazon" — do not treat it as zero or absence
Cost guidance: one ASIN check = one event (result / result-changed / result-unchanged); errors, offers, history and change detection are included.
FAQ, disclaimers, and support
- Is it legal? The Actor reads publicly available product and offer pages without login. You are responsible for complying with Amazon's Terms of Service and applicable law in your jurisdiction.
- Do I need proxies? Yes — residential proxies are strongly recommended; Amazon rate-limits datacenter IPs aggressively. Geo-pinned proxies per marketplace give correct local prices.
- Where does the history live? In a named key-value store
price-history-v2-<watchlistId>of the Actor's storage — it persists across runs and survives dataset expiration. Delete the store in the Console to reset a watchlist. - Found a bug or need another marketplace? Open an issue — selector maintenance is part of the product.