Amazon Search Scraper avatar

Amazon Search Scraper

Pricing

from $0.25 / 1,000 results

Go to Apify Store
Amazon Search Scraper

Amazon Search Scraper

Runs keyword searches on Amazon and returns the whole first results page in order: rank, ASIN, title, numeric price, currency, rating, review count and an isSponsored flag on ad placements. Starts from a keyword, not a known ASIN. Seven marketplaces, each searched in its own language.

Pricing

from $0.25 / 1,000 results

Rating

0.0

(0)

Developer

String

String

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

9 days ago

Last modified

Share

What does Amazon Search Scraper do?

It runs keyword searches on Amazon and returns every product on the first results page in the order it appeared, one row each: on-page rank, asin, title, a numeric price with its currency, rating, reviewCount, imageUrl and an isSponsored flag marking the paid placements.

Of our three Amazon Actors, this is the discovery one. It is the only one that starts from a keyword: Amazon Product Scraper needs ASINs you already hold, and Amazon Bestsellers Scraper starts from a category slug. Search is the Actor to reach for when the question is "who shows up for this term, in what order, at what price" — including the ads, which are usually the point.

  • rank is the position on the page with ad placements counted in their real slots, and isSponsored tells you which rows those are. Organic rank and sponsored share both fall out of the same dataset.
  • Up to 50 keywords per run, one results page each, roughly 22 rows per keyword.
  • Seven marketplaces: US, UK, Germany, France, Spain, Japan and Australia.
  • Each search is pinned to an exit in its own country and carries Amazon's own language parameter, so a German search returns German titles and euro prices.
  • The review count is the exact figure where the page carries one, not the rounded 8.1K badge.

No Amazon account, API key or cookies are involved. Median of about 3.4 seconds per search in our own measurements.

What data does it extract?

FieldTypeDescription
querystringThe search term this row came from, echoed onto every row
ranknumberPosition on the results page, 1-based, ads counted in place
asinstringAmazon's ten-character product ID. Feed it straight to the Amazon Product Scraper
titlestringThe product title, not the brand line that sits above it in Amazon's elevated grid layout
pricenumber24.99, not "$24.99"
priceTextstringThe price as the storefront printed it, grouping and symbol included
currencystringISO code read from what the page actually printed: USD, GBP, EUR, JPY, AUD
ratingnumberStars out of 5, with locale decimal commas handled — 4,5 von 5 on amazon.de is 4.5
reviewCountnumberExact where the page states it exactly: 8157 rather than 8.1K
isSponsoredbooleantrue for an ad placement
imageUrlstringThe result thumbnail
marketplacestringus, uk, de, fr, es, jp or au
sourceUrlstringThe search URL that was fetched
collectedAtstringISO timestamp stamped once per run

A result with no visible price returns price, priceText and currency as null rather than zero, which matters more than it sounds: ad tiles are the rows most likely to omit a price.

How the page is read

A search page carries no state blob and runs 1.2 to 2.5MB, so the result grid is parsed directly. Two details are worth knowing because they show up in the data:

Each result element is sliced by balancing its <div> tags rather than by cutting at the next result. Amazon injects comparison tables, brand carousels and a page footer between rows; cutting at the next result folds all of that into whichever row precedes it, and a neighbour's price then leaks into a row that has none of its own.

Sponsored rows are detected from markup classes, not from the visible "Sponsored" label. The label is translated on every non-English storefront, and the accessibility text with it, so a label-matching detector quietly returns isSponsored: false everywhere outside the US and UK. The class names do not move.

Geography, language and currency

marketplace sets three things at once, and all three are load-bearing:

  • The exit country. The search is fetched from inside that country. This settles the currency and, on some storefronts, whether an ad tile carries a price at all.
  • The language. Amazon's own language parameter rides the search URL, which is what actually switches the copy. An Accept-Language header measurably does not, which is why the parameter is used instead. A de search returns German titles.
  • The currency fallback. currency is read from the symbol or ISO code the page printed. Where a price prints a bare $, ambiguous between the US and Australian storefronts, the marketplace settles it.

So the same keyword on us and de gives you two different result sets in two languages and two currencies, which is the honest answer — Amazon genuinely ranks and prices them differently. Nothing is translated or converted on the way out.

Why scrape Amazon search results?

  • Keyword rank tracking. Run your terms daily, filter to your own ASINs, and you have the rank history that Seller Central will not give you for competitors.
  • Ad-share measurement. Count isSponsored rows on page one and you know how much of the term is being bought rather than earned, before you bid on it.
  • Competitor discovery. The ASINs ranking for the terms you sell against are the shortlist worth enriching with the product Actor.
  • Price benchmarking. Numeric prices across a keyword's whole first page give you the actual price band a shopper sees, not the band you assume.
  • Market entry checks. The same keyword across seven storefronts shows where a category is crowded and where it is thin.

How to use it

  1. Open the Actor and click Try for free.
  2. Put your keywords in Search terms, one per line, up to 50.
  3. Pick a Marketplace. One marketplace per run — to compare storefronts, run the same keyword list once per marketplace, since every row carries its own marketplace and the datasets concatenate cleanly.
  4. Set Maximum results and Concurrency to taste.
  5. Run it, then export the dataset as JSON, CSV or Excel, or read it through the API. The SUMMARY record lists any query that failed, with the reason.

Input

FieldTypeDefaultNotes
queriesarray of stringsrequiredKeywords to search, 1 to 50 per run
marketplacestringusOne of us, uk, de, fr, es, jp, au
maxItemsinteger1000Ceiling on dataset rows, 1 to 50,000
concurrencyinteger5Searches fetched in parallel, 1 to 10
{
"queries": ["wireless earbuds", "usb c charger", "standing desk"],
"marketplace": "us",
"maxItems": 1000,
"concurrency": 5
}

Duplicate keywords collapse before anything is fetched. Search operators and filters are not supported: the keyword goes into Amazon's k parameter as typed, and no department restriction, sort order or price filter is applied on top.

Output

One row per search result. This is the shape rather than a captured run:

[
{
"query": "wireless earbuds",
"rank": 1,
"asin": "B0C33XXS56",
"title": "Wireless Earbuds Bluetooth 5.3 Headphones with Charging Case",
"price": 24.99,
"priceText": "$24.99",
"currency": "USD",
"rating": 4.3,
"reviewCount": 8157,
"isSponsored": true,
"imageUrl": "https://m.media-amazon.com/images/I/61jT4tGqNBL._AC_UL320_.jpg",
"marketplace": "us",
"sourceUrl": "https://www.amazon.com/s?k=wireless%20earbuds&language=en_US",
"collectedAt": "2026-08-20T09:14:02.881Z"
},
{
"query": "wireless earbuds",
"rank": 2,
"asin": "B0CHX3QBCH",
"title": "Apple AirPods Pro 2 Wireless Earbuds, USB-C Charging Case",
"price": 189.99,
"priceText": "$189.99",
"currency": "USD",
"rating": 4.7,
"reviewCount": 108442,
"isSponsored": false,
"imageUrl": "https://m.media-amazon.com/images/I/61SUj2aKoEL._AC_UL320_.jpg",
"marketplace": "us",
"sourceUrl": "https://www.amazon.com/s?k=wireless%20earbuds&language=en_US",
"collectedAt": "2026-08-20T09:14:02.881Z"
}
]

How much does it cost?

Pay-per-event: you are charged per result row written to the dataset. Rows are only written when they can be charged, so reaching your spend limit stops the run writing rather than delivering unbilled rows. The per-row figure is on the Actor's Store page, where it stays current.

Runs started from an Apify free plan stop at 250 requests and 250 results, with a status message saying so. Any paid plan runs the full input and the maxItems you set. Because a keyword yields roughly 22 rows, a free run is bounded by rows long before it is bounded by keywords.

The limit exists because this Actor fetches through our own scraping infrastructure, which Apify does not cover for free-plan runs. It binds on requests as well as rows so that a long keyword list cannot spend fetches on rows the run will not return.

Using it with the Apify API

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('usestring/amazon-search').call({
queries: ['wireless earbuds', 'usb c charger'],
marketplace: 'de',
maxItems: 500
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
const sponsored = items.filter((item) => item.isSponsored).length;
console.log(`${sponsored} of ${items.length} rows are ads`);

The Python client and the REST API expose the same run, and a schedule turns this into a daily rank snapshot without further work.

Search results are public: no login, no cookies, no API key, and the Actor sees what an anonymous visitor sees. The rows hold product data — rank, ASIN, title, price, rating, review count, ad flag — with no reviewer names, no review text and no personal data.

Collecting public data is broadly lawful in the US and the EU, though what applies to you depends on your jurisdiction and on what you do with the data afterwards, and Amazon's terms are a separate matter from the law. None of this is legal advice.

Limitations

One results page per keyword. There is no pagination into page two, no sort order, no department or price filtering, and no search-operator support. Rows carry only what the grid shows, so there is no description, availability, seller or variant data — run the returned ASINs through the Amazon Product Scraper for those. Marketplaces beyond the seven listed above, amazon.in included, are not supported. Rankings are the page as it stood at collectedAt, and Amazon's results vary over time and by shopper.

FAQ

How many results does one keyword return? Roughly 22 — one Amazon results page. The Actor does not paginate, so one keyword is one fetch and one page of rows.

Are sponsored products included? Yes, and they are labelled. isSponsored marks them and rank counts them in the slot they occupy, because where an ad sits is usually the thing being measured. Filter them out afterwards if you want organic-only rank.

Can I search several marketplaces in one run? Not in one run — marketplace is a single choice. Run the same keyword list once per marketplace; every row carries its marketplace, so the datasets combine without extra work.

Can I use search filters, a sort order or a department? No. The keyword is sent as typed, and Amazon's default relevance ordering is what you get.

Is the price a number? Yes. price is numeric, priceText keeps the original formatting, and currency is read from what the page printed rather than assumed from the storefront.

What happens to a query that fails? It is recorded under failures in the run's SUMMARY record with the URL and the reason, and the other queries still return their rows. If every query fails, the run fails rather than reporting an empty success.

Feedback

Found a keyword that parses badly, or a marketplace behaving oddly? Open an issue from the Actor's Store page with the exact query and marketplace, and it can be reproduced in a single run.