Try it
Run a live Amazon search request
No signup and no key. The box sends a real search request and prints exactly what the endpoint returns.
Endpoints & Pricing
Three Amazon Endpoints, One Rate
Product, search and bestsellers, all at one published rate. The unit is per 1,000 requests — never per 1,000 results.
Product
GET /api/amazon/productbyasinorurl- 35 typed fields;
priceis a number, not a string - Review sample and
rating_breakdownincluded free - Variants, A+ presence, categories,
bestsellers_rank
Search
GET /api/amazon/search— one request, one page- 16–48 ranked cards per page, at one charge
is_sponsored,is_amazons_choice,is_best_seller- Pages 1–5 on the synchronous route
Bestsellers
GET /api/amazon/bestsellersby category- About 30 ranked ASINs per chart, at one charge
category,category_slugand Amazon’s ownrank- Categories validated per marketplace before the call
Read the unit carefully. These are rates per 1,000 requests. A search request is one page of 16–48 product cards and a bestsellers request is a chart of about 30 ASINs, so a rate here is not comparable to a vendor that bills per row without normalising first. Growth requires one qualifying $100 deposit, Scale $500, and Enterprise $1,000. Enterprise inherits Scale pricing outside Web. New credit uses the current schedule; existing credit keeps its original schedule. Refunded or charged-back amounts do not qualify toward a tier.
Quick Start
Amazon Data in One Request
One header, one GET. Types are part of the contract: prices are numbers, currency is an ISO-4217 code, and an absent value is null rather than a missing key.
# One product record by ASIN — 35 typed fields for one request curl "https://apiserpent.com/api/amazon/product?asin=B08N5WRWNW&domain=amazon.com" \ -H "X-API-Key: YOUR_API_KEY" # One search page — 16–48 ranked product cards, still one request curl "https://apiserpent.com/api/amazon/search?q=laptop+stand&domain=amazon.co.uk&page=1" \ -H "X-API-Key: YOUR_API_KEY" # One category chart — about 30 ranked ASINs, one request curl "https://apiserpent.com/api/amazon/bestsellers?category=electronics&domain=amazon.de" \ -H "X-API-Key: YOUR_API_KEY"
import os, requests h = {"X-API-Key": os.environ["SERPENT_API_KEY"]} p = {"q": "laptop stand", "domain": "amazon.com", "page": 1} data = requests.get("https://apiserpent.com/api/amazon/search", params=p, headers=h, timeout=60).json() # results[] is the page. results_count is how many cards it carried — # between 16 and 48, and the whole page costs one request either way. for r in data["results"]: print(r["position"], r["asin"], r["price"], r["currency"], r["rating"])
const qs = new URLSearchParams({ asin: "B08N5WRWNW", domain: "amazon.com" }); const res = await fetch(`https://apiserpent.com/api/amazon/product?${qs}`, { headers: { "X-API-Key": process.env.SERPENT_API_KEY } }); const { product } = await res.json(); // price and list_price are NUMBERS. list_price is null when there is no list price, // which is not the same statement as "the list price equals the price". console.log(product.title, product.price, product.currency, product.rating);
{
"success": true,
"product": {
"asin": "B08N5WRWNW",
"parent_asin": "B08N5M7S6K",
"title": "Adjustable Aluminium Laptop Stand",
"brand": "Example Brand",
"price": 34.99,
"currency": "USD",
"list_price": 49.99,
"sns_price": null,
"coupon": null,
"availability": "In Stock",
"bought_past_month": "2K+ bought in past month",
"sold_by": "Example Brand Store",
"ships_from": "Amazon",
"rating": 4.6,
"ratings_total": 18342,
"rating_breakdown": [
{ "stars": 5, "percentage": 74 },
{ "stars": 4, "percentage": 15 }
],
"reviews_count": 9,
"reviews": [
{ "title": "Sturdier than it looks", "rating": 5 }
],
"feature_bullets": [ "Six-stage height adjustment" ],
"aplus_present": true,
"aplus_text": "Engineered for all-day use.\n\nSix-stage height adjustment...",
"aplus_modules": [
{ "heading": "Built to last", "text": "Aircraft-grade aluminium...", "images": [ { "url": "https://m.media-amazon.com/images/S/aplus-media/example.jpg", "alt": "Stand at full height" } ] }
],
"main_image": "https://m.media-amazon.com/images/I/example.jpg",
"image_count": 7,
"variants_count": 3,
"variant_dimensions": [ "Colour" ],
"categories": [ "Electronics", "Laptop Accessories" ],
"bestsellers_rank": [
{ "category": "Laptop Stands", "rank": 4 }
],
"specs": { "Material": "Aluminium" }
},
"meta": {
"asin": "B08N5WRWNW",
"domain": "amazon.com",
"elapsed": "6120ms"
}
}
reviews is the sample the product page itself renders — typically 8 to 13 — and reviews_count is the size of that sample, not a site-wide figure. The site-wide number is ratings_total (18,342 above), and the two are different quantities: read reviews_count as a total and you will be out by four orders of magnitude. Every one of the 35 keys is always present, so a field this listing did not carry arrives as null or [] rather than disappearing — your parser never has to branch on whether a key exists.
Data Fields
Every Field an Amazon Call Returns
Named JSON fields, not HTML you have to select against. Nothing here needs a parser of your own, and nothing changes shape between calls.
Product record — 35 fields
- asin, parent_asin, url, title, brand
- price, currency, list_price
- sns_price, coupon
- availability, delivery, bought_past_month
- seller_id, sold_by, ships_from
- rating, ratings_total, rating_breakdown
- reviews_count, reviews (sample)
- feature_bullets, description, aplus_present
- aplus_text, aplus_modules
- main_image, image_count, image_urls
- variants_count, variant_dimensions, variants
- categories, bestsellers_rank, specs
Search result card
- position, asin, url, title, image
- price, currency, list_price
- secondary_offer_price, secondary_offer_currency
- rating, ratings_total
- is_sponsored
- is_amazons_choice
- is_best_seller
- badge, badge_type, badges
- bought_past_month, delivery
Page & chart wrappers
- search_term, current_page
- total_results, total_results_text
- results_count, results[]
- category, category_id
- category_slug, category_url
- rank (Amazon’s displayed rank)
- meta.elapsed, meta.domain
Request parameters
- asin (or url) — product
- q — search query
- page (1–5 on the synchronous route)
- category — bestsellers
- domain (amazon.com, .co.uk, .de …)
- country (alias for domain)
- language (where the marketplace allows it)
Read secondary_offer_price carefully. It is the other-sellers offer on a search card, not the card’s own price — price is that. On every one of the 43 recorded cards carrying both, the secondary offer came in below the card price, and on some cards it is a used listing rather than a new one. Treat it as a second offer to inspect, never as the price of the product.
Why Amazon data
What is Amazon product data, and why teams use it
It is the record behind a listing: price, currency, rating, availability, bullets, variants and rank. Four things decide whether it is usable.
The unit is a page, not a row
One search request returns a whole page of 16–48 product cards and costs one request; one bestsellers request returns a chart of about 30 ASINs — 36 on the site-wide directory, which renders six carousels of six — and also costs one request. Vendors who bill per returned row charge you 16 to 48 times for the same page.
Normalised per product record, a Default search works out at $0.0004–$0.0013 per 1,000 products: $0.020 per 1,000 requests divided by the 48 cards of a full page at best, and by the 16 of a short one at worst. That is the comparison to run before you compare headline rates, and the worst case is quoted from the smallest page we have measured rather than the largest.
Currency is a gate, not a label
A price is only a price if its currency is the one that marketplace trades in. A euro figure on an amazon.com listing is another region’s page leaking through, and a “price is not blank” check passes it every time.
currency is always ISO-4217 — USD, GBP, JPY — never a glyph, and a price whose currency does not match the marketplace you asked for is not handed to you as that marketplace’s price.
Marketplace coverage
The request validator recognizes 23 named Amazon domains, including amazon.eg for bestsellers only. This is a supported-input list, not proof that every domain returns parsed product, search and bestsellers data in current production. Verify the returned meta.domain, currency and records for each marketplace you use.
amazon.cn is deliberately absent. It no longer serves a storefront, so listing it would inflate a marketplace count with a domain that returns no products — a number that looks like coverage and is not.
Reviews are a sample, and they say so
reviews is the sample the product page renders, typically 8 to 13 of them. reviews_count is the size of that sample — not a site-wide figure, which is ratings_total — and rating_breakdown is the star histogram as {stars, percentage} rows, percentages only.
There is no wholesale review crawl and no review pagination endpoint. Saying that plainly is worth more than a field that implies completeness it cannot deliver, and it is the field teams most often discover was hollow after they built on it.
Price comparison
Amazon API Pricing, Side by Side
Every figure is the vendor’s own published rate. Where a cheap rate needs a monthly plan or a sales call, the requirement is in the table.
| Provider | What one unit is | Cost per 1,000 — entry | Cost per 1,000 — lowest published | What the lowest rate requires | Free tier |
|---|---|---|---|---|---|
| Serpent API | Per request. A search page of 16–48 cards, a chart of ~30 ASINs, or one product. | $0.020 all three endpoints |
$0.014 all three endpoints |
A single $500 deposit, spendable as balance. No monthly plan; the tier never expires or downgrades — refunded or charged-back amounts don't count. | Free to start |
| ScrapingDog — Amazon Search & Product | Per request (1 credit) | $0.20 (LITE, $40/month) | $0.027 | $30,000 per month | 200 credits |
| ScrapingDog — Amazon Bestsellers | Per request (5 credits) | $1.00 (LITE, $40/month) | $0.136 | $30,000 per month | 200 credits |
| Oxylabs | Per successful result | $0.50 (Micro, $49/month) | $0.25 | Custom plan, contact sales. Advanced $249/month is $0.40; Business $999/month is $0.30. | Trial, 2,000 results |
| Rainforest (Traject Data) | Per request (1 credit) | $46.00 (Hobbyist, $23/month) | $0.45 | Volume plan, $9,000 per month, billed annually. Monthly billing adds 25%. | Free trial, size not published |
| Bright Data | Per record | $1.50 (pay as you go) | $1.30 | Scale plan, $499 per month | 5,000 records/month |
| Apify — junglee/amazon-crawler | Per result (one product) | $5.00 | $3.00 | Gold discount tier, on Apify’s $999/month Business plan. Two cheaper tiers, Platinum and Diamond, sit on no published Apify plan — contact sales only (checked 2026-09-16). | $5 platform credit |
| Apify — pro100chok/amazon-scraper | Per result (one product) | $5.00 | $1.00 | Bronze discount on Apify Starter, $19 per month | $5 platform credit |
Where we win, and what the cheapest rival rate actually costs. Rates checked against each vendor’s own live pricing page on 2026-09-08. At the rate a new account actually pays, we are a tenth of the cheapest rival entry rate — $0.020 per 1,000 requests against ScrapingDog’s $0.20, and below Oxylabs’ $0.50, Bright Data’s $1.50, the two listed Apify actors’ $5.00 and Rainforest’s $46.00. Three of those entry rates are monthly plans billed whether or not you call the API — ScrapingDog’s $40 LITE, Oxylabs’ $49 Micro and Rainforest’s $23 Hobbyist — and there is no monthly plan here at all. The lowest rate anyone in this table publishes is ScrapingDog’s $0.027 per 1,000, and it takes $30,000 of spend a month, $360,000 a year, to reach it. Our $0.020 Default is under that on the first call, with no deposit and no plan at all; our $0.014 Scale asks a single $500 deposit that stays spendable and never expires. Every other rate in this table, entry or lowest published, sits above both. What a vendor will quote privately on a contact-sales plan is not published, and we make no claim about it. The unit is a separate argument from the price: Oxylabs, Bright Data and Apify bill per row, and we bill one page of 16–48 cards as one request; normalised per product record a Default search is $0.0004–$0.0013 per 1,000 products, against Bright Data’s cheapest $1.30 and the selected Apify pro100chok actor’s Bronze rate of $1.00. Rainforest’s plans are billed annually and its $59 Starter tier no longer exists; trajectdata.com now carries a “Traject Data joins ScraperAPI” banner, so Rainforest and ScraperAPI are no longer independent vendors.
Use cases
What Teams Actually Pull Amazon Data For
Four jobs that account for most Amazon data traffic, and the endpoint and parameters each one needs.
Price and availability monitoring
Poll /api/amazon/product on a list of ASINs and store price, list_price, sns_price, coupon and availability. All four price fields are numbers, so a drop is arithmetic rather than string parsing.
Keep currency in the same row. A price that changes currency between two polls did not change — the page you were served did — and that is the single most common source of a bogus price alert.
Catalogue and competitor research
One product call carries feature_bullets, description, aplus_text, aplus_modules, categories, bestsellers_rank, variants and variant_dimensions — a listing turned into a research row without a second request.
You get a competitor’s enhanced brand content as text, not just a flag that they have some. aplus_text is the whole A+ region as one readable string; aplus_modules splits the same copy into its blocks, each with its heading, its body text and its image alt strings — and on A+ the alt strings matter, because much of the wording is set inside the artwork. aplus_present stays as the cheap boolean to filter on before you read anything.
Bestseller and category movers
Poll /api/amazon/bestsellers for a category and diff the chart day over day. Each entry carries Amazon’s own displayed rank plus asin, price and rating, so a mover is visible without a second lookup.
category_slug comes back on every chart, which is what lets you reject a chart served for a slug that is only valid on another marketplace instead of silently charting the wrong list.
Cross-marketplace price comparison
Send the same ASIN at domain=amazon.com, amazon.co.uk and amazon.de; compare only the delivered records whose domain, currency and product match your request.
Because the unit is a request rather than a row, a sweep across 22 selected marketplaces is 22 requests — $0.00044 at Default if each call is delivered — and its usable coverage depends on the returned records.
# One line per ASIN: date, asin, price, currency, availability. # One request per ASIN — the whole 35-field record costs the same as the price alone. while IFS= read -r asin; do curl -s -G "https://apiserpent.com/api/amazon/product" \ -d "asin=$asin" -d "domain=amazon.com" \ -H "X-API-Key: $SERPENT_API_KEY" \ | jq -r '[.product.asin, (.product.price|tostring), .product.currency, (.product.availability // "unknown")] | @csv' \ | sed "s|^|$(date -u +%F),|" >> amazon-prices.csv done < asins.txt
FAQ
Amazon Scraper API Questions
product key alongside success and meta.
amazon.eg limited to bestsellers. That is a supported-input list, not proof of parsed results on every domain in current production. Pick a domain or country and verify the returned marketplace, currency and records. amazon.cn is absent because it no longer serves a storefront.
reviews is the sample Amazon renders into the product page itself — typically 8 to 13 of them — and reviews_count is the size of that sample, never a site-wide figure. The site-wide number is ratings_total, which is a different quantity and is not comparable to reviews_count. rating_breakdown carries the star histogram as {stars, percentage} rows, percentages only: a per-star count would have to be derived from the percentage and would inherit Amazon’s own rounding. There is no wholesale review crawl and no review pagination endpoint.
async_endpoint naming the job form when it is available.
Start using the Amazon Scraper API
Free API calls, shared across every free-eligible endpoint. No card, no subscription, no monthly plan. Amazon product, search and bestseller data at one rate, from $0.014/1K requests.
Get your free API key

