API reference
Amazon API
Product search, single and batch product details, search suggestions, best sellers, new releases, categories, deals and sellers as JSON, from amazon.com.
| endpoint | Returns | Required |
|---|---|---|
| /search | Products matching a keyword | query |
| /product-details | One product by ASIN | asin |
| /products | Up to 20 products by ASIN (10 credits each) | asins |
| /autocomplete | Search-box suggestions | query |
| /best-sellers | Best sellers in a department | category |
| /new-releases | New releases in a department | category |
| /product-category-list | Subcategory names and links | none |
| /deals-v2 | Current deals | none |
| /seller-profile | A seller's profile | seller_id |
| /seller-products | Products a seller lists | seller_id |
Response envelope
Successful calls return success, status, request_id, parameters (what was looked up), data, duration, statusCode and creditsUsed. The shape of data depends on the endpoint. Errors return success: false and an error message.
/products, which costs 10 credits for each product it returns. Only the ten endpoints above are supported; others, such as review endpoints, return 400 with Unsupported Amazon endpoint.Quick start
curl -X POST "https://scrapingbot.io/api/v1/amazon" \ -H "x-api-key: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "endpoint": "/product-details", "params": {"asin": "B07ZPKN6YR"} }'
import requests response = requests.post( "https://scrapingbot.io/api/v1/amazon", headers={"x-api-key": "YOUR_API_KEY"}, json={ "endpoint": "/product-details", "params": {"asin": "B07ZPKN6YR"}, }, timeout=60, ) data = response.json() print(data["data"]["product_title"])
const response = await fetch("https://scrapingbot.io/api/v1/amazon", { method: "POST", headers: { "x-api-key": "YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ endpoint: "/product-details", params: { asin: "B07ZPKN6YR" }, }), }); const data = await response.json(); console.log(data.data.product_title);
<?php $ch = curl_init("https://scrapingbot.io/api/v1/amazon"); curl_setopt_array($ch, [ CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => [ "x-api-key: YOUR_API_KEY", "Content-Type: application/json", ], CURLOPT_POSTFIELDS => json_encode([ "endpoint" => "/product-details", "params" => ["asin" => "B07ZPKN6YR"], ]), ]); $data = json_decode(curl_exec($ch), true); print_r($data["data"]["product_title"]);
Errors
{ "success": false, "error": "Missing required parameter: asin" }
Product search
Products matching a keyword, with price, rating, Prime and sponsored flags.
Parameters in params
- querystringRequiredWhat to search for.
- pageintegerDefault
1Results page, 1 to 100.data.has_next_pagetells you whether there's another. - departmentstringLimit the search to an Amazon department.
Request
curl -X POST "https://scrapingbot.io/api/v1/amazon" \ -H "x-api-key: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "endpoint": "/search", "params": {"query": "wireless earbuds", "page": 1} }'
import requests response = requests.post( "https://scrapingbot.io/api/v1/amazon", headers={"x-api-key": "YOUR_API_KEY"}, json={ "endpoint": "/search", "params": {"query": "wireless earbuds", "page": 1}, }, timeout=60, ) data = response.json() print(data["data"]["products"][0]["product_title"])
const response = await fetch("https://scrapingbot.io/api/v1/amazon", { method: "POST", headers: { "x-api-key": "YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ endpoint: "/search", params: { query: "wireless earbuds", page: 1 }, }), }); const data = await response.json(); console.log(data.data.products[0].product_title);
<?php $ch = curl_init("https://scrapingbot.io/api/v1/amazon"); curl_setopt_array($ch, [ CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => [ "x-api-key: YOUR_API_KEY", "Content-Type: application/json", ], CURLOPT_POSTFIELDS => json_encode([ "endpoint" => "/search", "params" => ["query" => "wireless earbuds", "page" => 1], ]), ]); $data = json_decode(curl_exec($ch), true); print_r($data["data"]["products"][0]["product_title"]);
Response
{ "success": true, "status": "OK", "request_id": "f44ec798-fdd8-4b68-aad8-4955e04c3a02", "parameters": { "query": "wireless earbuds", "country": "US", "department": "aps", "page": 1, "sort": "featured" }, "data": { "page": 1, "total_products": 16, "has_next_page": true, "next_page": 2, "products": [ { "position": 1, "asin": "B0HDB41H28", "product_title": "Wireless Earbuds, Bluetooth 5.3 Headphones HiFi Stereo 50H…", "product_price": "19.98", "product_original_price": "249.99", "currency": "USD", "product_star_rating": "4.7", "product_num_ratings": 128, "is_prime": false, "is_sponsored": false, "badge": "Overall Pick", "product_url": "https://www.amazon.com/…/dp/B0HDB41H28/…", "product_photo": "https://m.media-amazon.com/images/I/618n7fFdFXL._AC_UY218_.jpg", … }, … ] }, "duration": "2.55", "statusCode": 200, "creditsUsed": 10 }
Product details
Everything on a product page: price, rating, availability, category, photos, bullet points and specifications.
Parameters in params
- asinstringRequiredThe product's ASIN, for example
B07ZPKN6YR.
Request
curl -X POST "https://scrapingbot.io/api/v1/amazon" \ -H "x-api-key: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "endpoint": "/product-details", "params": {"asin": "B07ZPKN6YR"} }'
import requests response = requests.post( "https://scrapingbot.io/api/v1/amazon", headers={"x-api-key": "YOUR_API_KEY"}, json={ "endpoint": "/product-details", "params": {"asin": "B07ZPKN6YR"}, }, timeout=60, ) data = response.json() print(data["data"]["product_price"])
const response = await fetch("https://scrapingbot.io/api/v1/amazon", { method: "POST", headers: { "x-api-key": "YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ endpoint: "/product-details", params: { asin: "B07ZPKN6YR" }, }), }); const data = await response.json(); console.log(data.data.product_price);
<?php $ch = curl_init("https://scrapingbot.io/api/v1/amazon"); curl_setopt_array($ch, [ CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => [ "x-api-key: YOUR_API_KEY", "Content-Type: application/json", ], CURLOPT_POSTFIELDS => json_encode([ "endpoint" => "/product-details", "params" => ["asin" => "B07ZPKN6YR"], ]), ]); $data = json_decode(curl_exec($ch), true); print_r($data["data"]["product_price"]);
Response
{ "success": true, "status": "OK", "request_id": "4f920cea-cd6c-4b4e-9b8b-75c695efb138", "parameters": { "asin": "B07ZPKN6YR", "country": "US" }, "data": { "asin": "B07ZPKN6YR", "product_title": "Apple iPhone 11, 64GB, Black - Unlocked (Renewed)", "product_price": "172.00", "currency": "USD", "product_star_rating": "4.2", "product_num_ratings": 60093, "product_availability": "In Stock", "sales_volume": "1K+ bought in past month", "is_best_seller": false, "is_prime": false, "category": { "id": "2335752011", "name": "Cell Phones & Accessories" }, "product_url": "https://www.amazon.com/dp/B07ZPKN6YR", "product_photo": "https://m.media-amazon.com/images/I/61MG3m5FhIL._AC_SL1500…", "about_product": [ "This phone is unlocked and compatible with any carrier of…", … ], … }, "duration": "6.13", "statusCode": 200, "creditsUsed": 10 }
Batch products
Full details for up to 20 products in one call. Each item is the same object Product details returns.
Parameters in params
- asinsarray | stringRequiredUp to 20 ASINs, as a JSON array or a comma-separated string. Duplicates are removed. More than 20 is rejected with
400and isn't charged.
402). ASINs that can't be fetched are listed in data.errors instead of data.items, and their 10 credits are refunded. creditsUsed is what you paid: 10 × the number of items.Request
curl -X POST "https://scrapingbot.io/api/v1/amazon" \ -H "x-api-key: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "endpoint": "/products", "params": {"asins": ["B07FDJMC9Q", "B0BSHF7WHW"]} }'
import requests response = requests.post( "https://scrapingbot.io/api/v1/amazon", headers={"x-api-key": "YOUR_API_KEY"}, json={ "endpoint": "/products", "params": {"asins": ["B07FDJMC9Q", "B0BSHF7WHW"]}, }, timeout=60, ) data = response.json() print(data["creditsUsed"])
const response = await fetch("https://scrapingbot.io/api/v1/amazon", { method: "POST", headers: { "x-api-key": "YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ endpoint: "/products", params: { asins: ["B07FDJMC9Q", "B0BSHF7WHW"] }, }), }); const data = await response.json(); console.log(data.creditsUsed);
<?php $ch = curl_init("https://scrapingbot.io/api/v1/amazon"); curl_setopt_array($ch, [ CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => [ "x-api-key: YOUR_API_KEY", "Content-Type: application/json", ], CURLOPT_POSTFIELDS => json_encode([ "endpoint" => "/products", "params" => ["asins" => ["B07FDJMC9Q", "B0BSHF7WHW"]], ]), ]); $data = json_decode(curl_exec($ch), true); print_r($data["creditsUsed"]);
Response
{ "success": true, "status": "OK", "request_id": "e6c252d9-f2f4-4c90-99db-022c7084fa4f", "parameters": { "asins": [ "B07FDJMC9Q", "B0BSHF7WHW" ], "country": "US" }, "data": { "items": [ { "asin": "B07FDJMC9Q", "product_title": "Ninja AF101 Air Fryer, 4 Qt Capacity, 4-in-1 Crisp, Roast,…", "product_price": "79.99", "product_original_price": "$119.99", "currency": "USD", "product_star_rating": "4.7", "product_num_ratings": 59470, "product_availability": "In Stock", "sales_volume": "2K+ bought in past month", "is_amazon_choice": true, "product_url": "https://www.amazon.com/dp/B07FDJMC9Q", … }, { "asin": "B0BSHF7WHW", "product_title": "Apple 2023 MacBook Pro Laptop with Apple M2 Pro chip…", "product_price": null, "product_star_rating": "4.7", "product_availability": "Currently unavailable. We don't know when or if this item…", … } ], "errors": [] }, "duration": "2.75", "statusCode": 200, "creditsUsed": 20 }
Two ASINs, two products returned, 20 credits. Had one failed, it would appear in errors and the call would cost 10.
Search suggestions
The suggestions Amazon shows as a shopper types in its search box. Useful for keyword research.
Parameters in params
- querystringRequiredWhat the shopper has typed so far, for example
espresso m. - departmentstringThe search department alias, such as
aps(all departments),electronics,stripbooksorfashion. - limitintegerUp to 20 suggestions.
Request
curl -X POST "https://scrapingbot.io/api/v1/amazon" \ -H "x-api-key: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "endpoint": "/autocomplete", "params": {"query": "espresso m"} }'
import requests response = requests.post( "https://scrapingbot.io/api/v1/amazon", headers={"x-api-key": "YOUR_API_KEY"}, json={ "endpoint": "/autocomplete", "params": {"query": "espresso m"}, }, timeout=60, ) data = response.json() print(data["data"]["suggestions"][0]["value"])
const response = await fetch("https://scrapingbot.io/api/v1/amazon", { method: "POST", headers: { "x-api-key": "YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ endpoint: "/autocomplete", params: { query: "espresso m" }, }), }); const data = await response.json(); console.log(data.data.suggestions[0].value);
<?php $ch = curl_init("https://scrapingbot.io/api/v1/amazon"); curl_setopt_array($ch, [ CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => [ "x-api-key: YOUR_API_KEY", "Content-Type: application/json", ], CURLOPT_POSTFIELDS => json_encode([ "endpoint" => "/autocomplete", "params" => ["query" => "espresso m"], ]), ]); $data = json_decode(curl_exec($ch), true); print_r($data["data"]["suggestions"][0]["value"]);
Response
{ "success": true, "status": "OK", "request_id": "fdb0f50a-2ae3-425f-b94f-f91aaa81b192", "parameters": { "prefix": "espresso m", "department": "aps", "country": "US", … }, "data": { "prefix": "espresso m", "suggestions": [ { "value": "espresso machine", "type": "KEYWORD", "image_url": "https://m.media-amazon.com/images/I/71J+nmKmP4L.__AC_SL75_…", … }, { "value": "espresso machine with grinder", … }, { "value": "espresso maker", … }, { "value": "espresso machine accessories", "type": "KEYWORD", "image_url": null, … }, … ], "total": 10 }, "duration": "0.46", "statusCode": 200, "creditsUsed": 10 }
value is the suggested search. Some suggestions also carry a small product image_url.
Best sellers and new releases
Amazon's Best Sellers or Hot New Releases ranking for a department, in rank order. Both return the same shape, about 30 products a page.
Parameters in params
- categorystringRequiredAn Amazon department slug from the table below, for example
electronics. Browse node IDs and the ids from Categories are not accepted. - pageintegerDefault
1Results page, 1 to 100. A page with no products means you've reached the end.
product_price can be null. Send the ASINs to Batch products to get prices.Departments
electronicspcwirelessvideogamesbookstoys-and-gameshome-gardenkitchenappliancesbeautyhpcgroceryfashionsporting-goodspet-suppliesbaby-productsautomotiveoffice-productsarts-craftsmusical-instrumentsRequest
curl -X POST "https://scrapingbot.io/api/v1/amazon" \ -H "x-api-key: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "endpoint": "/best-sellers", "params": {"category": "electronics"} }'
import requests response = requests.post( "https://scrapingbot.io/api/v1/amazon", headers={"x-api-key": "YOUR_API_KEY"}, json={ "endpoint": "/best-sellers", "params": {"category": "electronics"}, }, timeout=60, ) data = response.json() print(data["data"]["products"][0]["product_title"])
const response = await fetch("https://scrapingbot.io/api/v1/amazon", { method: "POST", headers: { "x-api-key": "YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ endpoint: "/best-sellers", params: { category: "electronics" }, }), }); const data = await response.json(); console.log(data.data.products[0].product_title);
<?php $ch = curl_init("https://scrapingbot.io/api/v1/amazon"); curl_setopt_array($ch, [ CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => [ "x-api-key: YOUR_API_KEY", "Content-Type: application/json", ], CURLOPT_POSTFIELDS => json_encode([ "endpoint" => "/best-sellers", "params" => ["category" => "electronics"], ]), ]); $data = json_decode(curl_exec($ch), true); print_r($data["data"]["products"][0]["product_title"]);
Response
{ "success": true, "status": "OK", "request_id": "d4566a68-4abe-4e3e-be72-2cad563e2287", "parameters": { "category": "electronics", "country": "US", "list_type": "best_sellers", "page": 1 }, "data": { "category": "electronics", "list_type": "best_sellers", "page": 1, "total_products": 30, "products": [ { "rank": 1, "asin": "B08JHCVHTY", "product_title": "blink plus plan with monthly auto-renewal", "product_price": null, "product_star_rating": "4.4", "product_num_ratings": 445, "product_photo": "https://images-na.ssl-images-amazon.com/images/I/31YHGbJsldL…", "product_url": "https://www.amazon.com/Blink-Plus-Plan-monthly-auto-renewa…", … }, { "rank": 2, "asin": "B0DCH8VDXF", "product_title": "Apple EarPods Headphones with USB-C Plug, Wired Ear Buds…", "product_price": null, "product_star_rating": "4.5", "product_num_ratings": 455, … }, … ] }, "duration": "0.83", "statusCode": 200, "creditsUsed": 10 }
/new-releases returns the same fields with "list_type": "new_releases". Each product has rank, asin, product_title, product_price, product_star_rating, product_num_ratings, product_photo and product_url.
Categories
Subcategory names and links from Amazon's Best Sellers navigation.
id, so these entries can't be used as category values for Best sellers and new releases; use a department slug instead. Each url is Amazon's own Best Sellers page for that subcategory.Request
curl -X POST "https://scrapingbot.io/api/v1/amazon" \ -H "x-api-key: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"endpoint": "/product-category-list", "params": {}}'
import requests response = requests.post( "https://scrapingbot.io/api/v1/amazon", headers={"x-api-key": "YOUR_API_KEY"}, json={"endpoint": "/product-category-list", "params": {}}, timeout=60, ) data = response.json() print(data["data"]["categories"][0]["name"])
const response = await fetch("https://scrapingbot.io/api/v1/amazon", { method: "POST", headers: { "x-api-key": "YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ endpoint: "/product-category-list", params: {} }), }); const data = await response.json(); console.log(data.data.categories[0].name);
<?php $ch = curl_init("https://scrapingbot.io/api/v1/amazon"); curl_setopt_array($ch, [ CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => [ "x-api-key: YOUR_API_KEY", "Content-Type: application/json", ], CURLOPT_POSTFIELDS => json_encode(["endpoint" => "/product-category-list", "params" => []]), ]); $data = json_decode(curl_exec($ch), true); print_r($data["data"]["categories"][0]["name"]);
Response
{ "success": true, "status": "OK", "request_id": "97a54299-a640-43ee-86fe-a85c8081c995", "parameters": { "country": "US", … }, "data": { "total_categories": 19, "categories": [ …, { "id": "electronics", "name": "Headphones", "selected": true, "url": "https://www.amazon.com/Best-Sellers-Electronics-Headphones…" }, { "id": "electronics", "name": "Wearable Technology", "selected": true, "url": "https://www.amazon.com/Best-Sellers-Electronics-Wearable-T…" }, … ], … }, "duration": "0.82", "statusCode": 200, "creditsUsed": 10 }
Deals
Amazon's current deals across the store, with deal price, original price, discount and badge.
Parameters in params
- pageintegerDefault
1Results page, 1 to 100. A page with no products means you've reached the end.
discount_percentage or the ASINs you track.Request
curl -X POST "https://scrapingbot.io/api/v1/amazon" \ -H "x-api-key: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "endpoint": "/deals-v2", "params": {"page": 1} }'
import requests response = requests.post( "https://scrapingbot.io/api/v1/amazon", headers={"x-api-key": "YOUR_API_KEY"}, json={ "endpoint": "/deals-v2", "params": {"page": 1}, }, timeout=60, ) data = response.json() print(data["data"]["products"][0]["discount_percentage"])
const response = await fetch("https://scrapingbot.io/api/v1/amazon", { method: "POST", headers: { "x-api-key": "YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ endpoint: "/deals-v2", params: { page: 1 }, }), }); const data = await response.json(); console.log(data.data.products[0].discount_percentage);
<?php $ch = curl_init("https://scrapingbot.io/api/v1/amazon"); curl_setopt_array($ch, [ CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => [ "x-api-key: YOUR_API_KEY", "Content-Type: application/json", ], CURLOPT_POSTFIELDS => json_encode([ "endpoint" => "/deals-v2", "params" => ["page" => 1], ]), ]); $data = json_decode(curl_exec($ch), true); print_r($data["data"]["products"][0]["discount_percentage"]);
Response
{ "success": true, "parameters": { "country": "US", "page": 1 }, "data": { "page": 1, "total_products": 42, "products": [ { "position": 3, "asin": "B00005UP2K", "product_title": "KitchenAid Artisan, 5-Qt Tilt Head Stand Mixer, KSM150PS…", "product_price": "379.95", "product_original_price": "499.99", "discount_percentage": 24, "deal_badge": "Limited time deal", "currency": "USD", "coupon": null, "product_url": "https://www.amazon.com/…/dp/B00005UP2K/…" }, … ] }, "duration": "1.66", "statusCode": 200, "creditsUsed": 10 }
Sellers
A seller's profile (name, ratings and storefront details) or the products they list.
Parameters in params
- seller_idstringRequiredThe seller ID, for example
A2L77EE7U53NWQ. - asinstringFor
/seller-profile, optional: a product the seller offers. - pageintegerFor
/seller-products: results page, 1 to 100.
Request
curl -X POST "https://scrapingbot.io/api/v1/amazon" \ -H "x-api-key: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "endpoint": "/seller-profile", "params": {"seller_id": "A2L77EE7U53NWQ"} }'
import requests response = requests.post( "https://scrapingbot.io/api/v1/amazon", headers={"x-api-key": "YOUR_API_KEY"}, json={ "endpoint": "/seller-profile", "params": {"seller_id": "A2L77EE7U53NWQ"}, }, timeout=60, ) data = response.json() print(data["data"])
const response = await fetch("https://scrapingbot.io/api/v1/amazon", { method: "POST", headers: { "x-api-key": "YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ endpoint: "/seller-profile", params: { seller_id: "A2L77EE7U53NWQ" }, }), }); const data = await response.json(); console.log(data.data);
<?php $ch = curl_init("https://scrapingbot.io/api/v1/amazon"); curl_setopt_array($ch, [ CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => [ "x-api-key: YOUR_API_KEY", "Content-Type: application/json", ], CURLOPT_POSTFIELDS => json_encode([ "endpoint" => "/seller-profile", "params" => ["seller_id" => "A2L77EE7U53NWQ"], ]), ]); $data = json_decode(curl_exec($ch), true); print_r($data["data"]);
Stuck on something?
Try requests in the dashboard playgrounds, check every call in your usage log, or write to [email protected]. A real developer answers.