SFOLN

Catalogue / Company & lead intelligence

Amazon Search Results Scraper

sfoln/amazon-search · Ecommerce, Lead generation, Automation On request

Search Amazon by keyword on 13 marketplaces and get every product on the results page: ASIN, title, URL, price, rating, review count, badges, sponsored flag and delivery. $12 per 1,000 keyword searches + $0.20 per 1,000 products.

About

What it does

Amazon Search Results Scraper searches Amazon by keyword and returns every product card on the results page as clean JSON: ASIN, title, URL, price, star rating, review count, Amazon's Choice and Best Seller badges, sponsored flag, delivery message, "bought in past month" and image. Works on 13 Amazon marketplaces (amazon.com, .co.uk, .de, .fr, .it, .es, .ca, .com.au, .in, .nl, .com.mx, .com.br, .co.jp) with price, department and sort filters. Use it for product research, price and rank monitoring, competitor and sponsored-ad tracking, or as a shopping search tool for AI agents. Results come live from Amazon through DataForSEO; you pay $0.012 per keyword plus $0.20 per 1,000 products.

Price

Price per delivered record

EventPricePer 1,000Charged for
Amazon search query
amazon-search-query
$0.012$12 / 1,000Charged once per keyword searched on Amazon (covers the per-request fee).
Amazon search result
amazon-search-result
$0.0002$0.20 / 1,000Charged once per product record delivered.

Apify free plan: up to 10 items per run. Paid plans have no per-run cap; set maxTotalChargeUsd to cap spend.

Run

Call it from code, an agent or the Console

This API is private on Apify for now. Email us and we will publish it for you, usually within two working days. The calls below work once it is public. contact@sfoln.com

curl · synchronous run, rows in the response
curl -X POST "https://api.apify.com/v2/actors/sfoln~amazon-search/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"keywords":["usb c cable"],"maxResultsPerQuery":10}'
mcp.json · hosted Apify MCP server
{
  "mcpServers": {
    "apify": {
      "type": "http",
      "url": "https://mcp.apify.com?tools=sfoln/amazon-search"
    }
  }
}
asynchronous run · for large batches
POST https://api.apify.com/v2/actors/sfoln~amazon-search/runs?maxTotalChargeUsd=1
GET  https://api.apify.com/v2/actor-runs/{runId}            # until status is SUCCEEDED
GET  https://api.apify.com/v2/datasets/{defaultDatasetId}/items?format=json

Authenticate with an Apify API token. MCP clients can instead sign in with OAuth when prompted. Example prompt for an agent: Search amazon.com for "usb c cable" and list the 10 best-rated products with their prices, ratings and review counts.

Input

Input fields

Enter search keywords. Each keyword returns up to `maxResultsPerQuery` Amazon product cards plus one query summary.

FieldTypeDefaultMeaning
keywords *arrayrequiredSearch keywords
Amazon search keywords, one per line. Accounts on the Apify free plan can process up to 10 keywords per run.
amazonDomainstring"amazon.com"Amazon marketplace
Amazon site to search. Location and language default to that marketplace. One of "amazon.com", "amazon.co.uk", "amazon.ca", "amazon.com.au", "amazon.in", "amazon.de", "amazon.fr", "amazon.it", "amazon.es", "amazon.nl", "amazon.com.mx", "amazon.com.br", "amazon.co.jp".
maxResultsPerQueryinteger50Products per keyword
Products to return per keyword (1–100). Each product is billed as amazon-search-result. Range 1–100.
priceMininteger—Minimum price
Only products priced at or above this (whole units of the marketplace currency). Leave empty for no filter. Range 0–….
priceMaxinteger—Maximum price
Only products priced at or below this (whole units of the marketplace currency). Leave empty for no filter. Range 0–….
departmentstring—Department
Restrict the search to one Amazon department (leave empty for all). One of "Arts & Crafts", "Automotive", "Baby", "Beauty & Personal Care", "Books", "Computers", "Digital Music", "Electronics", "Kindle Store", "Prime Video", "Women's Fashion", "Men's Fashion", "Girls' Fashion", "Boys' Fashion", "Deals", "Health & Household", "Home & Kitchen", "Industrial & Scientific", "Luggage", "Movies & TV", "Music, CDs & Vinyl", "Pet Supplies", "Software", "Sports & Outdoors", "Tools & Home Improvement", "Toys & Games", "Video Games".
sortBystring"relevance"Sort by
Amazon sort order. One of "relevance", "price_low_to_high", "price_high_to_low", "featured", "avg_customer_review", "newest_arrival".
locationstring—Location (override)
Optional DataForSEO Amazon location code or name. Defaults to the marketplace country.
languageCodestring—Language code (override)
Optional Amazon language code like en_US, en_GB, de_DE. Defaults to the marketplace language.
maxQueriesinteger1000Max queries
Safety cap on how many keywords are processed in this run. Range 1–10000.
concurrencyinteger3Concurrency
How many keywords are processed in parallel. Range 1–6.
includeRawbooleanfalseInclude raw upstream response
Attach the unmodified DataForSEO item to each result record.
Example input
{
  "keywords": [
    "usb c cable"
  ],
  "maxResultsPerQuery": 10
}

Output

One record per input item

Records land in the run's dataset; a synchronous call returns them directly. Each has a status (ok is charged; everything else is free) and a charged flag. The run's OUTPUT record totals items and charges.

FieldTypeMeaning
recordTypestringRecord type
product = one product card; query_summary = one per keyword. e.g. "product"
querystringQuery
The search keyword. e.g. "usb c cable"
amazonDomainstringMarketplace
Amazon site searched. e.g. "amazon.com"
rankintegerRank
Position among product cards (1 = first, sponsored included). e.g. 1
rankAbsoluteinteger | nullAbsolute rank
Position among all SERP elements.
asinstring | nullASIN
Amazon product ID. e.g. "B0ABCDEFGH"
titlestring | nullTitle
Product title.
urlstring | nullURL
Product URL.
priceobjectPrice
{current, max, currency}; max is set for price ranges.
ratingnumber | nullRating
Average star rating.
ratingMaxnumber | nullRating max
Rating scale (usually 5).
reviewsCountinteger | nullReviews
Number of ratings.
isPrimeboolean | nullPrime
True when a label or delivery message mentions Prime; null when the card shows no such signal.
isAmazonChoicebooleanAmazon's Choice
Amazon's Choice badge.
isBestSellerbooleanBest Seller
Best Seller badge.
isSponsoredbooleanSponsored
Sponsored (paid) placement.
imageUrlstring | nullImage
Product image URL.
deliveryInfoobject | nullDelivery
{message, price, currency}; price null = free or not shown.
boughtLastMonthinteger | nullBought last month
"N+ bought in past month" figure when shown.
labelsarrayLabels
Card labels, e.g. "Overall Pick".
hasSpecialOffersbooleanSpecial offers
Coupon or Subscribe & Save offer shown.
totalResultsinteger | nullTotal results
Amazon’s result count (summary records only).
relatedSearchesarrayRelated searches
Related searches (summary records only).
spellCorrectionstring | nullSpelling correction
Corrected keyword Amazon used, if any (summary records only).
itemTypesarraySERP element types
Element types on the page (summary records only).
queryChargedbooleanQuery fee charged
Whether amazon-search-query was charged (summary records only).
feeChargedbooleanFee charged
Whether the query/page fee event was charged for this keyword (summary records only; the summary record itself is never charged).
resultsRequestedintegerResults requested
Summary records only.
resultsLimitintegerResults limit used
Depth actually requested after free-plan and budget caps (summary records only).
resultsReturnedintegerResults returned
Result records delivered for this query (summary records only).
checkUrlstring | nullCheck URL
The search page the results come from (summary records only).
inputstring | object | nullInput
Keyword as entered.
statusstringStatus
ok | not_found | error | skipped_budget | skipped_free_plan e.g. "ok"
chargedbooleanCharged
Whether this record is covered by a pay-per-event charge.
chargedEventstringCharged event
amazon-search-result (product records).
warningsarrayWarnings
Non-fatal notes (results reduced, budget reached...).
errorobjectError
{code, message, provider?} when status is not ok.
sourcestringSource
Upstream data source.
fetchedAtstringFetched at
ISO timestamp.
Example record
{
  "recordType": "product",
  "query": "wireless earbuds",
  "amazonDomain": "amazon.com",
  "rank": 2,
  "rankAbsolute": 3,
  "asin": "B0ABCDEFGH",
  "title": "Wireless Earbuds, Bluetooth 5.3 Headphones…",
  "url": "https://www.amazon.com/dp/B0ABCDEFGH",
  "price": {
    "current": 29.99,
    "max": null,
    "currency": "USD"
  },
  "rating": 4.4,
  "ratingMax": 5,
  "reviewsCount": 12873,
  "isPrime": true,
  "isAmazonChoice": true,
  "isBestSeller": false,
  "isSponsored": false,
  "imageUrl": "https://m.media-amazon.com/images/I/61example.jpg",
  "deliveryInfo": {
    "message": "FREE delivery Thu, Oct 16 for Prime members",
    "price": null,
    "currency": null
  },
  "boughtLastMonth": 2000,
  "labels": [
    "Overall Pick"
  ],
  "hasSpecialOffers": true,
  "input": "wireless earbuds",
  "status": "ok",
  "charged": true,
  "chargedEvent": "amazon-search-result",
  "source": "dataforseo",
  "fetchedAt": "2026-10-14T10:00:00.000Z"
}

Machine-readable

This page for agents