Skip to content

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.

POST/api/v1/amazonJSON body: {"endpoint", "params"}10 credits per request
Only successful calls are chargedTimes out after 30 seconds
endpointReturnsRequired
/searchProducts matching a keywordquery
/product-detailsOne product by ASINasin
/productsUp to 20 products by ASIN (10 credits each)asins
/autocompleteSearch-box suggestionsquery
/best-sellersBest sellers in a departmentcategory
/new-releasesNew releases in a departmentcategory
/product-category-listSubcategory names and linksnone
/deals-v2Current dealsnone
/seller-profileA seller's profileseller_id
/seller-productsProducts a seller listsseller_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.

Every endpoint costs 10 credits a call, except /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 details

Everything on a product page: price, rating, availability, category, photos, bullet points and specifications.

POST/api/v1/amazonendpoint "/product-details"10 credits

Parameters in params

  • asinstringRequired
    The 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

200 OK
{
  "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.

POST/api/v1/amazonendpoint "/products"10 credits

Parameters in params

  • asinsarray | stringRequired
    Up to 20 ASINs, as a JSON array or a comma-separated string. Duplicates are removed. More than 20 is rejected with 400 and isn't charged.
Priced per product: 10 credits for each product returned. When the call starts, 10 credits are held for every ASIN you send, so 20 ASINs need 200 credits available (otherwise you get 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

200 OK
{
  "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.

POST/api/v1/amazonendpoint "/autocomplete"10 credits

Parameters in params

  • querystringRequired
    What the shopper has typed so far, for example espresso m.
  • departmentstring
    The search department alias, such as aps (all departments), electronics, stripbooks or fashion.
  • limitinteger
    Up 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

200 OK
{
  "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.

POST/api/v1/amazonendpoints "/best-sellers", "/new-releases"10 credits

Parameters in params

  • categorystringRequired
    An Amazon department slug from the table below, for example electronics. Browse node IDs and the ids from Categories are not accepted.
  • pageintegerDefault 1
    Results page, 1 to 100. A page with no products means you've reached the end.
Ranking pages often have no price: product_price can be null. Send the ASINs to Batch products to get prices.

Departments

electronics
Electronics
pc
Computers
wireless
Cell phones & accessories
videogames
Video games
books
Books
toys-and-games
Toys & games
home-garden
Home & kitchen
kitchen
Kitchen & dining
appliances
Appliances
beauty
Beauty
hpc
Health & household
grocery
Grocery
fashion
Clothing, shoes & jewelry
sporting-goods
Sports & outdoors
pet-supplies
Pet supplies
baby-products
Baby
automotive
Automotive
office-products
Office products
arts-crafts
Arts & crafts
musical-instruments
Musical instruments

Request

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

200 OK
{
  "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.

POST/api/v1/amazonendpoint "/product-category-list"10 credits
This endpoint takes no parameters. Every subcategory comes back with the same 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

200 OK
{
  "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.

POST/api/v1/amazonendpoint "/deals-v2"10 credits

Parameters in params

  • pageintegerDefault 1
    Results page, 1 to 100. A page with no products means you've reached the end.
Deals aren't filtered by category; filter on your side by title, 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

200 OK
{
  "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.

POST/api/v1/amazonendpoints "/seller-profile", "/seller-products"10 credits

Parameters in params

  • seller_idstringRequired
    The seller ID, for example A2L77EE7U53NWQ.
  • asinstring
    For /seller-profile, optional: a product the seller offers.
  • pageinteger
    For /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.