Scrape a Whole Amazon Category
Point MultiCartAPI at any Amazon category URL and it walks every page, discovers every ASIN, and hands you a single result file. You need a valid postcode (and its delivery cookie) for the target domain before you submit — skip that step and you get a 400.
Before you start
- Make sure you have an active postcode for the domain you want to scrape. See Postcodes & Delivery Cookies for details.
- Note your category URL and the browse node ID embedded in it — both are required by the API.
Find the category URL and node ID
-
Open the Amazon marketplace in a browser and navigate to the category or search-results page you want to capture.
-
Copy the full URL from the address bar. It will contain a segment like
rh=n%3A4851693051— the digits aftern%3Aare your browse node ID.Example URL:
https://www.amazon.com.au/s?rh=n%3A4851693051&dcBrowse node ID:4851693051 -
You can also start from a department page and follow breadcrumbs — as long as the URL contains an
rh=n%3A<id>segment the API can work with it.
Active postcode required
The scraper uses a delivery cookie that is generated when you create a postcode. If no cookie exists for the domain + postcode combination you submit, the API returns a 400 error. Create and activate the postcode first — Add a Postcode.
Via the API
Step 1 — Submit the category scrape
Submit Category Scrape
https://multicartapi.com/api/v1/schedules/amazon/category/add_schedule/| Parameter | Type | Required | Description |
|---|---|---|---|
category_url | string (URL) | Required | Full Amazon category URL e.g. https://www.amazon.com.au/s?rh=n%3A4851693051&dc |
amazon_node_id | string | Required | Amazon browse node ID extracted from the category URL e.g. 4851693051 |
domain | string | Required | Domain name exactly as it appears in /settings/domains/ e.g. amazon.com.au |
postcode | string | Required | Postcode string e.g. 4500. A cookie for this domain + postcode must already be active. |
name | string | Optional | Human-readable collection name. Defaults to amazon_category_<node_id>. |
filter_prime_ships_from_au | boolean | Optional | Filter to Prime-eligible products that ship from AU. amazon.com.au only. |
filter_delivery_day | string | Optional | Delivery speed filter: tomorrow or within_2_days. amazon.com.au only. |
price_min_cents | integer | Optional | Minimum price filter in cents e.g. 0 |
price_max_cents | integer | Optional | Maximum price filter in cents e.g. 50000 for $500.00 |
notification_email | string (email) | Optional | Email address for completion notification. Defaults to the authenticated user's email. |
priority | string | Optional | Queue priority: Highest, High, Normal, Low, or Lowest. |
Filters are amazon.com.au only
filter_prime_ships_from_au and filter_delivery_day are applied only when domain is amazon.com.au. They are silently ignored on all other domains.
curl https://multicartapi.com/api/v1/schedules/amazon/category/add_schedule/ \
-X POST \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"category_url": "https://www.amazon.com.au/s?rh=n%3A4851693051&dc",
"amazon_node_id": "4851693051",
"domain": "amazon.com.au",
"postcode": "4500",
"filter_prime_ships_from_au": true,
"filter_delivery_day": "within_2_days",
"price_min_cents": 0,
"price_max_cents": 50000
}'Save both id (collection_id) and runner_id from the response — you need them to poll for results and to cancel if required.
{
"code": 200,
"data": { "id": 20326, "runner_id": 412 },
"status": 1
}Step 2 — Poll for results
Category scrapes walk through every page of the category, so they take longer than single-product scrapes. Poll the result endpoint every 10–15 seconds until is_download_generated is true or stage is "failed".
Poll Category Scrape Result
https://multicartapi.com/api/v1/schedules/amazon/category/result/| Parameter | Type | Required | Description |
|---|---|---|---|
collection_id | integer | Required | Collection ID returned in the id field of the /add_schedule/ response. |
curl https://multicartapi.com/api/v1/schedules/amazon/category/result/ \
-X POST \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "collection_id": 20326 }'In-progress response — is_download_generated is false and stage shows the current phase:
{
"code": 200,
"data": [{
"id": 412,
"collection": 20326,
"is_download_generated": false,
"stage": "scraping",
"progress": { "page": 3, "total": 10 },
"asin_count": 0,
"asins": [],
"download_links": { "pages": [], "all_pages": "" }
}],
"status": 1
}Completed response — is_download_generated is true, asins is inlined, and download_links.pages[0] points to the full result file:
{
"code": 200,
"data": [{
"id": 412,
"collection": 20326,
"is_download_generated": true,
"stage": "done",
"asin_count": 450,
"asins": [
{ "asin": "B0ABC123", "title": "Example Product", "price": "$29.99" }
],
"download_links": {
"pages": ["https://multicartapi.com/api/v1/results/20326/412/category_asins.json"],
"all_pages": ""
}
}],
"status": 1
}Use download_links.pages[0] to download the complete ASIN list. The all_pages field is always an empty string for category results.
Step 3 (optional) — Cancel a scrape in flight
If you need to stop the scrape before it finishes, call the cancel endpoint. A revoked scrape cannot be restarted — submit a new /add_schedule/ request to begin again.
Cancel Category Scrape
https://multicartapi.com/api/v1/schedules/amazon/category/cancel/| Parameter | Type | Required | Description |
|---|---|---|---|
collection_id | integer | Required | Collection ID returned in the id field of the /add_schedule/ response. |
curl https://multicartapi.com/api/v1/schedules/amazon/category/cancel/ \
-X POST \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "collection_id": 20326 }'revoked: true means the task was found in the queue and stopped. revoked: false means the task had already finished or was not found — check the result endpoint to confirm the terminal state.
{
"code": 200,
"data": { "id": 20326, "revoked": true },
"status": 1
}