Amazon Listings Scraper 2026 avatar

Amazon Listings Scraper 2026

Pricing

from $2.00 / 1,000 results

Go to Apify Store
Amazon Listings Scraper 2026

Amazon Listings Scraper 2026

Amazon product data scraper for keyword search. Get ASIN, title, price, currency, rating, Prime and badge per result.

Pricing

from $2.00 / 1,000 results

Rating

0.0

(0)

Developer

devcake

devcake

Maintained by Community

Actor stats

1

Bookmarked

10

Total users

2

Monthly active users

10 days ago

Last modified

Categories

Share

🛒 Amazon Product Scraper · Amazon Listings Scraper

Extract Amazon products and listings by keyword across 12 marketplaces. Fast, accurate, and ready to run — no setup needed.


✨ At a glance

🌍 Marketplaces11 — US, UK, DE, IT, ES, CA, MX, BR, IN, JP, AU
⚡ SpeedSearch results in seconds; a fully enriched run takes a couple of minutes per keyword
📦 OutputOne clean row per Amazon product — ASIN, price, rating, reviews, Prime, sponsored flag, and more
🔬 EnrichmentOptional detail-page pass (enrichDetails: true) adds specs, feature bullets, hi-res gallery, variations, best-sellers rank, seller and more — 54 extra fields
🚀 ScaleUp to 10,000 unique products per keyword, 1,000 keywords per run

📑 Table of contents


🛒 What does Amazon Product Scraper do?

This Amazon listings scraper pulls product listings from Amazon search pages for one or more keywords across all 12 major Amazon marketplaces. For each keyword it goes through Amazon's search pages and returns one row per product — a clean Amazon product dataset with ASIN, title, price, rating, review count, Prime badge, sponsored flag, thumbnail, brand, and 20+ more fields.

Optionally it goes one level deeper — flip enrichDetails on and for every product it also reads the product detail page and merges the full catalogue record into the same row — feature bullets, the specification tables, the product description, the hi-res image gallery, the colour variants and their sibling ASINs, best-sellers rank, delivery promise, seller, coupons and whether the listing has A+ content. That turns a 31-field search dataset into an 85-field product database.

It's built to bypass Amazon's bot detection automatically, so you don't have to wrestle with proxies, captchas, or browser setup. Just paste your keywords, hit start, and get your data.

Try it with three sample keywords ("wireless earbuds", "bluetooth headphones", "noise cancelling earbuds") in the Input tab — you'll see a clean Amazon product dataset within a minute.


👥 Who it's for

Built for anyone who works with Amazon listings and product data.

  • 🛒 Amazon FBA sellers — track your ASIN's organic position, watch competitor pricing, and spot listing-rank changes week over week.
  • 🏪 E-commerce resellers & dropshippers — find winning products, compare supplier pricing, and monitor availability across marketplaces.
  • 📊 Market & product researchers — generate bulk product datasets for trend analysis, category sizing, and assortment comparison.
  • 💼 Procurement & sourcing teams — discover candidate products, evaluate review velocity, and shortlist private-label opportunities.
  • 📈 Price monitoring services — batch thousands of keywords into one run and feed structured price + discount data into your tracking pipeline.
  • 🎯 Amazon agencies & consultants — produce client-ready reports on keyword ranking, sponsored share, and competitor moves.

💡 Use cases

Seven battle-tested workflows for sellers, analysts, and operators.

📦 Scrape Amazon listings at scale

Pull hundreds of product cards per keyword and up to 10,000 unique ASINs per keyword in a single run.

🔎 Bulk product discovery

Build seed product lists for catalog enrichment, review scraping, variant extraction, or supplier sourcing.

🏷️ Keyword research for Amazon listings

See exactly which products rank for your target keyword, their pricing tiers, and review velocity.

🆚 Competitor analysis

Track competing ASINs across price, rating, review count, and "bought in past month" signals.

💹 Price monitoring at scale

Batch hundreds of keywords into one run and pull structured prices and discount percentages in a single dataset.

🌐 Multi-marketplace expansion

Compare product assortments, pricing, and ratings across Amazon.com, Amazon.de, Amazon.co.jp, and 9 more storefronts.

isSponsored and organicRank fields let you separate paid placements from real organic winners.


🚀 How to use Amazon Product Scraper

Five steps from input to downloadable dataset.

  1. 📝 Open the Input tab and paste one or more keywords into the Search keywords field (1–1,000 keywords per run).
  2. 🌍 Pick an Amazon domain — amazon.com (US) is the default. Switch to co.uk, de, jp, etc. for other storefronts.
  3. 🎯 Set Maximum products per keyword (default 100) — the scraper stops each keyword once that many unique products are collected.
  4. ▶️ Click Start and wait. A 100-product run finishes in under a minute.
  5. ⬇️ Download results from the Output tab — CSV, JSON, Excel, or HTML. Use the Products table for a quick scan, Full data for everything.

🤖 Want to automate it? Use the API tab to trigger runs from your own scripts, or schedule hourly/daily keyword-tracking jobs from the Schedules tab.


⚙️ Input

Four fields, that's all. Everything else is handled for you.

ParameterTypeRequiredDefaultDescription
📝 keywordsarray of strings✅ Yes—One or more keywords to search on Amazon (1–1,000 per run).
🌍 domainenum❌ NocomWhich Amazon storefront: com, co.uk, de, fr, it, es, ca, com.mx, com.br, in, jp, com.au.
🎯 maxResultsinteger❌ No50Stop each keyword once this many unique products (by ASIN) are collected.
🔬 enrichDetailsboolean❌ NofalseFetch every product's detail page and merge the full catalogue record into the row. Every product a keyword returns is enriched.

💡 The Amazon region is auto-selected from domain. amazon.com → US · amazon.de → DE · amazon.co.jp → JP, and so on — so you always get a real local view of that storefront.

📝 Example input

{
"keywords": ["wireless earbuds", "bluetooth headphones", "noise cancelling earbuds"],
"domain": "com",
"maxResults": 100,
"enrichDetails": false
}

🔬 Enrichment — what the detail page adds

Off by default. The search page only renders a teaser card — the product detail page carries the whole catalogue record, and the scraper merges it into the same row.

From the detail pageFields
Copydescription, features (the "About this item" bullets), savingsText
Specificationsspecifications, productDetails, productOverview, additionalDetails — flat key/value maps with Brand Name, Item Weight, Material Type, Color, Dimensions, Model Number, Manufacturer Part Number, UPC, Date First Available, …
RankingbestSellersRank ([{rank, category}]), bestSellersRankText
Mediaimages / imagesHiRes (full gallery at 1500 px), mainImage, mainImageHiRes, videos
Variationsvariations ({color_name: [...], size_name: [...]}), variationAsins (every sibling ASIN in the variation graph)
CommercesellerText, amazonsChoice, whatsInTheBox, warranty, sizeGuide, brandInsights, hasAplus
Category hierarchycategory, categorySymbol, glProductGroup, categoryId, subCategoryId, productType
Image datathe hi-res image set, imageVariants, leadColor, dominantColors

🛡️ Your search-page snapshot is never overwritten. price, rating and reviewCount keep the value Amazon showed on the search page; the detail-page values are added as pdpPrice, pdpRating, pdpReviewCount, pdpListPrice and pdpDiscountPercent. That way you can always compare "as listed in search" vs "as detailed on the product page".


📦 Output

Every product is pushed as one row to the default dataset. Fields follow the Apify Amazon-search market standard — they line up with the leading Amazon scrapers on the platform, so existing pipelines keep working. With enrichDetails: true the extra columns are added on top.

📄 Example row

A fully enriched row — with enrichDetails: true.

{
"asin": "B0BSHF7WHW",
"title": "Apple AirPods Pro (2nd Gen)",
"url": "https://www.amazon.com/dp/B0BSHF7WHW",
"thumbnail": "https://m.media-amazon.com/images/I/71zny78BxWL._AC_UX200_.jpg",
"price": 199.99,
"priceText": "$199.99",
"listPrice": 249.0,
"listPriceText": "$249.00",
"discountPercent": 20,
"currency": "USD",
"rating": 4.6,
"ratingText": "4.6 out of 5 stars",
"reviewCount": 89412,
"reviewCountText": "89,412",
"isPrime": true,
"isSponsored": false,
"badgeText": "Amazon's Choice",
"boughtInPastMonth": "10K+ bought in past month",
"boughtInPastMonthValue": 10000,
"deliveryText": "Get it by Tomorrow, July 26",
"couponText": null,
"availabilityText": "In Stock",
"brand": "Apple",
"marketplace": "com",
"searchQuery": "wireless earbuds",
"searchUrl": "https://www.amazon.com/s?k=wireless+earbuds&page=1",
"sourceType": "keyword",
"page": 1,
"positionOnPage": 3,
"organicRank": 2,
"globalPosition": 3,
"scrapedAt": "2026-07-25T10:30:00.000Z",
"enriched": true,
"pdpPrice": 199.99,
"pdpRating": 4.6,
"pdpReviewCount": 89412,
"pdpListPrice": 249.0,
"pdpDiscountPercent": 20,
"amazonsChoice": true,
"description": "AirPods Pro (2nd generation) with Active Noise Cancellation...",
"features": [
"Active Noise Cancellation",
"Personalized Spatial Audio with dynamic head tracking"
],
"specifications": {
"Brand Name": "Apple",
"Item Weight": "0.19 pounds",
"Model Number": "MTJV3AM/A",
"Manufacturer Part Number": "MTJV3AM/A",
"Best Sellers Rank": "#1 in Headphones & Earbuds"
},
"bestSellersRank": [
{ "rank": 1, "category": "Headphones & Earbuds" }
],
"mainImageHiRes": "https://m.media-amazon.com/images/I/71zny78BxWL._SL1500_.jpg",
"imagesHiRes": [
"https://m.media-amazon.com/images/I/71zny78BxWL._SL1500_.jpg"
],
"variations": { "color_name": ["White", "Black"] },
"variationAsins": { "0:0": "B0BSHF7WHW", "0:1": "B0CHXH2QZK" },
"category": "Premium Consumer Electronics Brands",
"productType": "HEADPHONES",
"hasAplus": true
}

⬇️ You can download the dataset in JSON, CSV, Excel, or HTML from the Output tab. For large runs, use the API tab to fetch paginated items programmatically.


📊 Data table

Every field the scraper emits, grouped by purpose so you can scan what you need.

🆔 Identity

FieldTypeDescription
asinstringAmazon Standard Identification Number (10 alphanumeric chars). Unique key.
titlestringProduct title as displayed in the search result card.
urlstringCanonical Amazon product URL (/dp/<ASIN>).
thumbnailstringProduct thumbnail image URL.
brandstringBrand name — from the card, or back-filled from the detail page.
marketplacestringAmazon domain code (com, co.uk, de, jp, …).
categorystringAmazon's marketplace display group from the product API — e.g. "Kitchen", "Premium Consumer Electronics Brands", "CE".
categorySymbolstringMachine-readable symbol of the display group, e.g. "kitchen_display_on_website".
glProductGroupstringThe global product group — the top of the hierarchy, e.g. "gl_kitchen".
categoryIdstringAmazon browse-node id of the category, e.g. "7907500".
subCategoryIdstringAmazon browse-node id of the sub-category, e.g. "7907512".
productTypestringAmazon's internal product type (HEADPHONES, BOTTLE, …).

💰 Price

FieldTypeDescription
pricenumberNumeric current price in currency. Raw locale string preserved as priceText.
listPricenumberStrike-through "was" price. Empty when Amazon doesn't show a discount.
discountPercentnumberCalculated as round((1 - price / listPrice) × 100). Empty if either is missing.
currencystringCurrency code (USD, GBP, EUR, JPY, INR, …).
couponTextstringVisible coupon / savings text. Empty when no coupon is shown.
pdpPricenumberPrice read from the detail page. price keeps the search-page value.
pdpListPricenumberList price read from the detail page.
pdpDiscountPercentnumberDiscount computed from the detail-page prices.
savingsTextstringAmazon's savings line on the detail page ("Save $20").

⭐ Reviews & rating

FieldTypeDescription
ratingnumberNumeric rating 0.0–5.0. Raw text preserved as ratingText.
reviewCountintegerParsed integer review count. Raw text preserved as reviewCountText.
boughtInPastMonthValueintegerParsed threshold from "10K+ bought in past month" → 10000. Empty when absent.
pdpRatingnumberRating read from the detail page.
pdpReviewCountintegerReview count read from the detail page.
amazonsChoicebooleanWhether the product carries the "Amazon's Choice" badge.

🏷️ Listing signals

FieldTypeDescription
isPrimebooleanWhether the listing shows the Prime badge.
isSponsoredbooleanWhether the card is a sponsored (paid) placement.
badgeTextstringSERP badge label (e.g. "Best Seller", "Amazon's Choice", "Climate Pledge Friendly").
deliveryTextstringDelivery promise string ("Get it by Tomorrow, July 26").
availabilityTextstringStock / availability string ("In Stock", "Only 3 left", …).
sellerTextstringWho sells the product / where it ships from.
hasAplusbooleanWhether the listing has A+ (enhanced brand) content.

🖼️ Media

FieldTypeDescription
thumbnailstringSearch-card thumbnail.
mainImagestringMain product image.
mainImageHiResstringMain product image at the full 1500 px resolution.
imagesarrayFull image gallery from the detail page.
imagesHiResarrayFull image gallery at 1500 px.
imageVariantsarrayVariant label per gallery image (MAIN, PT01, …).
videosarrayProduct video links.
leadColorstringDominant colour of the main image (hex).
dominantColorsarrayDominant colours of the main image (hex).

📋 Product details

FieldTypeDescription
featuresarrayThe "About this item" bullets.
descriptionstringLong-form product description.
specificationsobjectEvery spec table merged into one key/value map.
productDetailsobjectThe "Product details" table (Best Sellers Rank, Item Type Name, Model Number, …).
productOverviewobjectThe "Product overview" table.
additionalDetailsobjectStyle / materials & care / user guide / warranty rows.
itemTypeNamestringAmazon's item type ("Bottle", "Headphones", …).
modelNumberstringModel number.
modelNamestringModel name.
manufacturerPartNumberstringManufacturer part number (MPN).
manufacturerstringManufacturer name.
countryOfOriginstringCountry the product is made in.
upcstringUPC / EAN barcode.
itemWeightstringItem weight as stated by the seller.
dateFirstAvailablestringDate the product was first listed.
bestSellersRankarrayParsed category ranks: [{rank, category}].
bestSellersRankTextstringRaw best-sellers-rank line.
variationsobjectOption values per dimension ({color_name: [...]}).
variationAsinsobjectSibling ASINs of the variation graph.
whatsInTheBoxstringWhat's in the box.
warrantystringWarranty information.
sizeGuidestringSize guide.
brandInsightsstringBrand insights block.
brandStoreUrlstringLink to the brand's Amazon store.

🔍 Provenance & ranking

FieldTypeDescription
searchQuerystringThe keyword that produced this row.
searchUrlstringThe exact Amazon SERP URL the row was scraped from.
sourceTypestringHow the row was sourced. Always "keyword" for this scraper.
pageintegerResult page number (1-based).
positionOnPageinteger1-based position on this page, counting sponsored + organic.
organicRankintegerPosition among organic (non-sponsored) ASINs across all pages. Empty for sponsored cards.
globalPositioninteger1-based position across all unique ASINs for this keyword across all pages.
scrapedAtstringISO 8601 UTC timestamp of when the keyword was scraped.
enrichedbooleanWhether the detail page was fetched for this row.

💡 Tips

Workflow patterns from production users.

  • 🔬 Turn the deep data on. Set enrichDetails: true to get the specification tables, feature bullets, hi-res gallery, variations and the category hierarchy on every row.

  • 📦 Batch your keywords. One run with 50 keywords is much faster than 50 separate runs — and you get all the results in a single dataset.

  • 🎯 Track a specific ASIN. Even though the input is keywords, you can pull a single product's current search-page context by searching its exact brand + model — globalPosition makes it easy to see ranking drift over time.

  • 💸 Use discountPercent for deal hunting. A keyword where most top results show discountPercent >= 30 is a competitive, high-velocity niche — useful for sourcing or private-label research.

  • 🎯 Separate organic vs. paid winners. Filter the dataset on isSponsored=false to see real organic ranking for a keyword, then sort by organicRank to identify the top organic winners vs. paid placements.

  • 🖼️ Use imagesHiRes for catalogs. The search card gives a 200 px thumbnail; the enriched rows give the full gallery at 1500 px plus the dominant colour of the main image.

  • 🔀 Compare price vs pdpPrice. A gap means the search card and the detail page disagree — a useful signal that the listing is being repriced, or that a coupon/deal is active on the product page.

  • 🌐 Compare marketplaces. Run the same keyword against domain=com and domain=de to see how pricing, assortment, and review counts differ.

  • ⏰ Schedule hourly tracking. Combine with the Schedules tab to monitor a fixed keyword list daily — each row carries scrapedAt, so you can chart ranking and price drift over time.


❓ FAQ, disclaimers, and support

Tap a question to read the answer.

Scraping publicly visible Amazon search results is a common, lawful practice used by sellers, analysts, and researchers. You are responsible for complying with Amazon's Terms of Service and any applicable laws in your jurisdiction. Don't republish raw Amazon content at scale; use the data for analysis, internal tools, and product research.

🌍 Which Amazon marketplaces are supported?

All 11 — the region auto-matches the domain.

amazon.com (US) · amazon.co.uk (UK) · amazon.de (DE) · amazon.it (IT) · amazon.es (ES) · amazon.ca (CA) · amazon.com.mx (MX) · amazon.com.br (BR) · amazon.in (IN) · amazon.co.jp (JP) · amazon.com.au (AU)

🎯 What's the difference between positionOnPage, organicRank, and globalPosition?

FieldMeaning
positionOnPage1-based position on this specific search results page, counting sponsored + organic.
organicRankPosition among non-sponsored ASINs across all paginated rows. Empty for sponsored cards.
globalPosition1-based position across all unique ASINs across all pages for this keyword.

🔁 Why do I see duplicate ASINs in the raw output?

You shouldn't — the scraper de-duplicates by ASIN across all pages for a given keyword. If you see duplicates, you've likely joined two keywords' datasets downstream; searchQuery is the join key. A summary record reports the within-keyword duplicates the scraper filtered out.

🚫 Can I get more than 10,000 products per keyword?

No — maxResults is capped at 10,000. For bulk catalog scraping (millions of ASINs per category), use a dedicated category-browser scraper instead.

🧩 What's the keyword legacy field?

It's an alias for searchQuery. The scraper emits both for backward compatibility with older pipelines; new code should use searchQuery.

🔬 Does enrichment change the search-page numbers?

No. price, rating and reviewCount always hold what Amazon showed on the search page, so existing pipelines keep their current semantics. The detail-page values live in the pdp* columns (pdpPrice, pdpRating, pdpReviewCount, pdpListPrice, pdpDiscountPercent).

🌍 Are the fields localized?

They are read from the storefront of the marketplace you scrape, so the values are in that marketplace's language — the spec table on amazon.de calls the brand "Marke", on amazon.it "Marca" and on amazon.co.jp "ブランド名", and the scraper resolves all of them to the same brand field. The Best Sellers Rank is parsed out of every local convention: #12 in Sports, Nr. 12 in Elektronik, nº2 en Auriculares and 家電&カメラ - 327位 all become [{rank, category}].

Fields that Amazon only shows for part of the catalogue — dateFirstAvailable, itemTypeName, warranty, the Q&A count — are empty for the products that do not carry them, and specifications always holds every row the page had, in the original language.

💬 Custom solutions or integration help?

📬 Open an issue on the Apify console Issues tab for this scraper, or contact Apify support through the platform. The scraper is actively maintained and field-aligned with the leading Amazon search scrapers on the marketplace.