Amazon Best Sellers Scraper
Pricing
from $3.54 / 1,000 results
Amazon Best Sellers Scraper
Scrape public Amazon Best Sellers and New Releases category pages and get ranked product records with ASIN, title, category, marketplace, and product path. The Actor preserves the rank displayed on each card, so gaps caused by items loaded only after scrolling remain visible.
Pricing
from $3.54 / 1,000 results
Rating
0.0
(0)
Developer
Axiom Works
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Returns: one row per ranked product with rank, asin, title, price, rating, reviewCount, categoryTitle, and sourceUrl.
Input: {"categories":["electronics"],"marketplace":"amazon.com","maxItems":30}
Best for: category research, assortment comparisons, and repeat ranking checks.
{"rank":1,"asin":"B08JHCVHTY","title":"blink plus plan with monthly auto-renewal","categoryTitle":"Amazon Best Sellers: Best Electronics","price":"$11.99","rating":4.4,"sourceUrl":"https://www.amazon.com/gp/bestsellers/electronics/?pg=1"}
This Amazon scraper reads public ranking charts. Use it as an Amazon API for structured Best Sellers and New Releases records across supported marketplaces. The short sample above is from a local run; Amazon's ranks and visible fields can change.
What does Amazon Best Sellers Scraper do?
Amazon Best Sellers Scraper reads public category ranking pages and turns the visible product cards into structured records. It supports Best Sellers and New Releases lists on the ten marketplaces shown in the input schema. A run can cover several category slugs or several starting URLs. Turn on includeSubcategories to add immediate child charts linked on each starting page, up to maxSubcategories. This is off by default and still respects the run-wide maxItems cap. Use category slugs, numeric IDs, or nested category paths such as electronics/281407 when you want the Actor to construct ranking URLs for one marketplace and one list type. Use starting URLs when you already know the exact category pages you need, including pages from different supported marketplaces.
The Actor requests static HTML at a modest pace. It reads Amazon's displayed rank from each card, rather than assigning a new rank by position in the dataset. This matters because a static page may expose fewer products than the complete list. For example, page one can show ranks 1 through 30 while some additional cards load only after browser scrolling. A second static page may begin at rank 51. Gaps in the returned ranks reflect what the page supplied; they do not imply that the missing ranks represent unavailable products.
Results are deduplicated within a run by marketplace, list type, category, and ASIN. A product appearing on two different lists or in two categories remains a distinct ranking record, because its context and rank can differ. The maxItems setting is a strict output cap across all requested pages. The Actor stops collecting after it saves that many unique items. Malformed input fails with a validation message. A well-formed chart that is empty or remains blocked finishes successfully with zero items and a status message asking you to check the category URL, category slug, or proxy country. Other targets can still return results.
What data can you get?
The dataset has these fields. A nullable field is returned as null when the card does not show it. The productPath is copied from the card link before its referral suffix and query; sourceUrl identifies the actual ranking page requested.
| Field | Meaning |
|---|---|
id | Stable identifier combining marketplace, list type, category, and ASIN. |
sourceUrl | URL of the ranking page that supplied the record. |
listType | bestsellers or new-releases. |
category | Category slug or category ID from the ranking URL. |
categoryTitle | Human-readable title shown in the ranking page title. |
marketplace | Marketplace domain, such as amazon.com. |
rank | Rank printed on the product card. |
asin | Product identifier printed in the card markup. |
title | Product title shown on the ranking page. |
productPath | Product link path copied from the card before its referral suffix and query. |
imageUrl | Image URL from the product card, when present. |
price | Displayed price text, when present. |
priceValue | Numeric value parsed from the displayed price. |
currency | Currency code inferred from the displayed price symbol. |
rating | Displayed star rating, when present. |
reviewCount | Displayed number of ratings or reviews. |
scrapedAt | UTC timestamp when the card was parsed. |
Price, rating, review count, and image availability depend on the page and product. A missing price can mean the page omitted it; it is not a zero price. Prices and currency are page observations, not a separate product offer lookup. Amazon may localize a page according to the request's region, so check the currency value before comparing prices from different runs. This Actor does not visit product detail pages and does not claim stock, shipping, seller, or historical price data.
How to use
To collect a common category, enter its slug in categories, choose a marketplace, and choose the ranking listType. electronics, books, and kitchen are examples of slugs. For a quick agent check, use {"categories":["electronics"],"maxPagesPerCategory":1,"maxItems":1}. Start with one page and a small maxItems value to check the fields available for your category. Increase maxPagesPerCategory if you need more of the ranking, keeping in mind that static HTML may omit cards that the site inserts on scroll.
For an exact ranking page, paste its URL into startUrls. Supported forms include /gp/bestsellers/<category>/, /gp/new-releases/<category>/, /zgbs/<category>/, and pasted chart URLs such as /Best-Sellers-Electronics/zgbs/electronics/281407/ref=.... Locale prefixes before /gp/ are also accepted. Each URL must use HTTPS and one of the supported Amazon marketplace hosts. The Actor reads the final category ID from nested chart URLs and normalizes the page number query for each requested page. If you enable child charts, it reads the page sidebar and visits immediate child links after the starting chart. URLs for product pages, search results, or unsupported hosts are rejected with a clear error.
The default proxy setting uses Apify residential proxy with a country that matches the chosen marketplace when all target URLs use the same marketplace. You can change proxyConfiguration in the input. The Actor spaces requests and retries blocked responses with a fresh proxy session and backoff. It does not complete CAPTCHAs. If Amazon continues to block a page, that page contributes no placeholder records.
Input
| Input | Description | Default |
|---|---|---|
categories | Category slugs or numeric category IDs to collect when startUrls is empty. | Empty; the Console prefill suggests electronics. |
startUrls | Exact supported ranking category URLs; takes precedence over categories. | Empty. |
marketplace | Marketplace used to build URLs from category slugs. | amazon.com. |
listType | Ranking used with category slugs. | bestsellers. |
maxPagesPerCategory | Maximum pages for each target, from 1 to 5. | 2. |
maxItems | Maximum saved records across the run, from 1 to 10000. | 50. |
includeSubcategories | Add immediate child charts linked from each starting page. | false. |
minRating | Minimum displayed star rating, 0 to 5. Zero disables filtering. | 0. |
minReviewCount | Minimum displayed rating/review count. Zero disables filtering. | 0. |
maxSubcategories | Maximum child charts to add across the run, from 1 to 50. | 10. |
proxyConfiguration | Apify Proxy configuration for target requests. | Residential proxy. |
A basic input for one category is:
{"marketplace": "amazon.com","categories": ["electronics"],"listType": "bestsellers","maxPagesPerCategory": 1,"maxItems": 30}
For a New Releases page, use startUrls instead of category slugs:
{"startUrls": [{ "url": "https://www.amazon.com/gp/new-releases/electronics/" }],"maxPagesPerCategory": 1,"maxItems": 7}
The URL example asks for up to seven unique results. If seven valid cards exist, the dataset contains seven items. If the page yields fewer valid cards, the dataset contains fewer. The limit applies to saved records, not to a rank threshold. A record at rank 51 can therefore be included in a larger run that requests a second page.
Output
Each dataset item is one product in one ranking context. This is an example from a local Best Sellers run; product descriptions and page content can change between runs:
{"id": "amazon.com:bestsellers:electronics:B0DN45YMP6","sourceUrl": "https://www.amazon.com/gp/bestsellers/electronics/?pg=1","listType": "bestsellers","category": "electronics","categoryTitle": "Amazon Best Sellers: Best Electronics","marketplace": "amazon.com","rank": 26,"asin": "B0DN45YMP6","title": "JBL Vibe Beam 2 - Noise Cancelling Earbuds - Black | JBL Pure Bass sound, Active Noise Cancelling with Smart Ambient, 4 mics for crisp, clear calls, Water and dust resistant","productPath": "/JBL-Vibe-Beam-Cancelling-Technology/dp/B0DN45YMP6","imageUrl": "https://images-na.ssl-images-amazon.com/images/I/618f5yBk26L._AC_UL300_SR300,200_.jpg","price": null,"priceValue": null,"currency": null,"rating": 4.1,"reviewCount": 7368,"scrapedAt": "2026-10-01T20:24:18.513Z"}
The example illustrates the output shape and a source page that omitted price from the parsed card during this local run. A later run may have different ranks, prices, products, timestamps, or null fields. The output is current page data, not an assertion that a product is permanently a new release or that its rank remains stable. Save the dataset from each run if you need to compare rankings over time; the Actor does not maintain a history across runs.
A run with includeSubcategories: true and maxSubcategories: 1 returned an additional record from the first Electronics child chart. Its category was 281407, its categoryTitle was Amazon Best Sellers: Best Electronics Accessories & Supplies, and its sourceUrl pointed to the nested /zgbs/electronics/281407/ chart. The child chart is read only when the option is enabled.
A local Electronics test with minRating: 4.5, minReviewCount: 100, and maxItems: 7 saved seven records; all had ratings of at least 4.5 and counts above 100.
Set minRating and minReviewCount to create a shortlist before saving records. For example, {"categories":["electronics"],"minRating":4.5,"minReviewCount":100,"maxItems":7} asks for seven matching records, subject to page limits and available cards. Both thresholds must match when enabled. A missing rating or count fails its enabled threshold; zero leaves that field unfiltered. Filtered cards are not saved or charged, and the original Amazon rank is retained. The Actor can still fetch pages containing excluded cards. If no cards match, it succeeds with zero items and asks you to lower the thresholds or choose another chart.
Nested paths work with both list types. {"categories":["electronics/281407"],"maxItems":1} requests the Electronics Accessories & Supplies chart directly. The category field remains the final path component, 281407, as it does for the equivalent starting URL. Category paths are passed to Amazon without guessing a department name from a product ASIN. Empty components, query strings, and arbitrary external URLs are invalid category inputs; use startUrls for complete chart URLs.
How much does it cost?
The Actor is charged per result saved to the dataset. The maxItems input caps the number of records that can be saved and charged in a run. The exact current rate and billing details are shown on the Actor's Pricing tab. A page that yields no records does not create result events. A record is charged once when it is saved, even if a later page repeats the same product in the same ranking context.
Use with AI agents (MCP)
Apify's MCP server lets an AI agent find and call this Actor using its input and output schemas. Configure the MCP endpoint for the Store path axiomworks/amazon-sellers-scraper:
https://mcp.apify.com/?tools=axiomworks/amazon-sellers-scraper
Example prompts:
- "Collect up to 20 products from Amazon.com electronics Best Sellers and return rank, title, ASIN, and product path."
- "Read the Amazon.com electronics New Releases list and show rank, price, currency, and rating for the first seven saved products."
- "Collect one page each for books and kitchen, then group the returned records by category and source URL."
Integrations and API
Use the Apify API client to start a run and read the dataset. Replace the actor ID and token in the examples with your own authorized values. Store tokens in environment variables or your integration's secret manager; the Actor input does not require Amazon credentials.
Python:
from apify_client import ApifyClientimport osclient = ApifyClient(os.environ["APIFY_TOKEN"])run = client.actor("axiomworks/amazon-sellers-scraper").call(run_input={"categories": ["electronics"],"marketplace": "amazon.com","maxItems": 20,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["rank"], item["title"], item["sourceUrl"])
JavaScript:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('axiomworks/amazon-sellers-scraper').call({categories: ['electronics'],marketplace: 'amazon.com',maxItems: 20,});const { items } = await client.dataset(run.defaultDatasetId).listItems();for (const item of items) {process.stdout.write(`${item.rank}: ${item.title} (${item.sourceUrl})\n`);}
cURL:
curl -X POST 'https://api.apify.com/v2/acts/AxiomWorks~amazon-sellers-scraper/run-sync-get-dataset-items' \-H "Authorization: Bearer $APIFY_TOKEN" \-H 'Content-Type: application/json' \-d '{"categories":["electronics"],"marketplace":"amazon.com","maxItems":20}'
The synchronous endpoint is convenient for a small run. For longer runs, start the Actor asynchronously and fetch items from its default dataset after it finishes. Keep the source URL and extraction timestamp when moving records into a spreadsheet, database, or dashboard; those fields explain where and when each observation was made.
FAQ
Why are some ranks missing? Amazon's static HTML can omit cards that load after scrolling. The Actor reports printed ranks from cards actually returned by the requested pages. It does not invent records for gaps.
Why is a price null? Some product cards do not display a price, or a page variant may use a different presentation. The Actor returns null rather than inventing a price. The same principle applies to rating, review count, image, and currency.
Can I mix marketplaces? Yes, with supported startUrls. Category slugs use the single marketplace input. For a mixed-marketplace run, provide explicit URLs and review each record's marketplace and currency fields.
What happens if Amazon blocks a page? The Actor retries blocked HTTP responses or CAPTCHA pages with backoff and a fresh proxy session. It never solves a CAPTCHA. After retries are exhausted, it warns and moves on without creating error items.
Can I get seller information or product details? This Actor reads ranking cards only. It does not open product detail pages and does not output seller identities, availability, or shipping terms.
Is it legal to scrape Amazon?
The Actor reads public ranking pages, and you are responsible for deciding whether your use complies with applicable law and Amazon's terms. Amazon's terms may restrict automated access. Consider the volume, purpose, jurisdiction, and handling of the resulting data for your use case. This Actor is an independent tool and is not affiliated with or endorsed by Amazon. It does not access accounts, authenticated pages, or private customer data.
Feedback
If a supported ranking page returns no records, or a field that appears on the page is consistently missing, share the marketplace, category URL, list type, and approximate run time when reporting the problem. A short sample of the page layout or a run log can help identify a markup change. Do not include account credentials or private data in a report. Suggestions for supported ranking categories and clearer field descriptions are welcome through the Actor's Apify feedback channel.