Amazon Bestsellers Scraper
Pricing
from $0.23 / 1,000 item extracteds
Amazon Bestsellers Scraper
Extract ranked Amazon Best Sellers, New Releases, Most Wished, and Most Gifted product lists.
Pricing
from $0.23 / 1,000 item extracteds
Rating
0.0
(0)
Developer
Hanna Nosova
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
8 days ago
Last modified
Categories
Share
Extract ranked product rows from public Amazon Best Sellers, New Releases, Most Wished For, and Most Gifted pages. Movers & Shakers URLs are reported as unsupported because Amazon no longer exposes public product-card markup on that route to anonymous HTTP clients. Export ASINs, ranks, titles, category provenance, prices, ratings, review counts, and product URLs to CSV, JSON, Excel, API, or MCP workflows.
At a glance
- Primary job: Monitor ranked Amazon category lists without building your own parser.
- Input: Public Amazon list/category URLs such as
https://www.amazon.com/Best-Sellers/zgbs. - Output: One row per ranked product plus explicit diagnostic rows for blocked, invalid, or empty inputs.
- Best for: Ecommerce research, rank monitoring, product discovery, merchandising checks, and BI enrichment.
Ready-to-run examples
Open a public example to inspect its input, run it, or reuse it as a task:
- Export Amazon Kitchen Best Sellers
- Monitor Amazon Toys Most Gifted Products
- Export Amazon Beauty Most Wished For
- Export Amazon Books New Releases
- Export Amazon Electronics Best Sellers
- Small smoke test:
startUrls: [{ "url": "https://www.amazon.com/Best-Sellers/zgbs" }],maxItems: 10. - Category monitoring: Use a specific category URL such as Books or Electronics and schedule daily runs.
- Launch tracking: Use a New Releases URL and compare ASIN/rank movement between dataset exports.
What data can you extract?
| Field | Description |
|---|---|
status | OK for product rows or ERROR for diagnostic rows. |
listType | Best Sellers, New Releases, Most Wished For, Most Gifted, or movers-and-shakers on unsupported diagnostic rows. |
marketplace | Amazon marketplace hostname such as www.amazon.com. |
category | Category/list title visible on the page. |
categoryUrl | Category/list URL used for the row. |
categoryPath | Visible breadcrumb/subcategory path when supplied by Amazon. |
position | Rank within the category/list page. |
asin | Amazon product ASIN. |
title | Product title from the list card. |
productUrl | Public Amazon product URL. |
imageUrl | Product image URL. |
price | Parsed displayed price when visible. |
priceText | Raw displayed price text. |
currency | Currency code derived from displayed price or marketplace. |
rating | Star rating when visible. |
reviewCount | Review count when visible. |
numberOfOffers | Offer count when visible. |
availability | Availability/status text when visible. |
inputUrl | Original user-provided URL. |
url | Product URL for product rows or source URL for diagnostic rows. |
scrapedAt | ISO timestamp when the row was saved. |
errorCode | Diagnostic code for error rows. |
error | Short error label. |
errorDescription | Human-readable diagnostic description. |
Input configuration
| Setting | JSON key | Use it for | Example |
|---|---|---|---|
| Start URLs | startUrls | Public Amazon Best Sellers, New Releases, Most Wished For, or Most Gifted category URLs. Movers & Shakers URLs return an UNSUPPORTED_LIST_TYPE diagnostic row. | https://www.amazon.com/Best-Sellers/zgbs |
| Maximum product rows | maxItems | Cap saved product rows and control spend. | 30 |
| Subcategory depth | subcategoryDepth | Reserved for bounded category discovery. | 0 |
| Include next page | includeNextPage | Reserved until unique Amazon continuation is proven. | false |
| Proxy country code | proxyCountryCode | Match marketplace-sensitive price/availability context. | US |
Example input
{"startUrls": [{ "url": "https://www.amazon.com/Best-Sellers/zgbs" }],"maxItems": 10,"subcategoryDepth": 0,"includeNextPage": false,"proxyCountryCode": "US"}
Example output
{"status": "OK","listType": "best-sellers","marketplace": "www.amazon.com","category": "Amazon Best Sellers","categoryUrl": "https://www.amazon.com/Best-Sellers/zgbs","categoryPath": ["Any Department"],"position": 1,"asin": "B0EXAMPLE1","title": "Example ranked product","productUrl": "https://www.amazon.com/dp/B0EXAMPLE1","imageUrl": "https://m.media-amazon.com/images/I/example.jpg","price": 19.99,"priceText": "$19.99","currency": "USD","rating": 4.7,"reviewCount": 1234,"numberOfOffers": null,"availability": null,"inputUrl": "https://www.amazon.com/Best-Sellers/zgbs","url": "https://www.amazon.com/dp/B0EXAMPLE1","scrapedAt": "2026-08-02T16:45:00.000Z","errorCode": null,"error": null,"errorDescription": null}
Who is it for
- Ecommerce sellers checking which products lead public Amazon category rankings.
- Retail analysts and brand teams monitoring rank, price, rating, and review-count movement.
- Affiliate publishers finding popular products for buying guides and category pages.
- Automation teams feeding bestseller snapshots into dashboards, alerts, or AI workflows.
Pricing
This Actor uses pay-per-event billing. A small Run started event is charged once per run, and the primary Item extracted event is charged only for each Amazon product row saved to the dataset. Diagnostic error rows for invalid URLs or blocked pages are preserved for troubleshooting and are not product rows.
For the current rates and volume tiers, open the live Apify Pricing tab.
Tips and limits
- Start with
maxItems: 10-30to confirm the marketplace and category return public rows. - Amazon page availability, prices, currency, and visible card fields can vary by marketplace and region.
- Diagnostic rows are saved for invalid URLs, Robot Check/Sorry responses, request failures, and pages where no product cards are detected.
- Product detail pages, seller profiles, reviews, carts, orders, and account-specific recommendations are outside this Actor's scope.
API usage
Node.js:
import { ApifyClient } from "apify-client";const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor("fetch_cat/amazon-bestsellers-scraper").call({startUrls: [{ url: "https://www.amazon.com/Best-Sellers/zgbs" }],maxItems: 10});console.log(run.defaultDatasetId);
Python:
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("fetch_cat/amazon-bestsellers-scraper").call(run_input={"startUrls": [{ "url": "https://www.amazon.com/Best-Sellers/zgbs" }],"maxItems": 10,})print(run["defaultDatasetId"])
cURL:
curl "https://api.apify.com/v2/acts/fetch_cat~amazon-bestsellers-scraper/runs?token=$APIFY_TOKEN" \-H 'Content-Type: application/json' \-d '{"startUrls":[{"url":"https://www.amazon.com/Best-Sellers/zgbs"}],"maxItems":10}'
MCP and AI agents
Use this Actor from MCP-compatible tools through the official Apify MCP Server.
$claude mcp add --transport http apify "https://mcp.apify.com?tools=fetch_cat/amazon-bestsellers-scraper"
Example MCP server configuration:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com","headers": {"Authorization": "Bearer YOUR_APIFY_TOKEN"}}}}
Example prompts:
- "Run fetch_cat/amazon-bestsellers-scraper for the Amazon US Best Sellers root with maxItems 20 and summarize the top categories."
- "Compare today's top 10 product ASINs from this bestseller dataset with yesterday's dataset and highlight rank changes."
FAQ
Can this Actor scrape Amazon product detail pages?
No. It focuses on ranked public list pages. Use a product-detail Actor for deeper product attributes.
Why are price, rating, or review fields sometimes empty?
Amazon does not show every commerce field on every list card. The Actor preserves nulls instead of inventing values.
Does it return diagnostic rows?
Yes. Invalid URLs, Robot Check/Sorry pages, failed requests, and parse-empty pages are saved with status: "ERROR" and an error code.
Can I schedule rank monitoring?
Yes. Schedule the same category URL daily or hourly and compare ASIN + position changes across datasets.
Related actors
More Amazon scrapers
Support
Questions, bugs, or feature requests? Open an issue on the Actor page in Apify Console and include your run ID and input.