Amazon Best Sellers & Rankings Scraper
Scrape Amazon's Best Sellers, New Releases, Most Wished For, Most Gifted and Movers & Shakers charts. Get rank, ASIN, title, price, rating and category for every product on a chart, with optional deeper category coverage.
Input schema
Input fields, types, required flags, descriptions, defaults, and prefills come from the published definition. Prefill examples are distinct from defaults.
| Field | Type | Required | Description |
|---|---|---|---|
chartType | string | required | Which Amazon chart to scrape. |
domain | string | optional | Which Amazon marketplace to scrape the chart from. |
categoryUrls | array | optional | Amazon category slugs (e.g. `electronics`, `electronics/172541`) or full chart URLs to scrape. Each entry is combined with `chartType` and `domain` to build the chart page. |
Show all input fields
| Field | Type | Required | Description |
|---|---|---|---|
chartType | string | required | Which Amazon chart to scrape. |
domain | string | optional | Which Amazon marketplace to scrape the chart from. |
categoryUrls | array | optional | Amazon category slugs (e.g. `electronics`, `electronics/172541`) or full chart URLs to scrape. Each entry is combined with `chartType` and `domain` to build the chart page. |
categoryNodeIds | array | optional | Amazon browse-node IDs in `rootSlug/nodeId` form (e.g. `electronics/172541` for Headphones). Combined with `categoryUrls` if both are provided. |
maxDepth | integer | optional | When > 0, also walk each category's left-nav subcategory links this many levels deep, scraping each subcategory's own chart too. 0 = only the given categories. |
startPage | integer | optional | First chart page to fetch (each page is a separate ranked page on Amazon's site, not a fixed rank count). |
maxPages | integer | optional | Maximum number of chart pages to fetch per category, starting at `startPage`. |
maxItemsPerCategory | integer | optional | Hard cap on chart items emitted per category (across all its pages). |
maxItems | integer | optional | Hard cap on total chart items emitted across all categories in this run. |
includeProductDetails | boolean | optional | For each chart item, also fetch its product detail page for purchase-option and additional rating data. Slower and bounded by `maxProductDetails`. |
maxProductDetails | integer | optional | Hard cap on how many chart items get product-detail enrichment when `includeProductDetails` is on. |
proxyConfiguration | object | optional | Apify proxy used to fetch chart pages. Datacenter (AUTO) is used by default and works for most requests; the actor escalates to residential only after repeated blocks on a session. |
Download the published input schema
View complete JSON
{
"description": "Scrape Amazon's Best Sellers, New Releases, Most Wished For, Most Gifted, or Movers & Shakers charts for one or more categories.",
"properties": {
"categoryNodeIds": {
"default": [],
"description": "Amazon browse-node IDs in `rootSlug/nodeId` form (e.g. `electronics/172541` for Headphones). Combined with `categoryUrls` if both are provided.",
"editor": "stringList",
"prefill": [],
"title": "Category node IDs",
"type": "array"
},
"categoryUrls": {
"default": [
"electronics"
],
"description": "Amazon category slugs (e.g. `electronics`, `electronics/172541`) or full chart URLs to scrape. Each entry is combined with `chartType` and `domain` to build the chart page.",
"editor": "stringList",
"prefill": [
"electronics"
],
"title": "Category URLs or slugs",
"type": "array"
},
"chartType": {
"default": "bestSellers",
"description": "Which Amazon chart to scrape.",
"editor": "select",
"enum": [
"bestSellers",
"newReleases",
"mostWishedFor",
"mostGifted",
"moversAndShakers"
],
"enumTitles": [
"Best Sellers",
"New Releases",
"Most Wished For",
"Most Gifted",
"Movers & Shakers"
],
"prefill": "bestSellers",
"title": "Chart type",
"type": "string"
},
"domain": {
"default": "amazon.com",
"description": "Which Amazon marketplace to scrape the chart from.",
"editor": "select",
"enum": [
"amazon.com",
"amazon.co.uk",
"amazon.de",
"amazon.fr",
"amazon.it",
"amazon.es",
"amazon.ca",
"amazon.com.au",
"amazon.co.jp",
"amazon.in",
"amazon.com.br",
"amazon.com.mx",
"amazon.nl",
"amazon.se",
"amazon.pl",
"amazon.com.tr",
"amazon.ae",
"amazon.sa",
"amazon.sg",
"amazon.eg"
],
"enumTitles": [
"United States (amazon.com)",
"United Kingdom (amazon.co.uk)",
"Germany (amazon.de)",
"France (amazon.fr)",
"Italy (amazon.it)",
"Spain (amazon.es)",
"Canada (amazon.ca)",
"Australia (amazon.com.au)",
"Japan (amazon.co.jp)",
"India (amazon.in)",
"Brazil (amazon.com.br)",
"Mexico (amazon.com.mx)",
"Netherlands (amazon.nl)",
"Sweden (amazon.se)",
"Poland (amazon.pl)",
"Turkey (amazon.com.tr)",
"UAE (amazon.ae)",
"Saudi Arabia (amazon.sa)",
"Singapore (amazon.sg)",
"Egypt (amazon.eg)"
],
"prefill": "amazon.com",
"title": "Amazon domain",
"type": "string"
},
"includeProductDetails": {
"default": false,
"description": "For each chart item, also fetch its product detail page for purchase-option and additional rating data. Slower and bounded by `maxProductDetails`.",
"prefill": false,
"title": "Enrich with product detail page",
"type": "boolean"
},
"maxDepth": {
"default": 0,
"description": "When > 0, also walk each category's left-nav subcategory links this many levels deep, scraping each subcategory's own chart too. 0 = only the given categories.",
"maximum": 3,
"minimum": 0,
"prefill": 0,
"title": "Subcategory recursion depth",
"type": "integer"
},
"maxItems": {
"default": 200,
"description": "Hard cap on total chart items emitted across all categories in this run.",
"maximum": 2000,
"minimum": 1,
"prefill": 20,
"title": "Max total items",
"type": "integer"
},
"maxItemsPerCategory": {
"default": 60,
"description": "Hard cap on chart items emitted per category (across all its pages).",
"maximum": 500,
"minimum": 1,
"prefill": 20,
"title": "Max items per category",
"type": "integer"
},
"maxPages": {
"default": 2,
"description": "Maximum number of chart pages to fetch per category, starting at `startPage`.",
"maximum": 20,
"minimum": 1,
"prefill": 2,
"title": "Max pages per category",
"type": "integer"
},
"maxProductDetails": {
"default": 10,
"description": "Hard cap on how many chart items get product-detail enrichment when `includeProductDetails` is on.",
"maximum": 100,
"minimum": 1,
"prefill": 5,
"title": "Max product detail fetches",
"type": "integer"
},
"proxyConfiguration": {
"default": {
"useApifyProxy": true
},
"description": "Apify proxy used to fetch chart pages. Datacenter (AUTO) is used by default and works for most requests; the actor escalates to residential only after repeated blocks on a session.",
"editor": "proxy",
"prefill": {
"useApifyProxy": true
},
"title": "Proxy configuration",
"type": "object"
},
"startPage": {
"default": 1,
"description": "First chart page to fetch (each page is a separate ranked page on Amazon's site, not a fixed rank count).",
"maximum": 20,
"minimum": 1,
"prefill": 1,
"title": "Start page",
"type": "integer"
}
},
"required": [
"chartType"
],
"schemaVersion": 1,
"title": "Amazon Best Sellers & Rankings Scraper Input",
"type": "object"
}
Output schema
Published result links and storage locations. This schema is not an exhaustive contract for every field in a dataset record.
| Field | Type | Required | Description |
|---|---|---|---|
chartItems | string | optional | Dataset containing all scraped Amazon chart items and chart-metadata records. |
Download the published output schema
View complete JSON
{
"actorOutputSchemaVersion": 1,
"description": "Ranked chart items from Amazon's Best Sellers, New Releases, Most Wished For, Most Gifted, and Movers & Shakers pages -- rank, ASIN, title, price, rating, and category.",
"properties": {
"chartItems": {
"description": "Dataset containing all scraped Amazon chart items and chart-metadata records.",
"template": "{{links.apiDefaultDatasetUrl}}/items",
"title": "Amazon chart items",
"type": "string"
}
},
"title": "Amazon Best Sellers & Rankings Scraper Output"
}
Dataset schema
Published dataset views and any declared field definitions. A view can select only a subset of the returned record fields.
Download the published dataset schema
View complete JSON
{
"actorSpecification": 1,
"views": {
"overview": {
"display": {
"component": "table",
"properties": {}
},
"title": "Chart items",
"transformation": {
"fields": [
"rank",
"asin",
"title",
"chartType",
"category",
"price",
"rating",
"ratingsCount",
"url"
]
}
}
}
}
Key-value schema
Published key-value store definitions, when provided by this build.
This definition is not present in the default published build. See the published README for available documentation.
Published README
Read the full published documentation
Amazon Best Sellers & Rankings Scraper
Scrape Amazon's chart family -- Best Sellers, New Releases, Most Wished For, Most Gifted, and Movers & Shakers -- for any category on any Amazon marketplace. Get rank, ASIN, title, price, rating, and category for every product Amazon currently exposes on a chart, with optional recursion into subcategories and optional product-detail enrichment.
What this actor does
- Five chart types: Best Sellers, New Releases, Most Wished For, Most Gifted, Movers & Shakers
- Any category: pass a category slug (
electronics), a slug + browse-node ID (electronics/172541), or paste a full Amazon chart URL - Category-tree recursion: optionally walk each category's subcategory links up to a configurable depth, scraping every subcategory's own chart too
- 20 Amazon marketplaces: amazon.com, .co.uk, .de, .fr, .it, .es, .ca, .com.au, .co.jp, .in, .com.br, .com.mx, .nl, .se, .pl, .com.tr, .ae, .sa, .sg, .eg
- Honest empty-chart handling: Movers & Shakers legitimately has no items for many categories -- the actor emits a clear chart-metadata record instead of silently returning zero items or substituting unrelated products
- Empty fields are omitted
Output per chart item
rank-- position on the chartasin-- Amazon Standard Identification Numbertitle,url,imageprice--{value, currency, display}(only emitted when Amazon shows an explicit price)stars,reviewsCountbadge-- e.g.BestSeller,AmazonsChoice(only when Amazon shows one)format-- format/variant summary, e.g."Paperback"or"4 formats available"(books/media charts only, when Amazon's card shows one)chartType,category,categoryNodeId,categoryUrl,pagerankChangeDirection,rankChangeAmount-- Movers & Shakers only, and only when Amazon's own rank-change marker is presentlistPrice,inStock-- only whenincludeProductDetailsis enabled, and only when the product's own detail page shows explicit crossed-out list-price or in-stock/out-of-stock evidence (never inferred)childCategories-- sibling/child category links{name, path, url, nodeId}from the chart page's own category nav, when present (e.g. "Camera & Photo", "Computers & Accessories" under Electronics)recordType: "chartItem",scrapedAt
Output: chart metadata record
Emitted once per category when a chart is empty or a page cannot be loaded, instead of returning zero items silently:
chartType,category,categoryNodeId,categoryUrl,domainextractedItemCount-- how many items were actually extracted (0 for an empty/failed chart)message-- human-readable explanation (e.g. "No items currently available for this chart/category.")recordType: "chartMetadata",scrapedAt
Input
| Field | Type | Default | Description |
|---|---|---|---|
chartType |
string | bestSellers |
bestSellers / newReleases / mostWishedFor / mostGifted / moversAndShakers |
domain |
string | amazon.com |
Which Amazon marketplace to scrape |
categoryUrls |
array | ["electronics"] |
Category slugs, slug/nodeId pairs, or full chart URLs |
categoryNodeIds |
array | [] |
Additional rootSlug/nodeId entries |
maxDepth |
int | 0 |
Subcategory recursion depth (0-3) |
startPage |
int | 1 |
First chart page to fetch |
maxPages |
int | 2 |
Max chart pages to fetch per category |
maxItemsPerCategory |
int | 60 |
Hard cap on items per category |
maxItems |
int | 200 |
Hard cap on total items across the run |
includeProductDetails |
boolean | false |
Enrich items with product-detail-page data |
maxProductDetails |
int | 10 |
Cap on product-detail fetches when enabled |
proxyConfiguration |
object | AUTO | Apify proxy (datacenter by default) |
Example: Best Sellers in Electronics
{
"chartType": "bestSellers",
"categoryUrls": ["electronics"],
"maxItems": 50
}
Example: New Releases for a specific subcategory (Headphones)
{
"chartType": "newReleases",
"categoryUrls": ["electronics/172541"],
"maxItems": 30
}
Example: recurse a whole department's subcategories
{
"chartType": "bestSellers",
"categoryUrls": ["electronics"],
"maxDepth": 2,
"maxItemsPerCategory": 20,
"maxItems": 500
}
Example: Movers & Shakers on the UK marketplace
{
"chartType": "moversAndShakers",
"domain": "amazon.co.uk",
"categoryUrls": ["electronics"]
}
Use cases
- Market research -- track which products dominate a category's chart over time
- Competitive intelligence -- monitor a competitor's category ranking and pricing
- Trend spotting -- New Releases and Movers & Shakers surface emerging products before they're widely known
- Gift-guide content -- Most Gifted and Most Wished For power seasonal buying-guide content
- Category research -- recurse a department's full subcategory tree to map an entire vertical's top products
FAQ
Is this actor affiliated with Amazon? No. This is a third-party actor that scrapes Amazon's public chart pages.
Does the actor guarantee "Top 100" for every category?
No. The actor extracts all chart items Amazon currently exposes up to your maxPages/maxItemsPerCategory limits in a single session. Amazon's own pagination does not reliably expose a fixed rank count on every category, so the actor never claims a guaranteed top-N -- check extractedItemCount on the chart-metadata record to see how many items were actually found.
Why is Movers & Shakers sometimes empty? Amazon itself frequently has no movers-and-shakers data for a given category at a given time -- this is a real, documented state on Amazon's own site, not a scraper bug. The actor emits a chart-metadata record explaining this instead of guessing or substituting unrelated recommended products.
Why do some items have no price or rating?
Amazon only shows these when they exist on the chart card. The actor never fabricates a price or rating -- if the field is missing, it's omitted from the record entirely.
How is rank different from position across separate runs?
rank reflects Amazon's own displayed chart position at scrape time. The actor holds no state between runs, so rankChangeDirection/rankChangeAmount (Movers & Shakers only) are populated strictly from Amazon's own rank-change marker on the page, never inferred by comparing separate runs.
Does the actor need a proxy? No -- it uses Apify's free AUTO (datacenter) proxy by default, which works for the large majority of requests. If a session gets repeatedly blocked, the actor automatically escalates to a residential proxy session as a fallback.
Can I scrape a whole department's subcategories in one run?
Yes -- set maxDepth to 1-3 and the actor walks each category's subcategory links (visible in Amazon's own left-nav) that many levels deep, scraping each subcategory's own chart.
Python quickstart
Use a schema-derived input and the Python standard library to start a run. An Apify account and token are required for execution.
Source build ERhYC4a3fFU4C7GYC. Documentation is regenerated from the default published build; private drafts are not included.