Amazon Scraper API

Docs

ChatGPT Claude

Changelog

Every visible change to the API, the SDKs, and the dashboard. Newest first. Breaking changes are flagged; we give 14 days of notice.

Changelog

Breaking API changes are announced 14 days in advance via email + this page. In-flight requests are always settled under the old contract.


2026-10-27

API

  • /v1/amazon/product: Amazon started showing some requests a “Continue shopping” checkpoint page. It wasn’t recognised as a block, so affected requests returned 502 extraction_failed after a single attempt. They are now retried automatically, like any other block. If you saw a rise in extraction_failed from about Oct 22, this is why; none of those requests were charged.
  • /v1/amazon/product: Apple-brand listings (iPhone, MacBook, AirPods, Beats and similar) on several marketplaces, including amazon.ae, amazon.it and amazon.pl, returned 502 target_unreachable with last_block_reason: "degraded-render:no-detail-block" on every request. These pages have no product-details table, which our completeness check wrongly treated as an incomplete page. They now return full data (product_details and sales_rank stay empty because the page has none).
  • The 502 target_unreachable message now recommends waiting 60 seconds or more before retrying, matching the error codes table. It previously said about 10 seconds.

SDKs, CLI and MCP server (0.1.6)

  • All packages: default request timeout raised from 60s to 120s, so slow but successful scrapes are no longer cut off client-side.
  • Node, Python and Go SDKs: errors now expose the API’s error code (err.code, e.code, Error.Code()) for both error shapes, and the message shows it (previously the Node SDK printed [object Object]). The Go client keeps the HTTP status even when a proxy in between returns a non-JSON error page.
  • CLI: new --page flag for search; help text and README corrected.
  • MCP server: upgraded to the current MCP SDK (clears high-severity advisories); amazon_search documents start_page and no longer advertises pages; amazon_product accepts country.
  • Install names: the CLI is amazon-scraper-api-cli and the MCP server is amazon-scraper-api-mcp on npm. Some of our pages listed other names that do not exist; those are fixed.

Docs

  • Search endpoint: pages is accepted but currently ignored; each call returns one page, so paginate with start_page.
  • Error codes: corrected the error body example to match what the API returns, clarified that the request ID is sent in the X-Request-Id header, and added how to tell an API error from one generated by a proxy or CDN in between.
  • Getting started: 502 retry advice aligned to 60 seconds or more.
  • SDK quick-starts: corrected the feature list. The SDKs handle auth, request building, typed errors and webhook verification, but do not retry or rate-limit on their own, so add a retry loop around your calls. Fixed the Go example to read fields from the returned map.

2026-05-19

API

  • New error code: 404 product_not_found. When Amazon returns a 404 for the requested ASIN (product delisted, ID malformed, or never existed on the chosen marketplace), the API now returns a clean 404 with {"error":"product_not_found","retryable":false} instead of the misleading 502 target_unreachable it returned before. SDK consumers should treat 404 as a terminal failure; the ASIN won’t come back.
  • Skip the ?th=1 retry strategy on confirmed Amazon 404s. Saves 1 paid-residential rotation per delisted ASIN.
  • See updated error codes table and billing policy (404s remain free).
  • /v1/amazon/search now detects Amazon’s Akamai bot-manager interstitial (a 2-3 KB JS shell carrying a bm-verify token and a triggerInterstitialChallenge script). Previously these silent challenges slipped past the captcha detector, the extractor saw zero ASINs, and the request returned 502 extraction_failed. They now classify as amazon-robot-or-human, triggering the standard residential-IP rotation; you weren’t charged before and still aren’t, but the failure is now both rarer (rotation almost always recovers) and more honest when it does happen.
  • /v1/amazon/search adds an optional no_results: true flag (with total_results: 0) for the rare case where Amazon returns a real search page with zero matches. Pre-patch this surfaced as 502 extraction_failed; it now correctly returns HTTP 200 with an empty products array.
  • /v1/amazon/search field-extraction fixes (5 fields on every result card):
    • reviews_count: now populated. Pre-fix this was always null; the extractor was looking at a span class that Amazon hasn’t shipped in months. Source of truth is now the aria-label of the rating wrapper (“5,054 ratings”), which gives the precise integer rather than the rounded “(5K)” display value. Coverage on a typical search page: ~95-100%; null only when Amazon hides reviews on brand-new SKUs.
    • price_strikethrough: no longer captures per-unit prices. The historic bug surfaced as 0.23 on the Cremo cologne card (which is the $0.23/milliliter per-unit price, not a list price). The fix requires data-a-strike="true" and rejects any candidate whose surrounding text contains /fluid ounce, /milliliter, /Fl Oz, /Count, /Pound, /Ounce, /Each, /Pack, etc. Strikethrough is now null when the product isn’t on sale, and strictly greater than the current price when it is.
    • highest_price: mirrors the fixed strikethrough on search cards (real multi-tier ranges only surface on PDPs).
    • sales_volume: now populated. Returns the verbatim Amazon string ("5K+ bought in past month", "200+ bought in past week"). Coverage on popular categories: ~80-100%; null when Amazon doesn’t surface a velocity badge (low-traffic categories).
    • organic_position: guaranteed 1-indexed across non-sponsored cards. Sponsored cards get sponsored_position instead. The first organic card after any run of sponsored cards still gets position 1.

2026-04-21

Dashboard

  • /app/settings/billing: PAYG top-up calculator now updates the “Credits you’ll get” and “Basic scrapes” fields live as you type.
  • Loading skeletons added to dashboard home, billing, usage, and API keys routes - no more blank flash on first navigation.
  • Sidebar “Documentation” link now points at the new /docs site.

Docs

  • Launched /docs on the marketing site. 11 pages to start: Getting started, 3 endpoints (product / search / batch), 6 guides (auth, errors, rate limits, SDKs, billing, country & language), and this changelog.
  • Added /docs/llms.txt, /docs/llms-full.txt, and an .md variant for every doc URL so LLMs / coding agents can ingest the full corpus cheaply.

SDKs

  • amazon-scraper-api-sdk (Node) v0.1.4 - README updated with 5-credit pricing, removed claims about “no credit system”.
  • amazonscraperapi-sdk (Python) v0.1.4 - same.
  • amazon-scraper-api-sdk-go v0.1.4 - same.

2026-04-16

API

  • Credit rebase: 1 basic scrape is now priced at 5 credits (was 1). Plan allowances and PAYG packages scaled x5 accordingly - your dollar-cost-per-scrape is unchanged. The “1 credit = 1 scrape” pre-launch shorthand only applied to internal testing.
  • Headers prefix changed from Spb-* to Asa-*. Old prefix will keep returning values for 90 days, then be removed.

Dashboard

  • Live credit balance now read from authoritative ledger on every page load - no more stale numbers from cached mirrors.
  • Monthly usage graph restyled with visible bars even on zero-credit days.

2026-04-10

API

  • Shipped production success-rate improvements for Amazon’s latest A/B layout. Measured SR jumped from ~87% to ~97% on a 30-query mixed international set.
  • Parser hardening: gift-card and subscription-plan Amazon product templates now extract correctly instead of hitting extraction_failed.

2026-04-01

API

  • render_js and screenshot query params reserved. Passing either returns 501 not_implemented today; the real implementation is on the roadmap for Q3.
  • New response header Asa-Attempts reports how many internal retries we used to fetch your page.

Billing

  • Non-2xx responses are now guaranteed free - no edge case where a partial 502 is charged. See Billing policy.

Earlier

Older entries predate the public launch and aren’t preserved here. If you need historical info (old behaviour of a specific endpoint), email [email protected] and we’ll pull it from internal records.