Amazon Search Products Scraper
Pricing
$14.99/month + usage
Amazon Search Products Scraper
Scrapes Amazon search results for any keyword or category, capturing product titles, prices, images, ratings, reviews, ASINs, sellers, and rankings. Ideal for product research, competitor tracking, trend analysis, and large-scale Amazon search data extraction
Pricing
$14.99/month + usage
Rating
0.0
(0)
Developer
Scrapio
Maintained by CommunityActor stats
1
Bookmarked
25
Total users
3
Monthly active users
2 days ago
Last modified
Categories
Share
Amazon Product Scraper — Extract Products, Prices and Ratings
Amazon Search Products Scraper extracts product listings, prices, ratings, and search metadata directly from Amazon's search results pages — by keyword or by pasted search URL, across 16 Amazon marketplaces. Unlike scraping frameworks that return raw HTML, it returns typed JSON — ready for your model, your database, or your pipeline without any parsing. Each row carries the ASIN, price, rating, review count, Prime and sponsored flags, plus the real total result count and related keywords Amazon itself reports for that search. This guide covers every input and output field, and how teams deploy it for enrichment, monitoring, and dataset builds.
🧭 What Does Amazon Search Products Scraper Do?
Amazon Search Products Scraper runs an Amazon search — by plain keyword or by a full Amazon search URL — and returns one structured record per product card found on the results pages. It works against the public, logged-out search results page: no Amazon account, login, or session is required. It returns a single entity type (search-result products), with each row carrying both product fields and the search metadata that produced it, so a result never needs to be joined back to its query manually.
- Runs searches from plain keywords ("Playstation") or full Amazon search URLs, one search per input item
- Preserves filters already encoded in a pasted search URL — department, browse-node/refinement, price range, and sort
- Extracts core commerce fields per product: ASIN, title, price, list price, rating, review count, Prime/sponsored flags
- Extracts secondary product signals: sales-volume text, delivery message, manufacturer, series, variations, short detail snippets, and used/refurbished ("secondary offer") price
- Returns Amazon's own real total result count and the related-search suggestions shown on the page
- Paginates automatically (auto-continue) or up to a fixed page cap you set
- Falls back through datacenter and then residential proxy tiers when a request is blocked, if Apify Proxy is enabled
⚡ Features & Capabilities
The Actor's feature set breaks down into what it scrapes, how it fits with other Scrapio Amazon Actors, and how you connect it to your own workflow — covered in the sections below.
Core features
- Keyword or URL input —
startUrlsaccepts a mix of plain keywords and full Amazon search URLs in the same run. - Filter-preserving URL parsing — when a pasted URL contains
rh(refinements/browse node),i(department),low-price,high-price,s(sort),bbn, orfield-keywords, those parameters are carried into the request instead of being stripped down to a bare keyword search. - 16 supported marketplaces —
amazonDomainselects the storefront (amazon.com,.co.uk,.de,.fr,.it,.es,.ca,.com.au,.co.jp,.in,.com.mx,.com.br,.nl,.se,.sg,.ae); any other value falls back toamazon.com. - Real result counts, not estimates —
resultCountis read from Amazon's embeddedtotalResultCountsearch metadata (or the visible results toolbar as a fallback), not a hardcoded number. - Proxy fallback ladder — with Apify Proxy enabled, a blocked or soft-blocked request escalates from no proxy → datacenter → residential (up to 3 residential retries) before the page is marked
BLOCKED. - Typed, per-product JSON fields — every product row exposes
asin,productDescription,imgUrl,price,retailPrice,productRating,countReview,dpUrl,prime,sponsored,salesVolume,deliveryMessage,manufacturer,series,variations,productDetails, andsecondaryOffer— copied directly from the row the Actor pushes to the dataset. - Search metadata on every row —
keyword,domainCode,page,selectedCategory,browseNode,resultCount,categories,similarKeywords,currentPage,sortStrategy, andsearchResultPositiontravel with each product, so you never need a second lookup to know which query produced which row.
Amazon Search Products Scraper within the Scrapio data stack
Amazon Search Products Scraper covers search-result products — what shows up when someone runs a keyword search on Amazon. It does not scrape seller storefronts or best-seller rankings. For seller name, ratings, feedback snippets, and policies behind a listing, use Amazon Seller Data Extractor. For best-seller rankings and the full category/browse-node tree, use Amazon Bestsellers Scraper By Category. All three read the public Amazon front end and require no Amazon login.
Why do developers and data teams scrape Amazon?
Amazon search data is pulled by a fairly consistent set of teams, since a single search result page carries pricing, ranking, and demand signals at once. The audiences below are the ones this specific dataset genuinely serves — not a generic list.
🏢 E-commerce sellers and brand managers
A seller running the same product line watches price and retailPrice across their own and competing ASINs for a search term, checks sponsored to see who is paying for placement on that keyword, and reads searchResultPosition to track organic rank movement over time. A typical workflow: run the same startUrls keyword list on a schedule, pin sortOrder to relevanceblender (what shoppers actually see by default), and load the dataset into a spreadsheet or BI tool keyed on asin + keyword. Because manufacturer and series are extracted per row, a brand manager can also isolate their own listings from a category-wide keyword sweep without manually tagging them first.
📊 AI training data and RAG indexing
The text-heavy fields — productDescription, productDetails, manufacturer, series, and categories — are the ones worth indexing for retrieval, since they carry the free-text a shopper or an LLM would actually query against. For RAG, indexing productDescription and productDetails alongside price and productRating lets an agent answer "what's a good budget option for X" with grounded, current listings instead of stale model knowledge. For training data, the numeric and boolean fields (price, countReview, prime, sponsored) return as consistent typed primitives on every row, so a dataset built from many searches doesn't need type-coercion or null-handling logic before it's usable.
📱 Competitive and market intelligence
Tracking sponsored over repeated runs on the same keyword shows which competitors are actively buying ad placement for that term, and tracking price/retailPrice shows who is discounting. resultCount (Amazon's real result count for the search) and similarKeywords (the related-search suggestions Amazon itself surfaces) together indicate whether a term is a growing or shrinking category — useful input for a catalogue or content strategy decision that shouldn't rest on price alone.
🔬 Research and academic use
Amazon search results are a standing dataset for e-commerce and consumer-behavior research — price dispersion within a category, the prevalence of sponsored placements, or how rating and review-count correlate with search rank. Everything returned comes from the public, logged-out search page; no account-gated or private data is involved, which keeps this scope to publicly observable market structure rather than individual consumer records.
🎥 Product and SaaS development
Teams building a price-comparison tool, a catalogue enrichment API, or a "monitor this search term" SaaS feature can use this Actor as the ingestion layer: run it on a schedule per tracked keyword, store the dataset rows keyed on asin, and expose price, productRating, prime, and dpUrl to the end product without building and maintaining an Amazon parser in-house.
🍚 Input Parameters
All parameters below are taken from .actor/actor.json's input schema, in schema order, with the exact names, types, and defaults the Actor uses.
| Parameter | Required | Type | Description | Example Value |
|---|---|---|---|---|
startUrls | Yes | array | Keywords (e.g. "Playstation") or full Amazon search URLs. Each item runs as a separate search. | ["Playstation", "https://www.amazon.com/s?k=TV"] |
amazonDomain | No | string | Amazon marketplace to scrape. Supported: amazon.com, .co.uk, .de, .fr, .it, .es, .ca, .com.au, .co.jp, .in, .com.mx, .com.br, .nl, .se, .sg, .ae. Any other value falls back to amazon.com. Default: "amazon.com" | "amazon.co.uk" |
language | No | string (enum) | Sets the page Accept-Language header. Leave empty to auto-detect from the domain. Enum: "", en-US, en-GB, de-DE, fr-FR, es-ES, it-IT, ja-JP, nl-NL, sv-SE, pt-BR. Default: "" | "en-GB" |
proxyCountry | No | string (enum) | Proxy country, or AUTO for automatic selection. Pin to the marketplace's country for the most accurate prices/availability. Enum: AUTO, US, GB, DE, FR, ES, IT, CA, AU, JP, IN, MX, BR, NL, SE, SG, AE. Default: "AUTO" | "US" |
sortOrder | No | string (enum) | Amazon search result sort order. Enum: relevanceblender, price-asc-rank, price-desc-rank, review-rank, date-desc-rank. Default: "relevanceblender" | "price-asc-rank" |
maxPages | No | integer | Max pages to scrape per search. Min 1, max 1000. Keep 1 for auto-continue mode (stops after 2 consecutive empty pages); raise it to enforce a strict page cap. Default: 1 | 3 |
proxyConfiguration | No | object | Standard Apify proxy object. Default: no proxy. On a block, the Actor can fall back to datacenter then residential proxies. | {"useApifyProxy": true} |
Input example
{"startUrls": ["Playstation","https://www.amazon.com/s?k=wireless+headphones&low-price=20&high-price=60"],"amazonDomain": "amazon.com","language": "","proxyCountry": "AUTO","sortOrder": "relevanceblender","maxPages": 1,"proxyConfiguration": { "useApifyProxy": false }}
Supported URL types and input formats
startUrls accepts three input shapes in the same run:
- A plain keyword —
"Playstation". Runs a default search on the selectedamazonDomainwith no filters applied. - A full, unfiltered search URL —
"https://www.amazon.com/s?k=TV". The keyword is read from thekquery parameter (orfield-keywordsif present instead); the domain is detected from the URL host and overridesamazonDomainfor that item. - A filtered search URL —
"https://www.amazon.com/s?k=running+shoes&rh=n:679255011&low-price=20&high-price=60". Therh(browse node / category refinement),i(department),low-price,high-price,s(sort),bbn, andfield-keywordsparameters are all preserved and re-applied on every subsequent page, instead of being dropped down to a bare keyword search.
📦 Output Format
Every dataset row is a single Amazon search-result product. The Actor pushes one row per product found, charging the row_result pay-per-event on each push; pages that come back blocked, time out, or return no results are logged to the run's output log but are not pushed as dataset rows, so they are never billed.
Output for search result products
{"asin": "B0CL5KNB9M","productDescription": "PlayStation®5 Digital Edition (slim)","imgUrl": "https://m.media-amazon.com/images/I/51fM0CKG+HL._AC_UY218_.jpg","price": 449.0,"retailPrice": null,"productRating": "4.7 out of 5 stars","countReview": 10500,"dpUrl": "https://www.amazon.com/PlayStation-5-Digital/dp/B0CL5KNB9M/ref=sr_1_1","prime": true,"sponsored": false,"salesVolume": "7K+ bought in past month","deliveryMessage": "FREE delivery Sun, Jun 8","manufacturer": "Sony","series": null,"variations": [],"productDetails": [],"secondaryOffer": null,"statusCode": 200,"statusMessage": "FOUND","keyword": "Playstation","domainCode": "com","page": 1,"selectedCategory": "aps","browseNode": null,"resultCount": 7198,"categories": [],"similarKeywords": [{ "keyword": "playstation 5", "url": "https://www.amazon.com/s?k=playstation+5&ref=rsl_sug_0_0" }],"currentPage": 1,"sortStrategy": "relevanceblender","searchResultPosition": 0}
Field-by-field reference (all 30 keys the Actor writes on every product row):
| Field | Type | Description |
|---|---|---|
asin | string | null | Amazon Standard Identification Number, read from the product card's data-asin attribute. |
productDescription | string | null | Product title text. |
imgUrl | string | null | Thumbnail image URL. |
price | number | null | Current price, parsed from the visible price element. null when no price is shown. |
retailPrice | number | null | List/strike-through price, when a second price element is present. |
productRating | string | null | Rating text as shown, e.g. "4.7 out of 5 stars". |
countReview | integer | null | Number of ratings. null (never a fabricated 0) when not shown. |
dpUrl | string | null | Absolute product detail-page URL. |
prime | boolean | true if a Prime badge is present on the card. |
sponsored | boolean | true if the card matches a sponsored-placement selector. |
salesVolume | string | null | Raw demand text, e.g. "7K+ bought in past month". |
deliveryMessage | string | null | Delivery/shipping text shown on the card. |
manufacturer | string | null | Brand parsed from the title byline or brand span; overlay badges (e.g. "Amazon's Choice") are filtered out and never returned as a brand. |
series | string | null | Series/model string, matched from the title text with a Series X / Model X pattern. |
variations | array of string | Variation labels (color/size options) visible on the card, capped at 5. |
productDetails | array of string | Short detail/bullet snippets from the card, capped at 3. |
secondaryOffer | number | null | Used/refurbished offer price, when present. |
statusCode | integer | 200 for a found product row. |
statusMessage | string | "FOUND" for a found product row. |
keyword | string | The search term this row was found under. |
domainCode | string | Marketplace domain code, e.g. com, co.uk, de. |
page | integer | Search results page this product was found on. |
selectedCategory | string | null | Department/category applied — from a pasted i= parameter, or Amazon's own search alias for the term. |
browseNode | string | null | Browse-node ID, when a rh=n: refinement was applied to the search. |
resultCount | integer | null | Real total result count for the search, read from Amazon's own search metadata. |
categories | array of string | Category chips/breadcrumbs detected on the results page. |
similarKeywords | array of object | Related-search suggestions, each { "keyword": string, "url": string }. |
currentPage | integer | Same value as page. |
sortStrategy | string | The sortOrder input value used for this search. |
searchResultPosition | integer | Zero-based position of the product on its results page. |
Schema stability and export options
Field names stay stable across runs and are not renamed when Amazon changes its page markup — extraction functions are written to fall back to alternate selectors or return null rather than silently reshaping the schema, so a field disappearing from Amazon's HTML shows up as null, not as a missing or renamed key. Results export from the Apify platform as JSON, CSV, Excel, XML, or RSS, and are readable programmatically through the Apify API or SDKs — no separate transformation step is required before loading them into a spreadsheet or a database.
💡 Amazon Search Products Scraper Strategy Guide
The three patterns below cover how teams actually run this Actor in production, beyond a single one-off search.
🎯 Strategy 1: Real-time enrichment pipeline
Use this when an existing product record (a catalogue row, a price-comparison entry, a chatbot's grounding lookup) needs a live Amazon price and rating attached to it. Trigger a run with the product name or ASIN-derived term as a single startUrls entry and maxPages: 1 (fast, auto-continue mode). Match the returned row back to your record on asin, then write price, retailPrice, productRating, countReview, and prime back into your system. Because the run returns typed JSON, no parsing step sits between the Actor and your database write.
🎯 Strategy 2: Scheduled monitoring and alerting
Use this to track price or ranking movement on a fixed set of search terms over time. Set up a recurring run — an Apify Scheduler entry with a cron-style interval — against the same startUrls keyword list and the same sortOrder, so results are directly comparable run over run. Diff each new run's price, sponsored, and searchResultPosition per asin against the previous run's dataset, and alert only on the delta that matters to you — a price drop past a threshold, a competitor's sponsored flag flipping to true, or a rank change past a position you track.
🎯 Strategy 3: Bulk dataset build
Use this to build a market or research dataset spanning many keywords. One important limitation to plan around: within a single run, searches and pages are processed sequentially — one keyword after another, with a short randomized delay between them — there is no in-run concurrency across searches. For a large keyword list, split it across multiple parallel Actor runs (via the Apify API) rather than relying on one run to parallelize internally, then aggregate each run's dataset export into a single CSV or database table keyed on keyword + asin.
Strategy comparison at a glance
| Strategy | Best for | Run pattern | Output format |
|---|---|---|---|
| Real-time enrichment | Attaching a live price/rating to a known product | Single on-demand run, maxPages: 1 | JSON via Apify API, read immediately |
| Scheduled monitoring | Price and rank tracking over time | Recurring scheduled run, same keyword list & sort order | Dataset diffed run-over-run, CSV/JSON export |
| Bulk dataset build | Large keyword/market sweep | Multiple parallel runs, keyword list split across them | Aggregated CSV or database load |
🌴 Related Amazon Scrapers & Tools
| Scraper | What it extracts |
|---|---|
| Amazon Seller Data Extractor | Seller name, rating, feedback snippets, return/shipping policies, and contact links behind Amazon listings. |
| Amazon Bestsellers Scraper By Category | Best-seller product rankings plus the full category/browse-node tree, with nodeId, parentNode, depth, and productCount per node. |
| eBay Scraper: Sold Listings & Price Trend Analytics | Sold eBay listings with price history, for cross-marketplace price comparison against the same product. |
| eBay Seller Scraper — Full Listings, Specifics & Shipping | Full eBay seller listings, item specifics, and shipping terms. |
| Alibaba Email Product Sourcing Lead Scraper | Supplier emails joined with Alibaba product data (price, MOQ, discount, delivery) for sourcing research. |
| Google Trends Scraper (Regional Popularity Breakdown) | Regional search-interest trends, useful alongside resultCount and similarKeywords to validate keyword demand. |
How to integrate Amazon Search Products Scraper with your stack
Amazon Search Products Scraper works with any language or tool that can call the Apify API — there is no separate REST surface to learn beyond the standard Apify Actor run and dataset endpoints.
Python
from apify_client import ApifyClientimport csvclient = ApifyClient("<YOUR_APIFY_API_TOKEN>")keywords = ["Playstation", "wireless headphones", "robot vacuum"]run_input = {"startUrls": keywords,"amazonDomain": "amazon.com","sortOrder": "relevanceblender","maxPages": 2,"proxyConfiguration": {"useApifyProxy": True},}run = client.actor("scrapio/amazon-search-products-scraper").call(run_input=run_input)rows = list(client.dataset(run["defaultDatasetId"]).iterate_items())with open("amazon_products.csv", "w", newline="", encoding="utf-8") as f:writer = csv.DictWriter(f, fieldnames=list(rows[0].keys()))writer.writeheader()writer.writerows(rows)print(f"Exported {len(rows)} product rows to amazon_products.csv")
Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_API_TOKEN>' });const run = await client.actor('scrapio/amazon-search-products-scraper').call({startUrls: ['Playstation', 'https://www.amazon.com/s?k=TV'],amazonDomain: 'amazon.com',sortOrder: 'price-asc-rank',maxPages: 3,proxyConfiguration: { useApifyProxy: true },});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(`Fetched ${items.length} products`);items.forEach((item) => console.log(item.asin, item.price, item.productDescription));
Async and scheduled pipelines
For large keyword lists, call .start() instead of .call() to kick off a run without blocking, then poll client.run(runId).get() for status or register a webhook on the ACTOR.RUN.SUCCEEDED event to be notified when the dataset is ready — no need to hold a connection open for the run's duration. For recurring pulls, set up an Apify Scheduler entry against this Actor with the same input so runs happen on a fixed interval without manual triggering.
🎯 Who Needs Amazon Search Products Scraper? (Use Cases & Industries)
🏢 E-commerce sellers and brand managers
A seller tracks price, retailPrice, and sponsored for their own ASINs against competitors on the same search term, and watches searchResultPosition to catch organic rank drops before they show up in sales numbers.
📊 AI and data teams building RAG or training pipelines
A team indexing productDescription and productDetails alongside price and productRating gives a shopping assistant grounded, current answers instead of relying on a model's stale training-time knowledge of a product catalogue.
📱 Market and competitive intelligence analysts
An analyst runs the same keyword weekly and tracks sponsored, price, and resultCount deltas to report on category-level ad spend and pricing shifts to stakeholders, without manually re-searching Amazon each time.
🔬 Researchers
Academic and market researchers use search-result snapshots — price dispersion, sponsored-placement prevalence, rating/rank correlation — as a standing, publicly observable dataset for e-commerce studies, scoped to public search pages only.
🎥 Product and SaaS developers
A developer building a price-tracking or catalogue-enrichment product uses this Actor as the ingestion layer, running it per tracked keyword on a schedule and exposing price, productRating, prime, and dpUrl in their own product without maintaining an Amazon parser in-house.
Is it legal to scrape Amazon?
Scraping publicly accessible web pages is generally lawful in the United States — courts have found that accessing data a website makes available to any visitor, without bypassing a login wall, does not violate the Computer Fraud and Abuse Act (hiQ Labs, Inc. v. LinkedIn Corp., 9th Cir., 2019). That said, two separate questions matter here. First, violating a platform's Terms of Service is a matter of contract and civil risk, not a criminal one — Amazon's terms restrict automated access, so scraping at scale can put an account or IP at risk of being blocked, independent of the public-data question. Second, data protection law: this Actor returns only product and marketplace listing data — no personal or seller-identifying information — so GDPR-style personal-data obligations generally do not apply to its output. Amazon Search Products Scraper returns only publicly accessible data. What you do with that data is your responsibility — consult legal counsel for commercial applications, especially outside the jurisdiction this guidance covers.
❓ Frequently asked questions
Does Amazon Search Products Scraper work without an Amazon account?
Yes. It scrapes Amazon's public, logged-out search results pages; no Amazon account, login, or session cookie is required to run it.
How does Amazon Search Products Scraper handle Amazon's anti-scraping measures?
It sends browser-like request headers (matching Chrome's Sec-Fetch/Accept/Accept-Language headers) with placeholder session cookies, detects soft blocks by checking for a missing product-result container combined with an undersized or captcha-flagged page body, and retries with exponential backoff on timeouts. If Apify Proxy is enabled, a blocked request escalates through a fallback ladder — no proxy → datacenter proxy → residential proxy, with up to 3 residential retries — before the page is marked BLOCKED.
Can I run Amazon Search Products Scraper at scale without getting blocked?
Reliability at scale depends mainly on whether Apify Proxy is enabled — direct (proxy-less) requests are more likely to be blocked on larger keyword lists. Within a single run, searches and pages are processed sequentially, not in parallel; for large-scale scraping, split your keyword list across multiple parallel runs rather than one large run. No uptime or success-rate figure is published for this Actor.
How fresh is the data Amazon Search Products Scraper returns?
Every run fetches Amazon's search results live at request time — there is no caching layer in the Actor, so each run reflects Amazon's current page content for that search at the moment it runs.
Which fields work best for AI training and RAG indexing?
For RAG, index productDescription and productDetails — the free-text fields a query would actually match against — alongside price and productRating for grounding. For training data, the numeric and boolean fields (price, countReview, prime, sponsored) return as consistent typed primitives on every row, requiring no null-handling or type-coercion pass before use.
Does Amazon Search Products Scraper work with Claude, ChatGPT, and other AI agent tools?
Yes, as an HTTP-callable Apify Actor — any agent framework that can call the Apify API (start a run, then read the dataset) can use it. Every field returns as typed JSON, so an agent can consume the output directly without an HTML-parsing step.
What happens when a search page is blocked or times out?
The Actor logs the failure (BLOCKED, TIMEOUT, or ERROR with the relevant status) to the run's output log, but does not push a row for that page to the dataset — so a blocked or failed page never appears as (and is never charged as) a dataset row.
Can I paste a filtered Amazon search URL instead of a plain keyword?
Yes. A pasted URL's department (i), browse-node/refinement (rh), price window (low-price/high-price), and sort (s) parameters are preserved and re-applied on every subsequent page of that search, instead of being reduced to a bare keyword search.
Which Amazon marketplaces are supported?
16 marketplaces: amazon.com, .co.uk, .de, .fr, .it, .es, .ca, .com.au, .co.jp, .in, .com.mx, .com.br, .nl, .se, .sg, and .ae. Any other amazonDomain value falls back to amazon.com.
Does Amazon Search Products Scraper collect full customer review text?
No. It returns the rating (productRating) and review count (countReview) shown on the search results card, not the text of individual customer reviews from a product's review page.
ℹ️ Disclaimer
Amazon Search Products Scraper extracts only publicly available data from Amazon's search results pages. This tool is intended for lawful use cases only. Users are responsible for complying with Amazon's terms of service and applicable data protection laws in their jurisdiction.