Amazon Search Scraper avatar

Amazon Search Scraper

Pricing

from $2.00 / 1,000 search result scrapeds

Go to Apify Store
Amazon Search Scraper

Amazon Search Scraper

Scrape Amazon search result pages by keyword or URL across 18 marketplaces. Extract rank, ASIN, title, price, rating, reviews, Prime, sponsored flags, badges, thumbnails, and product URLs in flat JSON optimized for SEO and AI agents. MCP/API-ready.

Pricing

from $2.00 / 1,000 search result scrapeds

Rating

0.0

(0)

Developer

Khadin Akbar

Khadin Akbar

Maintained by Community

Actor stats

0

Bookmarked

77

Total users

29

Monthly active users

3.4 hours

Issues response

a day ago

Last modified

Share

Amazon Search Scraper is an Apify Actor for Amazon search result pages by keyword or URL across 18 marketplaces. It accepts searchQueries, a single searchQuery, or startUrls, and returns one flat record per search result row. Each record can include rank fields, ASIN, title, product URL, marketplace, page position, organic rank, sponsored flag, price, rating, review count, Prime status, badges, thumbnails, and other visible search-card fields. The dataset is organized for SEO workflows, dashboards, and AI agents, and it is available through Apify API and Apify MCP.

Best fit and connected workflows

Use this Actor when your workflow starts with Amazon discovery and you want search-page data in a compact dataset:

  • Keyword rank tracking across Amazon marketplaces
  • SERP monitoring for branded or competitor terms
  • Ecommerce SEO reporting from Amazon search pages
  • Product discovery from a marketplace search URL
  • Agent workflows that need structured search rows before enrichment

If your next step is to turn selected search results into deeper product records, Amazon Product Details Scraper fits a workflow where you start with a search row, follow its product URL, and collect product-page fields. If your workflow continues from discovery into marketplace list analysis, Amazon Bestsellers Scraper works with selected public Amazon records. For public contact discovery tied to relevant listings, Amazon Seller Email Scraper - Public Contact Finder connects naturally after you identify the sellers or products you want to review.

Practical scenario

Maya manages ecommerce content for a home office brand. She starts with the keyword standing desk in the US marketplace and asks for 25 results per query. The dataset returns rows with globalPosition, organicRank, isSponsored, price, rating, reviewCount, badgeText, and searchUrl. Maya reviews the top organic positions, notes which cards are sponsored, and then uses the product URLs to route the most relevant listings into a deeper catalog review process.

Input fields

FieldTypeDescription
searchQueriesarrayAmazon keywords to search, one per line.
searchQuerystringOptional single keyword for API and MCP callers.
startUrlsarrayDirect Amazon search or category URLs. The URL domain overrides the selected marketplace.
countrystringMarketplace used for keyword searches.
maxResultsPerQueryintegerMaximum product rows returned for each keyword or start URL across all pages, not per page.
maxSearchPagesintegerMaximum Amazon result pages visited for each seed. Use 7 for a 100-row request.
sortBystringSorting for keyword searches.
includeSponsoredbooleanIncludes sponsored results and marks them with isSponsored.
proxyConfigurationobjectProxy settings for the run.

Use one input mode for a single search: searchQuery for one keyword, searchQueries for a list of keywords, or startUrls for existing Amazon search/category pages. When more than one mode is supplied, the Actor intentionally scrapes every supplied seed and labels each row with its searchQuery and searchUrl.

Example input:

{
"searchQueries": ["wireless earbuds"],
"country": "US",
"maxResultsPerQuery": 25,
"maxSearchPages": 2,
"sortBy": "relevance",
"includeSponsored": true,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"],
"apifyProxyCountry": "US"
}
}

Direct Amazon search or category URLs are also supported:

{
"startUrls": [
{ "url": "https://www.amazon.com/s?k=mechanical+keyboard" },
{ "url": "https://www.amazon.co.uk/s?k=running+shoes" }
],
"maxResultsPerQuery": 50
}

For up to 100 rows from an India 5G search, keep the query as 5g and set the row cap and page cap separately:

{
"searchQuery": "5g",
"country": "IN",
"maxResultsPerQuery": 100,
"maxSearchPages": 7,
"includeSponsored": true
}

For a larger request, use the same pattern. For example, request up to 700 rows with maxResultsPerQuery: 700 and maxSearchPages: 20 (the Actor's current page limit). Amazon may expose fewer results or cap pagination for a query, so the returned count is not guaranteed to equal the estimated number shown in Amazon's interface. A single page cannot return 700 rows.

Output fields

Each Amazon search result is stored as a flat JSON object in the default dataset. The run summary is stored in the default key-value store under OUTPUT.

FieldTypeDescription
asinstringAmazon Standard Identification Number.
titlestring or nullProduct title shown on the search result page.
urlstringProduct URL resolved from the search result card.
marketplacestringMarketplace code such as US, UK, DE, or JP.
searchQuerystring or nullKeyword used for the search, when available.
searchUrlstringSearch or category result page URL where this row was found.
sourceTypestringHow the search page was provided: keyword, searchUrl, or categoryUrl.
pageintegerSearch results page number.
positionOnPageintegerPosition of this product card on the current page, including sponsored rows.
organicRankinteger or nullOrganic position on the current page. Sponsored rows have null organic rank.
globalPositionintegerPosition across all pages for this seed after filtering.
isSponsoredbooleanWhether Amazon marks the result as sponsored.
pricenumber or nullCurrent price visible on the search result page.
listPricenumber or nullOriginal or strike-through price visible on the result card.
currencystring or nullISO currency code inferred from price text or marketplace.
discountPercentnumber or nullComputed discount percentage when price and list price are available.
ratingnumber or nullStar rating visible on the search result page.
reviewCountinteger or nullReview count visible on the search result page.
boughtInPastMonthstring or nullAmazon purchase-frequency text such as 10K+ bought in past month.
isPrimeboolean or nullWhether the card shows Prime eligibility.
thumbnailstring or nullPrimary product thumbnail URL.
badgeTextstring or nullBadge text such as suitable Seller or Amazon's Choice, when present.
deliveryTextstring or nullDelivery promise text visible on the result card.
couponTextstring or nullCoupon or savings text visible on the result card.
availabilityTextstring or nullAvailability state visible on the result card.
scrapedAtstringISO timestamp when the row was scraped.

Illustrative output record:

{
"asin": "B08N5WRWNW",
"title": "Wireless Earbuds Bluetooth Headphones",
"url": "https://www.amazon.com/dp/B08N5WRWNW",
"marketplace": "US",
"searchQuery": "wireless earbuds",
"searchUrl": "https://www.amazon.com/s?k=wireless+earbuds",
"sourceType": "keyword",
"page": 1,
"positionOnPage": 3,
"organicRank": 2,
"globalPosition": 3,
"isSponsored": false,
"price": 49.99,
"listPrice": 69.99,
"currency": "USD",
"discountPercent": 29,
"rating": 4.5,
"reviewCount": 12345,
"boughtInPastMonth": "10K+ bought in past month",
"isPrime": true,
"thumbnail": "https://m.media-amazon.com/images/I/example.jpg",
"badgeText": "Amazon's Choice",
"deliveryText": "FREE delivery Fri, Jun 12",
"couponText": "Save 10% with coupon",
"availabilityText": null,
"scrapedAt": "2026-06-11T10:00:00.000Z"
}

How it works

This Actor uses a search-focused crawl flow built on CheerioCrawler with residential proxies and session pooling. It reads either keyword inputs or Amazon search and category URLs, then extracts visible search result card data into flat dataset rows. The implementation targets 18 marketplaces: US, UK, DE, FR, CA, ES, IT, JP, AU, IN, MX, BR, NL, SE, PL, TR, AE, and SG. Its output is intentionally flat so it can be consumed directly by SEO tooling, API clients, and Apify MCP.

Pricing

Amazon Search Scraper uses Pay per event pricing plus Apify platform usage. The live Pricing tab is the source of truth for current charges.

  • An actor start event is charged when the run starts.
  • Each returned search result row is charged as one Search result scraped event.
  • Apify platform usage is billed alongside event charges, as shown in the live Pricing tab.

For example, if a run returns one hundred search result rows, the billed usage includes one actor start event and one hundred search result events, plus Apify platform usage from the live Pricing tab.

Use with AI agents (MCP)

This Actor is available through Apify MCP as a tool for Amazon search discovery. The tool accepts a keyword or Amazon search URL and returns structured rows with rank, ASIN, product URL, and visible marketplace fields.

Actor identity: khadinakbar/amazon-search-scraper

Search Amazon for "wireless earbuds" in the US marketplace. Return the top 10 results, include sponsored rows, and keep the output focused on rank, ASIN, title, price, rating, review count, and product URL.

Output interpretation:

  • globalPosition shows the row order across paginated results.
  • positionOnPage shows the card position on the current page.
  • organicRank is filled for organic rows and is null for sponsored rows.
  • isSponsored identifies Amazon-marked sponsored cards.
  • searchUrl preserves the source page used for the row.
  • thumbnail, badgeText, deliveryText, couponText, and availabilityText reflect visible card details when Amazon shows them.

Provenance and scope:

  • Results come from Amazon search result pages only.
  • The dataset reflects the search or category page you provide, or the keyword you set.
  • Product detail pages are a separate workflow step if you later need deeper enrichment.

Pagination and cost guidance:

  • maxSearchPages controls how many result pages the Actor visits per seed. Amazon often returns far fewer than 100 cards on one page; increase this when you need a larger total.
  • maxResultsPerQuery controls the total number of product rows returned per seed across all visited pages.
  • Because charging is per returned row, narrower queries and smaller result caps keep runs compact.

The Actor does not merge rows by similar title text. Search rows are identified by Amazon ASIN, so repeated cards with the same ASIN on one page are emitted once. A color, storage, or other option that is hidden behind one ASIN is not a separate search row; use a product-detail/variation workflow when you need every variation ASIN.

Example with the Apify API

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({
token: process.env.APIFY_TOKEN,
});
const run = await client.actor('khadinakbar/amazon-search-scraper').call({
searchQueries: ['standing desk'],
country: 'US',
maxResultsPerQuery: 10,
maxSearchPages: 1,
includeSponsored: false,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Best results and outcome guidance

Start with one keyword or one Amazon search URL and a small result cap so the dataset shape is easy to review. Use includeSponsored to match your reporting goal, and keep country aligned with the marketplace domain or keyword target. When your workflow is rank tracking, the most useful fields are globalPosition, organicRank, page, positionOnPage, and isSponsored. When your workflow is product selection, the most useful fields are title, url, price, rating, reviewCount, badgeText, and thumbnail.

If you ask for 100 rows, set maxResultsPerQuery to 100 and maxSearchPages to at least 7. The first value is the total row cap; the second is the pagination budget.

Continue the workflow

  • Then use Amazon Seller Email Scraper to continue from Amazon Search Scraper discovery into enrichment data for the selected records.
  • Then use Amazon Seller Scraper to continue from Amazon Search Scraper discovery into enrichment data for the selected records.

Design note

I found that the dataset contract includes both searchQuery and searchUrl, which makes each row easy to trace back to either a keyword seed or a direct Amazon page.

FAQ

When should I use searchQueries instead of startUrls?

Use searchQueries when you want keyword-based Amazon discovery. Use startUrls when you already have a search or category page and want rows from that exact page.

How does this Actor support rank tracking?

It returns page, positionOnPage, organicRank, and globalPosition, which together describe where each result appears in the Amazon search flow.

Does it deduplicate similar product titles or capture hidden variants?

No title-based deduplication is applied. Amazon ASIN identifies the search row, so two links with the same ASIN are one listing even when the visible title mentions different options. Distinct variation ASINs shown as separate Amazon search cards are returned; variations hidden behind a product detail page require a separate variation-enrichment step.

Can I work across multiple Amazon marketplaces?

Yes. The input schema includes 18 marketplace options, and a start URL can also determine the marketplace from its domain.

What comes next after discovery?

Use A common next step is to send selected product URLs into Amazon Product Details Scraper when you want deeper product-page enrichment for the listings you selected from search results.

Can I connect discovery to list analysis or seller contact workflows?

Use Yes. If you want public list-level analysis after discovery, Amazon Bestsellers Scraper fits a workflow built around selected Amazon records. If you want public contact discovery tied to relevant sellers, Amazon Seller Email Scraper - Public Contact Finder is a natural next step after you identify listings.

Responsible use

Use this Actor in line with applicable laws, Amazon site terms, and your internal data-handling policies. It is designed for publicly visible search result pages and for structured discovery workflows in Apify API and Apify MCP.