Amazon Search Scraper API: Organic & Sponsored Results as JSON
Scraping and Proxy Management Expert
TL;DR:
- The Amazon Search Scraper is the
scraper.amazonactor withtype: "keywords"— it turns a search term into Amazon's ranked results as JSON. - One authenticated
POSTto/api/v1/scraper/requestreturns organic and sponsored listings, each with position, ASIN, title, price, rating, and review count. - Organic and paid results are separated, so you can track where a product ranks and which competitors are buying the sponsored slots above it.
- Prices and ratings arrive as display strings (
"$24.98","4.9 out of 5 stars"), so parse them rather than casting directly. - Start free. New Scrapeless accounts include free Scraper API credits — sign up at app.scrapeless.com.
Amazon search is where product discovery happens, and the order of the results page decides which products get seen — which is why Amazon sellers track their keyword rank closely. The Scrapeless Scraping API captures a keyword's results page as structured data: the organic ranking, the sponsored placements, and the ASIN, price, and rating of every listing. This guide shows the request, the response shape, and the fields that need care. Every request and field below was captured from a live run of the actor.
What You Can Do With the Amazon Search Scraper
The actor takes a keyword and returns Amazon's ranked results as JSON. Practically, that lets you:
- Track keyword rank — capture your product's organic position for a search term and watch it move over time.
- Monitor the sponsored layer — see which ASINs are buying the paid slots above the organic results for your keywords.
- Map a category's competition — pull the full first page of ASINs, prices, and ratings for a search and compare the field.
- Feed pricing and assortment models — pipe the structured results into dashboards or alerts without parsing HTML.
Why the Scrapeless Amazon Actor
Amazon's search results page is heavily rendered and anti-bot protected, and its HTML shifts constantly. The Scrapeless actor runs the search and returns a clean, developer-friendly envelope, so your code reads fields instead of maintaining selectors, rotating infrastructure, or handling blocks. The same scraper.amazon actor also covers product detail and the Rufus assistant by changing the type.
Endpoint and Parameters
The actor runs on the synchronous Scraping API endpoint. Authenticate with your token in the x-api-token header.
- Endpoint:
POST https://api.scrapeless.com/api/v1/scraper/request - Actor:
scraper.amazon
| Input field | Type | Required | Description |
|---|---|---|---|
type |
string | yes | Set to keywords for a search. |
keywords |
string | yes | The search term. |
domain |
string | yes | The Amazon storefront, e.g. www.amazon.com. |
The result is returned synchronously in a result object; you do not have to poll.
Authenticated Request
A minimal request looks like this (illustrative — replace the token):
bash
curl 'https://api.scrapeless.com/api/v1/scraper/request' \
--header 'Content-Type: application/json' \
--header 'x-api-token: YOUR_API_TOKEN' \
--data '{
"actor": "scraper.amazon",
"input": {
"type": "keywords",
"keywords": "wireless headphones",
"domain": "www.amazon.com"
}
}'
Python Integration
This example reads the token from the SCRAPELESS_API_KEY environment variable, runs the search, and prints the organic and sponsored results. It uses only the Python standard library.
python
import json
import os
import urllib.request
API_URL = "https://api.scrapeless.com/api/v1/scraper/request"
API_TOKEN = os.environ["SCRAPELESS_API_KEY"]
payload = {
"actor": "scraper.amazon",
"input": {
"type": "keywords",
"keywords": "wireless headphones",
"domain": "www.amazon.com",
},
}
request = urllib.request.Request(
API_URL,
data=json.dumps(payload).encode("utf-8"),
headers={"Content-Type": "application/json", "x-api-token": API_TOKEN},
method="POST",
)
with urllib.request.urlopen(request, timeout=180) as response:
data = json.loads(response.read().decode("utf-8"))
result = data.get("result", {})
listings = result.get("result", {})
organic = listings.get("organic") or []
paid = listings.get("paid") or []
print("keyword:", result.get("keyword"))
print("organic results:", len(organic))
print("paid results:", len(paid))
for item in organic[:5]:
print(f" #{item.get('pos')} {item.get('asin')} {item.get('price')} {item.get('rating')}")
print(" ", (item.get("title") or "")[:70])
What You Get Back
The results arrive inside result. The fields below are the ones you will use most; values are an illustrative sample from a live run, trimmed for length.
json
// Illustrative sample from a live scraper.amazon (type keywords) run — field names are real, values trimmed.
{
"result": {
"keyword": "wireless headphones",
"current_page": 1,
"total_results_count": 16,
"result": {
"organic": [
{
"pos": 3,
"asin": "B0H3PSK8LR",
"title": "HAOYUYAN Wireless Earbuds, Sports Bluetooth Headphones ...",
"price": "$24.98",
"rating": "4.9 out of 5 stars",
"reviews_count": "1,204",
"is_prime": true,
"best_seller": false,
"is_sponsored": false,
"url_image": "<product image URL>"
}
],
"paid": [
{
"pos": 1,
"asin": "B0DGMHKDWQ",
"title": "Gabba Goods Wireless Over Ear Bluetooth Headphones ...",
"price": "$19.99",
"rating": "4.2 out of 5 stars",
"is_sponsored": true
}
]
}
}
}
| Field | Type | Description |
|---|---|---|
keyword |
string | The search term that was run. |
current_page |
number | The results page number. |
total_results_count |
number | Number of parsed results on the page. |
result.organic |
array | Organic listings in rank order. |
result.paid |
array | Sponsored listings. |
…[].pos |
number | The listing's position. |
…[].asin |
string | The product ASIN. |
…[].title |
string | The listing title. |
…[].price |
string | Display price, e.g. "$24.98". |
…[].rating |
string | Display rating, e.g. "4.9 out of 5 stars". |
…[].reviews_count |
string | Review count as a display string. |
…[].is_prime / best_seller / is_sponsored |
bool | Prime, Best Seller badge, and sponsored flags. |
…[].url_image |
string | Product image URL. |
Organic vs Sponsored
The response separates organic from paid, and that split is the point. Organic positions show where a product ranks on merit; the paid array shows which ASINs are buying visibility above it. Tracking both for your keywords tells you two different things — how your listing is ranking, and how much sponsored pressure sits on top of it. Each item also carries an is_sponsored flag, so you can reconcile the two views.
Common Data-Shape Problems
- Prices and ratings are display strings.
priceis"$24.98"andratingis"4.9 out of 5 stars", so extract the numbers with a small parser rather than casting the field.reviews_count("1,204") is a string too. - Read from
result.result. The listings sit one level in: the top-levelresultholds the query metadata, andresult.result.organic/result.result.paidhold the listings. paidcan be empty. Some keywords have no sponsored layer; guard for an empty array before iterating.- Positions are per-page.
posis the rank within the returned page, so pincurrent_pagewhen you compare runs over time.
Companion Actors
The keywords type is one mode of the Amazon actor. Switch type to product to turn an ASIN into a full product record, or to rufus to capture Amazon's shopping assistant — the endpoint and authentication stay the same, only the type and its inputs change. For another actor in the same Scraper API family, see the ChatGPT Scraper API guide. Amazon documents its own Sponsored Products program, and covers the retail side in its retail newsroom.
Conclusion
The Amazon Search Scraper turns a keyword into structured, ranked results with one authenticated request: send a term and a storefront, read back the organic and sponsored listings with ASIN, price, rating, and review count. Parse the display-string prices and ratings, read the listings from result.result, and you have a reliable feed for rank tracking, sponsored monitoring, and competitive analysis.
Ready to capture Amazon search as data? Start free from the Scrapeless dashboard, see where the actor fits on the Scraping API product page, or compare plans on Scrapeless pricing.
FAQ
Q: What is the Amazon Search Scraper?
A: It is the Scrapeless Scraping API actor scraper.amazon with type: "keywords", which sends a search term to Amazon and returns the ranked results as JSON — organic and sponsored listings with position, ASIN, title, price, rating, and review count.
Q: Which endpoint and parameters does it use?
A: POST https://api.scrapeless.com/api/v1/scraper/request with actor set to scraper.amazon and an input object containing type: "keywords", keywords, and domain. Authenticate with your token in x-api-token.
Q: How do I tell organic from sponsored results?
A: The response returns two arrays, result.organic and result.paid, and each listing also carries an is_sponsored flag, so you can separate merit ranking from paid placement.
Q: Are the price and rating numbers?
A: No, they are display strings — price like "$24.98" and rating like "4.9 out of 5 stars". Extract the numbers with a small parser rather than casting the field.
Q: Is the response synchronous?
A: Yes. The result object is returned in the same response; you do not poll a separate endpoint.
Q: Can the same actor scrape a product or the Rufus assistant?
A: Yes. Change type to product for a full ASIN record, or to rufus for Amazon's shopping assistant — the endpoint and authentication stay the same.
At Scrapeless, we only access publicly available data while strictly complying with applicable laws, regulations, and website privacy policies. The content in this blog is for demonstration purposes only and does not involve any illegal or infringing activities. We make no guarantees and disclaim all liability for the use of information from this blog or third-party links. Before engaging in any scraping activities, consult your legal advisor and review the target website's terms of service or obtain the necessary permissions.



