logo

Scrape a Whole Amazon Category

GuideUpdated 2026-06-20

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

  1. Open the Amazon marketplace in a browser and navigate to the category or search-results page you want to capture.

  2. Copy the full URL from the address bar. It will contain a segment like rh=n%3A4851693051 — the digits after n%3A are your browse node ID.

    Example URL: https://www.amazon.com.au/s?rh=n%3A4851693051&dc Browse node ID: 4851693051

  3. 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

POST
https://multicartapi.com/api/v1/schedules/amazon/category/add_schedule/
API Key or Session Token
ParameterTypeRequiredDescription
category_urlstring (URL)RequiredFull Amazon category URL e.g. https://www.amazon.com.au/s?rh=n%3A4851693051&dc
amazon_node_idstringRequiredAmazon browse node ID extracted from the category URL e.g. 4851693051
domainstringRequiredDomain name exactly as it appears in /settings/domains/ e.g. amazon.com.au
postcodestringRequiredPostcode string e.g. 4500. A cookie for this domain + postcode must already be active.
namestringOptionalHuman-readable collection name. Defaults to amazon_category_<node_id>.
filter_prime_ships_from_aubooleanOptionalFilter to Prime-eligible products that ship from AU. amazon.com.au only.
filter_delivery_daystringOptionalDelivery speed filter: tomorrow or within_2_days. amazon.com.au only.
price_min_centsintegerOptionalMinimum price filter in cents e.g. 0
price_max_centsintegerOptionalMaximum price filter in cents e.g. 50000 for $500.00
notification_emailstring (email)OptionalEmail address for completion notification. Defaults to the authenticated user's email.
prioritystringOptionalQueue 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.

Response
{
"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

POST
https://multicartapi.com/api/v1/schedules/amazon/category/result/
API Key or Session Token
ParameterTypeRequiredDescription
collection_idintegerRequiredCollection 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 responseis_download_generated is false and stage shows the current phase:

Response
{
"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 responseis_download_generated is true, asins is inlined, and download_links.pages[0] points to the full result file:

Response
{
"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

POST
https://multicartapi.com/api/v1/schedules/amazon/category/cancel/
API Key or Session Token
ParameterTypeRequiredDescription
collection_idintegerRequiredCollection 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.

Response
{
"code": 200,
"data": { "id": 20326, "revoked": true },
"status": 1
}