Amazon Product Scraper API avatar

Amazon Product Scraper API

Pricing

from $12.00 / 1,000 products

Go to Apify Store
Amazon Product Scraper API

Amazon Product Scraper API

Scrape Amazon products from search, category and product URLs across 23 marketplaces. Pricing is localized to the delivery location you choose, so a ZIP code, a region or a whole country each return what a buyer there actually pays.

Pricing

from $12.00 / 1,000 products

Rating

0.0

(0)

Developer

Shakamize

Shakamize

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

4 hours ago

Last modified

Categories

Share

Scrape Amazon products from search results, category pages and product URLs. Returns titles, prices, ratings, review counts, variants, offers and sellers as structured JSON, CSV or Excel, across 23 Amazon marketplaces.

Pricing is localized to the delivery location you choose. Amazon charges different prices in different places, so a ZIP code, a region or a whole country each return what a buyer in that location would actually pay, in their own currency.

What people scrape Amazon product data for

  • Amazon price tracking and repricing - watch what a product costs at a specific delivery address over time, in the currency a buyer there actually pays.
  • Competitor and market research on Amazon - pull a whole search or category, with ratings, review counts and Amazon bestseller ranks.
  • ASIN catalogue enrichment - turn a list of ASINs into full product data.
  • Buy box, offer and seller monitoring - see who else is selling an item and at what price, including which seller currently holds the buy box.

How to scrape Amazon prices by delivery address and ZIP code

Amazon does not have one price. It has a price per delivery location, and it picks that location from wherever your request appears to come from. A scraper that does not set the location explicitly reports whatever its exit node implied - and often reports no price at all, because Amazon hides the buy box for an address it cannot ship to.

Set countryCode and zipCode and the scraper performs Amazon's own delivery address handshake before it reads a page, so every price is the price for that address. Across a 40-product test spanning five categories, every product came back with the requested location applied and a price attached.

Every result carries the location it was actually scraped under:

"deliveryLocation": {
"countryCode": "US", "zipCode": "10001",
"city": "NEW YORK", "state": "NY", "applied": true
}

If applied is false, the price is whatever Amazon showed for the exit node's own location rather than yours. It is never silently presented as the same thing.

How to scrape an Amazon search, category, product URL or bare ASIN

At minimum, one or more URLs:

{
"categoryOrProductUrls": [{ "url": "https://www.amazon.com/s?k=microsd+card" }],
"maxItemsPerStartUrl": 100,
"countryCode": "US",
"zipCode": "10001"
}

Search URLs, category URLs and product URLs all work, and can be mixed. Bare ASINs are accepted too.

Input reference for every Amazon scraper setting

FieldWhat it does
categoryOrProductUrlsSearch, category or product URLs. Required.
maxItemsPerStartUrlStop after this many products per start URL.
maxSearchPagesPerStartUrlHow many listing pages to walk per start URL.
scrapeProductDetailsOn by default. Off keeps listing-only fields, which is faster and billed lower.
countryCodeDelivery country. Changes prices and availability.
zipCodeDelivery postal code, for address-level pricing.
locationDeliverableRoutesWhich page types the delivery location applies to.
languageLanguage to read Amazon in.
proxyCountryCountry to route requests through. Best left unset when using a ZIP code.
maxProductVariantsAsSeparateResultsScrape this many variants as full products of their own.
scrapeProductVariantPricesEmit a price for every variant.
maxOffersAlso collect competing offers per product.
scrapeSellersAttach seller details to each offer.
proxyConfigurationProxy settings. Residential by default, which Amazon requires.

Amazon product data you get back, as JSON, CSV or Excel

One record per product, with price, list price, stars, review count, star breakdown, variants, bestseller ranks and seller. This is a real result, not an illustration:

{
"url": "https://www.amazon.com/dp/B0GC4J6CCC",
"asin": "B0GC4J6CCC",
"title": "NORTIV 8 Men's Trail Running Shoes Wide Toe Box",
"brand": "NORTIV 8",
"price": {
"value": 63.99,
"currency": "$",
"currencyCode": "USD"
},
"listPrice": {
"value": 69.99,
"currency": "$",
"currencyCode": "USD"
},
"inStock": true,
"stars": 4.4,
"reviewsCount": 1188,
"starsBreakdown": {
"5star": 0.7,
"4star": 0.16,
"3star": 0.07,
"2star": 0.03,
"1star": 0.04
},
"breadCrumbs": "Clothing, Shoes & Jewelry › Men › Shoes › Athletic › Running › Trail Running",
"features": ["Breathable mesh upper with a wide toe box"],
"variantAsins": ["B0FG2KH6BQ", "B0GC584NSB"],
"variantAttributes": [
{
"key": "size_name",
"label": "Size",
"value": "11"
},
{
"key": "color_name",
"label": "Color",
"value": "Dark Blue"
}
],
"bestsellerRanks": [
{
"category": "Clothing, Shoes & Jewelry",
"rank": 10192
}
],
"seller": {
"name": "topshoesUS",
"id": "ABB9OQDQJ01FR"
},
"deliveryLocation": {
"countryCode": "US",
"zipCode": "10001",
"city": "NEW YORK",
"state": "NY",
"applied": true
},
"locationText": "New York 10001",
"countryCode": "US"
}

Variant prices and offers arrive as their own records, keyed by parentAsin.

A field that could not be read is null. It is never a zero, and never a value borrowed from a neighbouring product on the page.

Correctness: buy box prices, locale numbers and variant pricing

Three things this scraper is deliberately careful about, because they are the common ways Amazon data comes back quietly wrong.

Prices come only from the buy box. A product page also carries prices for recommended products in its carousels. A page-wide price selector picks one of those up and reports it as the product's own price.

Numbers are read in the locale that wrote them. 36 704 évaluations on amazon.fr is 36,704 reviews, not 36. Nr. 1.234 on amazon.de is rank 1234, not rank 1. 48.6K on a search card is 48,600, not 48. Separator handling is decided from the number's own structure first and the marketplace only when the number is genuinely ambiguous.

Variant prices cannot take the product down with them. Each variant price is fetched as an independent request. A variant that fails to load costs you that variant, not the parent product.

Amazon product scraper pricing, pay per result

You are charged for results, not for runs or for time.

EventPriceWhat it is
Product$0.012One fully scraped product, including its price.
Listing-only product$0.002One product read from a listing without opening it.
Variant price$0.012One variant priced individually.
Offer$0.003One additional seller offer.
Seller$0.0015One seller profile attached to an offer.

Setting a delivery location is not charged. It is the part most likely to be wrong elsewhere, so it is included rather than sold separately.

If you only need names, prices and ratings across a category, turn off scrapeProductDetails: results then come from the listing pages at a fifth of the price.

Proxies for scraping Amazon without getting blocked

Use Apify residential proxy. Amazon serves an anti-bot interstitial to unproxied traffic, and datacenter addresses are blocked after roughly one request. Residential is the default in the input.

Leave the proxy country unset when you pass a zipCode. An exit inside the marketplace's own country makes Amazon resolve a location of its own, and it will then not hand over the token needed to change that location to yours. The scraper handles this for you unless you override proxyCountry explicitly.

Supported Amazon marketplaces, 23 countries

Australia, Belgium, Brazil, Canada, Egypt, France, Germany, India, Ireland, Italy, Japan, Mexico, Netherlands, Poland, Saudi Arabia, Singapore, South Africa, Spain, Sweden, Turkey, United Arab Emirates, United Kingdom, United States.

Errors: what happens when an Amazon URL cannot be scraped

A URL that cannot be scraped produces a record rather than disappearing:

{
"error": "product_not_found",
"errorDescription": "Loaded a 404 page. The product does not exist.",
"input": "https://www.amazon.com/dp/B0XXXXXXXX",
"url": "https://www.amazon.com/dp/B0XXXXXXXX"
}

This scraper collects publicly visible product information only. It does not collect personal data, and it does not collect reviewer identities or review text.

Telemetry

The actor reports run health to its maintainer: error codes, the build number, the marketplace domain, and per-field counts of how often a value was found.

When requests fail, it also sends a small, capped sample of the failures themselves, so that a broken run can be diagnosed and fixed: the Amazon URL that was requested, the HTTP status code that came back, and the error with its stack trace. That URL is the page you asked for, query string included. It is not personal data, but it is your input, and this section says so rather than leave you to find out.

Your other input settings, your proxy configuration, and the scraped content itself are never sent. Nothing at all is sent when a run is healthy.