Amazon Best Sellers Scraper & Rank Tracker
Pricing
from $1.40 / 1,000 result items
Amazon Best Sellers Scraper & Rank Tracker
Scrapes Amazon Best Sellers, New Releases, Most Wished For and Most Gifted grids per category URL — structured prices, change tracking, errors never charged.
Pricing
from $1.40 / 1,000 result items
Rating
5.0
(1)
Developer
Torchtechnology LTD
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
3 days ago
Last modified
Categories
Share
What does this Actor do?
Amazon Best Sellers Scraper extracts the ranked product charts of any Amazon category — Best Sellers, Movers & Shakers, New Releases, Most Wished For, and Most Gifted — 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. For every ranked product you get position, ASIN, name, price as a structured number with the marketplace's own currency, star rating, review count, thumbnail, and product URL — and for Movers & Shakers the rank change in percent Amazon reports. Optional change tracking compares every category against its previous run and reports climbers, new entries, and drop-outs — 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.
When to use this Actor
- Trend detection — "Which products entered the top 100 in category X this week?" → run daily/weekly with
trackChanges: trueand readpositionDelta,isNewEntry,droppedOut. For the fastest movers right now, scrape the Movers & Shakers chart and readrankChangePercent. - Assortment & market research — pull the top products of any category, filtered by price band, rating, or review count (
minPrice/maxPrice/minStars/minReviews). Filters are applied before charging. - Competitive monitoring — track specific subcategories over time via scheduled runs.
When not to use it: you need full product detail pages (use a product-data actor) or review texts (use a reviews actor).
Quickstart (API)
curl -X POST "https://api.apify.com/v2/acts/YOUR_USERNAME~amazon-bestsellers/run-sync-get-dataset-items?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"categoryUrls": ["https://www.amazon.com/gp/bestsellers/beauty"],"maxItemsPerCategory": 100,"trackChanges": true}'
Or in the Console: paste one or more category URLs, click Start, download as JSON/CSV/Excel/XML.
Input reference
| Field | Type | Default | Description |
|---|---|---|---|
categoryUrls | string[] | — | Chart URLs: /gp/bestsellers/… or /zgbs/…, /gp/movers-and-shakers/…, /gp/new-releases/…, /gp/most-wished-for/…, /gp/most-gifted/…. Multiple URLs and marketplaces per run are fine. Optional when chartType + marketplace are set. |
chartType | string | — | bestsellers | movers-and-shakers | new-releases | most-wished-for | most-gifted — builds the chart URL for you. |
marketplace | string | — | One of the 18 marketplace codes (e.g. de, com, co.jp) — used with chartType. |
categorySlug | string | — | Optional category path appended to the chart URL, e.g. beauty or electronics/172541. Empty = chart root page. |
maxItemsPerCategory | integer | 100 | Cap per category (Amazon renders max. 100 per chart). |
includeSubcategories | boolean | false | Also crawl child categories discovered in the nav tree. |
maxSubcategoryDepth | integer | 1 | Tree depth when subcategory crawl is enabled (1–3). |
minStars | number | 0 | Only items with ≥ this rating. |
minReviews | integer | 0 | Only items with ≥ this many reviews. |
minPrice / maxPrice | number | 0 | Price band in marketplace currency. |
trackChanges | boolean | false | Rank-diff against the previous snapshot of each category. Snapshots persist across runs and always store the unfiltered grid. |
proxyConfiguration | object | bundled geo proxies | Optional — the actor ships with bundled geo proxies per marketplace (no setup needed, we cover the cost). Enable this only to force your own or Apify proxies instead. |
proxiesByMarketplace | object | — | Bring-your-own geo-pinned proxies per marketplace ({"co.uk": ["http://…"]}). Overrides the bundled pool for the listed marketplaces. |
Output
One dataset item per ranked product:
{"position": 1,"asin": "B08P4YPB8Q","name": "Maybelline New York Sky High Mascara …","url": "https://www.amazon.com/dp/B08P4YPB8Q","thumbnailUrl": "https://m.media-amazon.com/images/I/…jpg","price": { "value": 9.31, "currency": "USD" },"stars": 4.4,"reviewsCount": 37118,"numberOfOffers": null,"rankChangePercent": null,"chartType": "bestsellers","categoryName": "Beauty & Personal Care","categoryUrl": "https://www.amazon.com/gp/bestsellers/beauty","marketplace": "com","input": "https://www.amazon.com/gp/bestsellers/beauty","previousPosition": 2,"positionDelta": 1,"isNewEntry": false,"scrapedAt": "2026-08-16T10:33:30Z"}
| Field | Meaning |
|---|---|
position | Rank in the chart (from the rank badge; DOM order as fallback; null if not observable) |
asin, name, url, thumbnailUrl | Product identity; url is the canonical /dp/ link |
price | {value, currency} — numeric, in the marketplace's own currency |
priceString | Price exactly as rendered on the page |
stars, reviewsCount | Rating and review count as rendered on the card |
numberOfOffers | Offer count when Amazon renders it, otherwise null |
isPrime | true when a Prime badge is rendered on the card; null when the grid shows no Prime info (never a guessed false) |
badges | Visible badge texts on the card (e.g. "Bestseller"); usually empty on chart grids |
rankChangePercent | Movers & Shakers only: Amazon's "% increase in sales rank" figure as an integer (e.g. 256 for "+256%"); always null on the other charts |
chartType | bestsellers | new-releases | most-wished-for | most-gifted | movers-and-shakers |
categoryName | The category name only (no chart label), localized as rendered by the marketplace — e.g. Kosmetik for amazon.de …/bestsellers/beauty. Use it to group items when batching many categories in one run |
input | The start URL this category was reached from (also for subcrawled categories) |
previousPosition, positionDelta, isNewEntry | Only with trackChanges: true. positionDelta > 0 = climbed. All null on the first (baseline) run |
scrapedAt | UTC timestamp of capture |
null means "not rendered by Amazon" — never a guess. If Amazon skips positions in a grid, the gap is reported in the RUN_SUMMARY key-value record, never silently filled. RUN_SUMMARY also contains per-category item counts and, with change tracking, changes: {newEntries, droppedOut, basedOnSnapshotAt}.
Error items (never charged)
Failures are pushed as dataset items for transparency, but no result event is charged for them:
error | Meaning | Typical action |
|---|---|---|
invalid_url | Not a supported Amazon marketplace URL | Fix the URL |
category_not_found | Amazon returned 404 | Check the category path |
no_results_found | Page rendered no product cards | Retry later |
category_unavailable | Amazon renders the URL as an empty "undefined" category page — the bare slug no longer resolves | Use the node-id URL form: …/gp/bestsellers/<slug>/<nodeId> (e.g. https://www.amazon.de/gp/bestsellers/electronics/562066) |
blocked | Bot-detection page after automatic retries across the proxy tier chain (own pool → Apify DC → Apify residential) | Use residential / geo-pinned proxies |
transport | Navigation failure (proxy/timeout) | Simply retry |
Pricing
Pay-per-event: one result event per product item pushed. Error items are free. Filters are applied before charging. A full top-100 category costs 100 result events; a daily change-tracked watchlist of 10 categories costs 1,000 events/day. See the Pricing tab for the current event price.
Tips
- Batch your categories into one run — per-run startup cost is shared across all URLs.
- Use
maxItemsPerCategorywhile exploring to cap spend. - Subcategory crawl multiplies output fast (one root can mean 30+ categories). Combine with filters and caps.
- For correct prices, the proxy exit country must match the marketplace — the bundled pool is already geo-pinned per marketplace; if you bring your own, use
proxiesByMarketplaceor Apify Residential with country targeting. - Schedule the Actor (e.g. daily) with
trackChanges: trueto build a trend time series; snapshots persist between runs.
Known limitations
- Movers & Shakers availability: Amazon gates this chart more aggressively than the others — anonymous sessions sometimes get no product grid at all (the page renders but stays empty). The actor renders the page in a real browser and extracts the grid whenever Amazon serves it, including the
rankChangePercentfigures; when Amazon withholds the grid, you get an unchargedno_results_founderror item instead of being charged for nothing. - Dead bare slugs (e.g.
/gp/bestsellers/ceon amazon.de): Amazon has stopped resolving some bare category slugs server-side — the page loads with HTTP 200 but the category renders as "undefined" with no product grid at all, so there is no markup any scraper could parse. The same chart still works via its node-id URL (e.g.https://www.amazon.de/gp/bestsellers/electronics/562066for Elektronik & Foto). The Actor detects this case and returns an unchargedcategory_unavailableerror item instead of a genericno_results_found; pass the node-id form of the URL to get data. - Amazon caps every chart at 100 visible items per category — this is a platform limit, not an Actor limit.
- 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 your results via the Issues tab.
Use with AI agents (MCP)
This Actor is MCP-ready and works as a structured Amazon chart tool for AI agents. Exact identity: cyprusapi/amazon-bestsellers.
Tool description: fetch ranked Amazon chart products (Best Sellers, Movers & Shakers, New Releases, Most Wished For, Most Gifted) from 18 marketplaces and return structured records with rank, ASIN, title, structured local-currency price, rating, review count, and chart context — Movers & Shakers items additionally carry rankChangePercent. Optionally diffs against the previous run (trackChanges).
Example prompt: "Scrape the US Amazon Best Sellers chart for Electronics, top 20, with rank, ASIN, title, price, rating, and review count." → input:
{"chartType": "bestsellers", "marketplace": "com", "categorySlug": "electronics", "maxItemsPerCategory": 20}
Output interpretation for agents:
positionis the chart rank,1is the top itemasin+urlidentify the product for follow-up enrichmentprice.value/price.currencyare numeric and marketplace-local — safe for arithmeticpositionDelta> 0 means the product climbed since the previous runrankChangePercentis only set on Movers & Shakers items — Amazon's own "% increase in sales rank" figure- Items with an
errorfield are failures — they are never charged and should not be counted as data - A field set to
nullmeans "not rendered by Amazon" — do not treat it as zero or absence of the attribute
Cost guidance: one product = one result event; errors, filters, and the first baseline snapshot cost nothing. Lower maxItemsPerCategory when only the chart top is needed.
FAQ, disclaimers, and support
- Is it legal? The Actor reads publicly available chart pages. You are responsible for complying with Amazon's Terms of Service and applicable law in your jurisdiction.
- Do I need proxies? No — the actor ships with bundled geo-pinned residential proxies per marketplace, and we cover their cost. You only touch the proxy settings if you want to force your own pool or Apify Proxy instead.
- Found a bug or need another marketplace or chart type? Open an issue — selector maintenance is part of the product.