Amazon Bestsellers Scraper — Full Product Row per Rank
Pricing
from $1.50 / 1,000 bestsellers
Amazon Bestsellers Scraper — Full Product Row per Rank
Name an Amazon category or paste a Best Sellers link and get every rank as a full product row: price, buy box, stock, rating, reviews, variants, images and specs. From $1.50 per 1,000 bestsellers, one flat fee, no add-on events. Blocked or empty categories are never charged.
Pricing
from $1.50 / 1,000 bestsellers
Rating
0.0
(0)
Developer
Steadyfetch Team
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 hours ago
Last modified
Categories
Share
Amazon Bestsellers · Flat Fee
Name an Amazon category and get the full product row for every rank — price, buy box, stock, rating, reviews, variants, bestseller ranks, images and the full specifications table, all in one row. One flat fee per bestseller. There is no second event to pay for, and blocked or empty categories are never charged.
Type electronics, or paste a Best Sellers link. Get finished product objects back, in rank order — not a name, a thumbnail and a link you then have to feed somewhere else.
Unofficial. This actor is not affiliated with, endorsed by, or sponsored by Amazon. "Amazon" and all related marks are trademarks of Amazon.com, Inc. or its affiliates. It reads only the public Best Sellers pages an ordinary browser sees, and never signs in.
Output
One row per rank: every field the product page carries, plus the list context. This is a real row from a verified run, trimmed with … where a field is long:
{"rank": 2,"listType": "bestsellers","listCategory": "electronics","listCategoryName": "Electronics","listCategoryPath": ["Electronics"],"listPage": 1,"asin": "B0GJTFXNRX","marketplace": "amazon.com","url": "https://www.amazon.com/dp/B0GJTFXNRX","title": "Apple AirTag (2nd Generation): Tracker for Keychain, Wallet, and More","brand": "Apple","price": 29.0,"currency": "USD","inStock": true,"buyBoxSeller": "Amazon.com","rating": 4.5,"reviewCount": 9466,"images": ["https://m.media-amazon.com/images/I/61Qd9Z9caRL._AC_SL1200_.jpg", "…"],"variants": [],"categoryPath": ["Electronics", "GPS & Navigation"],"bestSellersRank": [{ "rank": 2, "category": "Electronics" }],"specs": { "Brand": "Apple", "…": "…" },"scrapedAt": "2026-08-27T00:00:00.000Z","charged": true,"status": "ok"}
Browse the full live example dataset → — one real run of the current code, unedited: the Electronics best sellers, two delivered product rows with the Sold-by cluster populated, one uncharged not_a_product row where Amazon's own subscription plan sits at rank #1, and the run's own summary row last.
rank is the number printed on the Best Sellers badge. listCategoryPath is the category's own place in Amazon's tree, read off the page — so a subcategory row tells you it is ["Electronics", "Headphones"] without you having to look it up. A product ranked in two of your categories is returned once, tagged with the first list that surfaced it, and charged once.
Prices and review counts are parsed in the page's own locale, so 4,4 von 5 Sternen is a rating of 4.4 and (4.295) on amazon.de is four thousand reviews, not four. price can legitimately be null — Amazon does not always print one, and that row still carries the title, rating, ranks, images and specs, with priceNote saying what the page showed instead. The Sold-by cluster (buyBoxSeller, buyBoxSellerId, fulfilledByAmazon, soldByAmazon) works the same way — when a served page names no seller, those four come back null and buyBoxNote says so on that row. And because best-seller lists are full of Amazon's own devices: on those pages specs are read from the Technical-details grid, while categoryPath and bestSellersRank come back empty because Amazon renders neither there — that is the page, not a parsing gap.
The last row of every run is a summary carrying categories, ok, categoryMisses, productMisses, chargedRows and unchargedRows — so the invoice reconciles from the dataset itself, without opening the billing tab.
For AI agents & LLMs — copy this block
Actor: steadyfetch/amazon-bestsellers-scraperInput: { "categories": ["electronics"], "maxItemsPerCategory": 20 }Output: one row per rank; charged rows have status "ok" and charged true.Pricing: one priced event ("bestseller"), all-inclusive, no start fee, no add-ons.Misses: no_products / blocked / not_found / unavailable_in_marketplace / not_a_product /parse_failed / source_unavailable all ship as rows with charged:false — read `status`.Notes: 60 ranks per category is the hard maximum (see below). Limits are hard limits.Omit an optional field or send it as null — both mean "use the default", the"marketplace" and "list" dropdowns included. A value they do not offer is notsilently swapped for the default: the run returns one uncharged row naming thevalues that work. "categories" is the one field that must carry a real value.Safe to resurrect: a resumed run re-delivers and re-charges nothing.
Works over the Apify API, MCP, n8n and Make. Running it with an empty category list returns uncharged sample rows, so a workflow can be wired up and tested before it costs anything.
What one ranked product costs
One priced event, Bestseller, and nothing else. No start fee, no per-category fee, no per-field fee, no "detail" upcharge. The store header reads from $1.50/1,000 bestsellers.
| Your Apify plan | Price per bestseller | Per 1,000 bestsellers |
|---|---|---|
| Apify Free plan | $0.006 | $6.00 |
| Bronze | $0.0035 | $3.50 |
| Silver | $0.0022 | $2.20 |
| Gold, Platinum, Diamond | $0.0015 | $1.50 |
The header shows the Gold price. The whole ladder is printed here because an actor whose promise is billing honesty cannot have an undisclosed tier ladder.
What can fail, and what a failure costs you: nothing. The two misses you will actually see are no_products (the page loaded and that category has no ranked list — usually a department name that does not exist in that store) and blocked (a robot check in front of every route we tried). Both ship as real rows carrying charged: false, as do not_found, unavailable_in_marketplace, not_a_product, parse_failed, source_unavailable and invalid_input. A row is charged only if it is a product.
60 ranks per category — and why not 100
Amazon's Best Sellers pages advertise a top 100 and put 60 of it in the page: ranks 1–30 on page one, ranks 51–80 on page two. Ranks 31–50 and 81–100 are filled in by the browser after the page loads, so they are not in the HTML at all — nobody can return them without driving a real browser, and we are not going to bill you for a browser.
So the cap is 60, the default is 60, and this paragraph exists instead of a "top 100" claim we cannot keep. Want more of a department? Pass its subcategories — each one is its own list of 60, and subcategory links work as input exactly like the top-level ones.
Full product detail on every rank — on purpose
This actor returns the full product object for each rank: the same row Amazon Product Scraper · Flat Fee returns, plus the rank, the list, the category and the page it came from. There is deliberately no cheaper "list rows only" mode — that would need a second price, and this family sells one thing at one price.
What you give it
| Input | Example |
|---|---|
categories (one per line) | electronics, kitchen, or https://www.amazon.com/gp/bestsellers/kitchen/ |
marketplace | amazon.com (default), amazon.co.uk, amazon.de |
list | Best Sellers (default), New Releases, Most Wished For |
maxItemsPerCategory | 60 (default and maximum) |
A pasted link decides its own store and its own list, so you can mix amazon.de and amazon.com categories in one run. Both URL shapes Amazon serves work — /gp/bestsellers/electronics/ and the /Best-Sellers-Electronics/zgbs/electronics/ alias — and so do subcategory links.
Department names are per store. electronics is a department on amazon.com and amazon.co.uk; on amazon.de the same shelf is called something else. If a name does not exist in the store you picked, you get an uncharged row saying exactly that rather than a silently empty run.
Movers & Shakers is not offered. Amazon builds that grid in the browser: the page comes back at 330 KB with a heading and zero rows in it. We measured it, and we would rather say so than sell an always-empty list.
Error codes — what each uncharged row means
status | What happened | Charged | Worth re-running |
|---|---|---|---|
ok | Complete product row | yes | — |
no_products | The page loaded but that category has no ranked list — usually a department name that does not exist in that store | no | no |
blocked | Amazon asked us to prove we are not a robot, on every route we tried | no | yes |
not_found | A ranked product's page was gone by the time we fetched it | no | no |
unavailable_in_marketplace | A ranked id was not served in that country's catalogue | no | no |
not_a_product | The rank is one of Amazon's own subscription plans, not a product listing — it has no price, seller or reviews of its own | no | no |
parse_failed | Amazon served a page in a layout we do not recognise. That one is on us | no | no |
source_unavailable | Amazon dropped or throttled the request | no | yes |
invalid_input | A category line could not be read — the row says what to type instead | no | no |
cap_reached / stopped_at_limit | A limit you set stopped the run; earlier rows were delivered normally | no | see resumeCursor |
Limits are exact
Max products per category, Max products (whole run), Max run seconds and the run's own maximum total charge all stop the run cleanly: it still finishes as SUCCEEDED, the summary row names the one setting that stopped it, and resumeCursor lists the categories still to do. A run with room for two products does not buy a second page of ranks it cannot deliver.
And they stay exact when the run moves. Apify moves long runs between servers, and it restarts the container when it does. This actor re-reads its own results before it does anything else, so a moved or resurrected run does not fetch, deliver or charge for a single product you already have — it picks up at the next rank. Your product limit counts the rows you already received, so a run capped at 100 gives you 100, not 200. If a charge was interrupted between a row landing and being billed, that one charge is completed, and never made twice.
FAQ
How do I scrape Amazon best sellers? Type the department name, or paste the Best Sellers link. No Amazon account, no PA-API keys, no seller credentials.
Can I get New Releases and Most Wished For too? Yes — same flat fee, same row. Pick the list, or paste one of those links.
Why only 60 ranks? Because 60 is what Amazon puts in the page. See the section above; ranks 31–50 and 81–100 are browser-side.
What does it cost per 1,000 bestsellers? From $1.50/1,000 on Gold and above; see the ladder above. Nothing else is billable.
Why is a price null, or in the wrong currency? Amazon did not print one, or served the page from an unexpected region — priceNote says which. The delivery location is pinned to the marketplace's own country to keep this rare.
Honesty contract
Amazon changes its pages often. When a category can't be listed, or an item can't be fetched or parsed, we return it with an honest status and never charge for it.
This actor may fail when the platform changes things — failed items are never charged.
Issues are answered in about three hours during working hours. If a field ever comes back empty that should not be, open an issue with the category and it gets fixed.
Steadyfetch Amazon suite
One actor per entry point, the same product row underneath. All-inclusive pay per event, no start fee, charged only on delivery.
| What you paste | Actor |
|---|---|
| ASINs or product URLs | Amazon Product Scraper · Flat Fee |
| Search keywords | Amazon Search Scraper · Flat Fee |
| A Best Sellers category | this actor |
| A seller ID or storefront | Amazon Seller Scraper · Flat Fee |
The rest of the steadyfetch shelf — same contract everywhere: all-inclusive pay per event, no start fee, charged only on delivery.
| Family | Actors |
|---|---|
| Ad creative intelligence | Facebook · Google Ads video · TikTok · LinkedIn · Google Ads text & OCR |
| Trends & keywords | Google Trends · Trends Now · Breakout keywords · Autocomplete keywords · Keyword volume & CPC · Social trends |
| YouTube transcripts | YouTube videos · YouTube channels |
| Reel transcripts · Profile posts | |
| Jobs | Indeed · Career sites by domain · Glassdoor · Multi-board · Google Jobs |
| Amazon | Products · Search · Bestsellers · Sellers |
| Any media file | Speech to Text · any link or file |
Feedback & support
Open an issue on the actor's Issues tab with the category you used. Fields that come back empty when they should not are treated as bugs, not as expected behaviour.