Use Amazon Multi-Domain Product Price & Detail Scraper with Python
Pull pricing, ratings, seller, variant and technical detail for Amazon products by URL or ASIN, across 21 country domains, with optional delivery postal-code targeting.
1. Choose the data you need
Review the published README for supported collection modes, examples, and limits. The recipe below uses the current published input definition.
2. Prepare a source-based input
This JSON contains published prefills and required-field defaults. Review every value for your task before running it; it is not a promise of successful collection.
{
"asins": [
"B09X7MPX8L"
],
"bestsellerUrls": [],
"brand": "",
"condition": "any",
"currency": "auto",
"dealsOnly": false,
"deliveryCountry": "auto",
"domains": [],
"failOnEmpty": true,
"includeDetails": true,
"includeFailed": true,
"includeSponsored": true,
"includeTopReviews": false,
"includeVariants": false,
"language": "auto",
"marketplace": "auto",
"maxItems": 1,
"maxPages": 1,
"minRating": "any",
"postalCode": "",
"primeOnly": false,
"productUrls": [],
"proxyConfiguration": {
"useApifyProxy": true
},
"proxyCountry": "AUTO",
"rateLimitDelay": 0,
"searchTerms": [],
"searchUrls": [],
"sortBy": "relevance",
"stock": "any"
}
Download input.example.json and save your reviewed copy as input.json.
| Field | Type | Required | Description |
|---|---|---|---|
productUrls | array | optional | Amazon product URLs to scrape. Any mix of the 21 supported country domains is allowed, e.g. https://www.amazon.com/dp/B0B8PD8TTP. |
asins | array | optional | Bare 10-character Amazon ASINs. Builds /dp/{ASIN} URLs on the selected marketplace, or on every domain listed in `domains` for cross-marketplace runs. |
searchTerms | array | optional | Keyword queries to run on Amazon search pages. Price/rating/deal/condition/sort filters are applied as URL parameters. |
searchUrls | array | optional | Full Amazon search URLs to pass through, including your own `i=`, `rh=`, `low-price`, and `s=` parameters. Pagination is added automatically. |
bestsellerUrls | array | optional | Amazon bestseller /zgbs/ or /gp/bestsellers/ list URLs. Returns the ranked product cards, optionally enriched with product-detail fields. |
marketplace | string | optional | Marketplace used for bare ASINs and keyword search terms. `auto` uses the first product URL's domain, or amazon.com. |
domains | array | optional | Optional list of marketplaces (e.g. amazon.com, amazon.de) to run bare ASINs and search terms across. Leave empty to use `marketplace` only. |
language | string | optional | Page language. `auto` uses the marketplace's own default. Explicit values set `?language=` and the matching Accept-Language header. |
currency | string | optional | ISO currency for the displayed price. `auto` uses the marketplace currency. Note: Amazon converts display currency; it is not guaranteed local retail pricing. |
deliveryCountry | string | optional | Optional country hint. When `postalCode` is empty, a representative local ZIP for that country is used. A country alone is not sent to Amazon. |
postalCode | string | optional | Local ZIP/postal code for the delivery location. The actor validates it against the marketplace format and skips the location change if it does not match. |
minPrice | number | optional | Minimum price for discovery (search) results. Leave empty for no lower bound. |
maxPrice | number | optional | Maximum price for discovery (search) results. Leave empty for no upper bound. |
minRating | string | optional | Minimum star rating for discovery results. `4` is the live-validated 4+ stars filter; lower values are best effort. |
dealsOnly | boolean | optional | Apply Amazon's deals filter to keyword searches. Only affects discovery. |
primeOnly | boolean | optional | Apply Amazon's Prime filter to keyword searches. Prime eligibility itself is not emitted because the page does not expose a reliable per-item signal. |
condition | string | optional | Item condition filter for keyword searches. `new` is live-validated; other values are best effort. |
brand | string | optional | Optional brand word added to keyword search terms and used as a title/brand post-filter. This is not a structured Amazon brand-facet resolver. |
stock | string | optional | Best-effort stock filter applied after parsing. Records with unknown stock pass through. |
sortBy | string | optional | Sort order for keyword searches. Search-URL pass-through keeps its own sort. |
maxItems | integer | optional | Maximum number of search/bestseller rows across all discovery inputs. Explicit product URLs/ASINs are always processed. |
maxPages | integer | optional | Maximum search-result pages to read per keyword or search URL (1-20). |
includeDetails | boolean | optional | Fetch each discovery result's product page for full price, seller, variants, specs, reviews, and media fields. Disable for a cheaper search-card-only run. |
includeSponsored | boolean | optional | Keep sponsored search cards. The isSponsored flag is always preserved. |
includeVariants | boolean | optional | Include parent ASIN, child ASINs, and variant dimensions. Per-variant price and stock are not available from the product page. |
includeTopReviews | boolean | optional | Include the inline top-review snippets Amazon renders publicly. Full review pagination is login-gated and is not supported. |
includeFailed | boolean | optional | Emit an error row (recordType=error, reason, httpStatus) when a product or discovery input fails instead of silently dropping it. |
failOnEmpty | boolean | optional | Mark the run as FAILED when no product/search records are emitted. |
rateLimitDelay | integer | optional | Base pause in seconds between product/search requests (0-10). A random value between this and twice this is used. |
proxyConfiguration | object | optional | Optional. The actor starts direct and escalates through Apify Proxy automatically only if Amazon blocks the request. No setup is required. |
proxyCountry | string | optional | Optional proxy exit country. `AUTO` uses the marketplace's own country for every domain. |
3. Start an Actor run
Set APIFY_TOKEN in your environment. Python 3.10 or newer is sufficient; this recipe uses no third-party packages.
Execution may incur charges. Review current pricing on Apify. The request asks for a 120-second timeout and a charge limit; these settings are subject to Apify’s pricing and do not guarantee an all-inclusive spending cap.
import json
import os
import urllib.request
# Save the schema-derived example as input.json; review and edit it first.
with open("input.json", encoding="utf-8") as stream:
actor_input = json.load(stream)
token = os.environ["APIFY_TOKEN"]
request = urllib.request.Request(
"https://api.apify.com/v2/acts/MxUZNzhP5Ay03gil8/runs?timeout=120&maxTotalChargeUsd=0.50",
data=json.dumps(actor_input).encode("utf-8"),
headers={"Authorization": "Bearer " + token, "Content-Type": "application/json"},
method="POST",
)
# This starts a potentially billable run. Do not automatically retry this POST.
with urllib.request.urlopen(request, timeout=40) as response:
run = json.load(response)["data"]
print("Run ID:", run["id"])
print("Status:", run["status"])
# Inspect and download results in Apify Console once the run succeeds.
4. Inspect the actual results
Open the run in Apify Console and wait for a successful completion. Use the published output schema to locate results and the dataset schema to understand declared views. Missing or optional record fields must not be treated as guaranteed values.
One record per product, search result, or bestseller entry, plus explicit error rows. Fields include ASIN/parent ASIN, price/list price/coupon/deal, rating/review count, BSR, seller/buybox, offers, availability, variants, images/videos/specs/A+ text, top review snippets, marketplace, URL, and scrapedAt. Empty fields are omitted.
Questions before you run
Which inputs are required?
No top-level fields are marked required in the published schema. Conditional requirements can still apply; check the README.
What does this guide verify?
The fields, prefills, and schema links are rendered from the published build. This is a usage recipe, not a paid live extraction test. Source availability and collection results can vary.
What if the run request times out?
Check Apify Console before retrying. The first request may already have created a run. Do not automatically repeat a run-creation POST.
Generated from source build 0Bfb9bnO1sEJObmDM and its README and schemas. Source changes regenerate this guide; no third-party editorial claims are inferred.