Amazon Scraper API

PyPI - Python 3.9+

Python SDK

Type-hinted async + sync clients with auto-retry, pagination helpers, and streaming batch results. Drop-in for FastAPI, Airflow, or any data pipeline.

Quick start

1. Install

pip install amazonscraperapi-sdk

2. Scrape your first ASIN

from amazonscraperapi import Client

client = Client(api_key="asa_live_...")

product = client.products.get("B08N5KWBKK", domain="com")
print(product.title, product.price, product.rating)

3. Or async

import asyncio
from amazonscraperapi import AsyncClient

async def main():
    async with AsyncClient(api_key="asa_live_...") as client:
        product = await client.products.get("B08N5KWBKK")
        print(product.title)

asyncio.run(main())

How-to

Search Amazon

results = client.search.run(
    query="wireless earbuds",
    domain="com",
    pages=3,           # paginate automatically
    sort_by="best_match",
)
for r in results:
    print(r.position, r.asin, r.title, r.price)

Bulk-scrape via async batch

asins = ["B08N5KWBKK", "B0DZ7871B8", ...]  # up to 1,000

batch = client.batch.create(
    asins=asins,
    domain="com",
    webhook_url="https://your.app/webhook",  # optional
)

# Poll, or wait for the webhook
results = client.batch.wait(batch.id, timeout=600)
print(f"got {len(results)} products")

Scrape across marketplaces

for tld in ("com", "co.uk", "de", "co.jp"):
    p = client.products.get("B08N5KWBKK", domain=tld)
    print(tld, p.price, p.currency)

All 20 marketplaces supported. See /features for the full list.

Handle errors and retries

from amazonscraperapi import Client, RateLimitError, BlockedError

client = Client(api_key="asa_live_...", max_retries=3)  # retries built in

try:
    p = client.products.get("B08N5KWBKK")
except RateLimitError as e:
    print(f"hit limit, retry after {e.retry_after_ms}ms")
except BlockedError as e:
    print(f"upstream blocked, request_id={e.request_id}")

Why use the SDK over raw HTTP?

Type-safe responses

Every product field is a typed attribute. IDE autocomplete works. Mypy passes. Refactors are safe.

Built-in retries

Exponential backoff on 429 + 5xx. Configurable max attempts. Never charged for retries (only 2xx successes bill).

Pagination helpers

`client.search.run(pages=N)` returns a flat iterable of every result across pages. No manual pagination loop.

Async batch streaming

`async for r in client.batch.stream(batch_id):` yields results as they complete instead of waiting for the full batch.

Webhook signature verification

`Client.verify_webhook(headers, body)` checks the HMAC signature so you cannot accidentally trust a forged callback.

Test mode

Pass `mock=True` to short-circuit the real upstream call. Useful for unit tests, CI, and offline development.

Official resources

Pricing

Same rate across every integration. Monthly plans from $19 or pay-as-you-go at $0.90 per 1,000 successful requests. 1,000 free on signup.

Free

$0

Forever free on signup

  • check_circle1,000 requests / month
  • check_circle10 concurrent requests
  • check_circleAll 20 marketplaces
  • check_circleFull dashboard + analytics
  • check_circleTop-up at $0.90 / 1k
  • check_circleCommunity support
Start free
Most popular

Vibe

$19 / month

$0.70 / 1k effective

  • check_circle27,000 requests / month
  • check_circle30 concurrent requests
  • check_circleAll endpoints + content-language
  • check_circleCountry-matched residential IPs
  • check_circlePer-API-key usage tracking
  • check_circleTop-up at $0.90 / 1k
  • check_circleEmail support (1 business day)
Get Vibe

Pro

$49 / month

$0.60 / 1k effective

  • check_circle82,000 requests / month
  • check_circle50 concurrent requests
  • check_circlePriority routing queue
  • check_circleCountry-matched residential IPs
  • check_circleTeam seats (up to 5)
  • check_circleTop-up at $0.90 / 1k
  • check_circleEmail + chat support
Get Pro

Custom

$100-$2k / month

Flat $0.50 / 1k effective at every level

  • check_circle200k - 4M+ requests / month
  • check_circle100-500+ concurrent requests
  • check_circlePriority queue (highest)
  • check_circlePremium proxy pool + SLA on request
  • check_circleUnlimited team seats
  • check_circleWire / invoice / annual PO
  • check_circleDedicated Slack channel
Pick Custom level

Pay-as-you-go top-up

$0.90 / 1,000 successful requests

Available on every plan including Free. Top up any time when included credits run out. Only 2xx responses charged. Balance never expires.

Ship with Python today

1,000 free requests on signup. No credit card required.