ApifyAmazonScanner avatar

ApifyAmazonScanner

Pricing

Pay per usage

Go to Apify Store
ApifyAmazonScanner

ApifyAmazonScanner

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Matt Cook

Matt Cook

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

0

Monthly active users

2 months ago

Last modified

Share

Amazon Product Scraper (Apify actor)

Scrapes Amazon product data based on URL and country, without the Amazon API: reviews, prices, descriptions, ASINs, ratings, images, Best Sellers Rank, and the full product-information tables.

Feed it any mix of Amazon URLs — search results, category / browse-node pages, Best Sellers pages, or product detail pages — and/or a bare search keyword plus a country, and it writes one JSON record per product to the run's dataset.

Input

FieldTypeDefaultNotes
categoryOrProductUrls[{ url }]Search (/s?k=…), category (/b?node=…), Best Sellers (/gp/bestsellers/…), or product (/dp/ASIN) URLs. Bare ASINs also accepted. Aliases: startUrls, productUrls.
searchstringBare keyword; searched on the country marketplace. Aliases: keyword, searchKeywords, keywords, queries.
countrystringUSMarketplace for bare keywords + proxy geolocation. 23 marketplaces supported (US, GB/UK, DE, FR, IT, ES, CA, JP, IN, MX, BR, AU, NL, SE, PL, TR, AE, SG, SA, BE, IE, EG, ZA). A URL's own domain always winscountry then only steers the proxy.
maxItemsint100Total product cap for the run. Alias: maxResults.
maxItemsPerStartUrlint0 (off)Per-start-URL cap. Alias: maxProductsPerStartUrl.
maxSearchPagesPerStartUrlint5Result pages walked per search/category URL (Amazon serves ≤ ~20).
scrapeProductDetailsbooltrueOFF = shallow, fast listing-only records (no dp-page visits).
scrapeReviewsbooltrueAlias: includeReviews. Requires details ON.
maxReviewsint20Per product. Amazon caps anonymous review pages at ~10 (~100 reviews); where the reviews pages are login-walled (increasingly common since late 2024) the actor keeps the product page's top reviews instead.
reviewsSorthelpful|recenthelpfulReview page order.
proxyConfigurationproxyApify RESIDENTIALAmazon blocks datacenter IPs quickly — keep residential.

Robot-check pages are detected (captcha form, block-page markers) and retried on a fresh session/IP automatically; requests that still fail salvage what's already known (listing-row data, on-page reviews) instead of dropping the product.

Output (one record per product)

{
"asin": "B0TESTMUG1",
"url": "https://www.amazon.com/dp/B0TESTMUG1",
"title": "Bigfoot Sasquatch Coffee Mug, 15 oz Ceramic",
"brand": "CryptidWorks",
"price": 18.99,
"priceRaw": "$18.99",
"currency": "USD",
"listPrice": 24.99,
"rating": 4.6,
"reviewsCount": 1234,
"inStock": true,
"availability": "In Stock",
"featureBullets": ["15 oz ceramic mug…", "Dishwasher and microwave safe"],
"description": "Start every morning with the legend himself…",
"image": "https://m.media-amazon.com/images/I/71test._AC_SL1500_.jpg",
"images": ["…hi-res first…"],
"breadcrumbs": ["Home & Kitchen", "Mugs"],
"bsr": 12345,
"bestsellerRanks": [{ "rank": 12345, "category": "Home & Kitchen" }, { "rank": 678, "category": "Coffee Mugs" }],
"attributes": { "Brand": "CryptidWorks", "Material": "Ceramic", "ASIN": "B0TESTMUG1" },
"reviews": [
{
"id": "R1TEASER001", "title": "Best mug I own", "rating": 5,
"body": "Sturdy, funny…", "author": "Jane D.",
"date": "March 3, 2025", "country": "United States",
"verified": true, "helpfulVotes": 12, "variant": "Color: Forest Green"
}
],
"sponsored": false,
"domain": "amazon.com",
"country": "US",
"scrapedAt": "2026-07-05T12:00:00.000Z"
}

The field names (asin, title, brand, price, rating, reviewsCount, bsr, url, image) line up with what the common Amazon actors emit, so consumers built for those (including the Suppliers app's src/ai/amazon-scan.ts normalizer) read this actor's output unchanged.

Develop / test / deploy

npm install
npm test # fixture-pinned parser tests, no network
# local run against real Amazon (uses your logged-in `apify` CLI for proxy):
apify run --purge --input '{"search":"bigfoot mug","country":"US","maxItems":5,"maxReviews":5}'
# deploy to your Apify account:
apify login
apify push

Once pushed, point the Suppliers app at it by setting APIFY_AMAZON_ACTOR=<your-apify-username>/amazon-product-scraper on Render (the actor name comes from .actor/actor.json; the app's default is a third-party store actor — this makes the Amazon market scan run on your own actor and your own proxy budget).

Design notes

  • CheerioCrawler, no browser — every page shape used (search grid, dp page, reviews pages, bestseller grid) renders its data server-side, so plain HTTP is ~10× cheaper than a headless browser. Bestseller grids lazy-load beyond ~30 items per page; the actor takes both static pages (pg=1,2) which covers the Top-100 lists' server-rendered portion.
  • Fallback selector chains everywhere — Amazon A/B-tests layouts; every field reads primary + legacy selectors (test/fixtures/ pins them).
  • Reviews strategy — dp-page top reviews are captured first (always available), then the dedicated /product-reviews/ pages are walked up to maxReviews / Amazon's ~10-page anonymous cap; a login-walled reviews page degrades gracefully to the top reviews rather than losing the product.
  • Budgeting — a scheduled counter reserves dataset slots at listing time so the crawler never fans out to hundreds of dp pages it won't use; maxItems triggers a graceful crawler.stop().