The Mine Works
Amazon Product Research in Python: ASIN Data, BSR and Price Without the SP-API
← All posts
tutorial June 30, 2026 · 5 min read

Amazon Product Research in Python: ASIN Data, BSR and Price Without the SP-API

How to scrape Amazon product listings by ASIN or keyword — price, Best Sellers Rank, star rating, review count, seller and feature bullets — across 8 marketplaces.

Try the scraper

The actor referenced in this article. Pay only for results delivered.

View the scraper →

The Amazon Selling Partner API (SP-API) gives you access to your own seller data. It gives you almost nothing about competitor products, pricing or rankings unless you are an approved third-party developer with a production app that has passed Amazon’s review. For product research, competitive analysis and price tracking — the actual jobs most people want to do — the SP-API is a dead end.

The Amazon Products Scraper pulls structured product data by ASIN or keyword search across 8 Amazon marketplaces: title, price, Best Sellers Rank, star rating, review count, seller, brand, feature bullets, description and image URLs. No SP-API account, no developer approval process. $0.004 per product, nothing charged on failure.

What You Get Per Product

For each product the actor returns:

  • asin — the unique Amazon product ID
  • title — full product title
  • price + currency — current listed price
  • originalPrice + discount — crossed-out price and percentage saving when a deal is active
  • rating — 1–5 star average
  • reviewCount — total number of customer reviews
  • bsr + bsrCategory — Best Sellers Rank and the category it applies in
  • seller + brand
  • availability — “In Stock”, “Out of Stock”, etc.
  • features — bulleted feature list as an array of strings
  • description — full product description
  • images — up to 10 image URLs
  • variants — colour/size options with individual prices (when includeVariants: true)

Scrape by ASIN in Python

import os
from apify_client import ApifyClient

apify = ApifyClient(os.environ["APIFY_TOKEN"])

# Look up specific ASINs
asins = [
    "B0BSHF7WHW",  # Apple AirPods Pro
    "B09G9HD6PD",  # Kindle Scribe
    "B08MQZXN1X",  # Echo Dot 4th gen
]

run = apify.actor("themineworks/amazon-products").call(run_input={
    "asins": asins,
    "marketplace": "amazon.com",
    "includeVariants": False,
})

for product in apify.dataset(run["defaultDatasetId"]).iterate_items():
    if product.get("_type") == "summary":
        continue
    print(f"{product['asin']}: {product['title'][:60]}")
    print(f"  Price: {product.get('currency', '')}{product.get('price', 'N/A')}")
    print(f"  Rating: {product.get('rating')} ({product.get('reviewCount', 0):,} reviews)")
    print(f"  BSR: #{product.get('bsr', 'N/A')} in {product.get('bsrCategory', '')}")

Search by Keyword

run = apify.actor("themineworks/amazon-products").call(run_input={
    "keywords": ["noise cancelling headphones", "mechanical keyboard"],
    "marketplace": "amazon.com",
    "maxProductsPerSearch": 20,
    "includeVariants": False,
})

products = [p for p in apify.dataset(run["defaultDatasetId"]).iterate_items()
            if p.get("_type") != "summary"]

# Sort by BSR to find category leaders
ranked = sorted([p for p in products if p.get("bsr")], key=lambda p: p["bsr"])
for p in ranked[:5]:
    print(f"#{p['bsr']} in {p.get('bsrCategory','')}: {p['title'][:50]}")

Supported Marketplaces

Input valueMarketplace
amazon.comUnited States
amazon.co.ukUnited Kingdom
amazon.deGermany
amazon.frFrance
amazon.co.jpJapan
amazon.inIndia
amazon.caCanada
amazon.com.auAustralia

Wire It Into a Claude Agent

{
  "mcpServers": {
    "amazon-products": {
      "command": "npx",
      "args": ["-y", "@apify/mcp-client"],
      "env": {
        "APIFY_TOKEN": "your-token-here",
        "MCP_ACTOR_URL": "https://mcp.apify.com/?tools=themineworks/amazon-products"
      }
    }
  }
}

With Claude Desktop connected, you can ask Claude to look up a product by ASIN, compare competing options in a category, or find the BSR leaders in a niche. Claude calls the actor, structures the results, and answers directly in the conversation — no Python script required for one-off lookups.

Use Cases

Competitive product analysis. Pull the top 20 results for a target keyword. Compare BSR, rating, review count and price across the competitive set. Find gaps: categories where the BSR leader has a mediocre rating (3.8 stars) are often openings for a better product.

Price tracking. Run the same ASIN list daily and store results in a spreadsheet. Track price changes, deal activations and BSR movement over time — the kind of monitoring that normally requires a paid tool like Keepa or Jungle Scout.

Supplier discovery for e-commerce brands. Search a product category on amazon.in or amazon.de to find the local market leaders that may not appear in US results. The seller field tells you who is winning in each marketplace.

Catalogue enrichment. When you have a list of ASINs from a manufacturer or distributor spreadsheet, use the scraper to fill in missing fields: product title, image URL, description, category — data that avoids manual copy-paste for each SKU.

Pricing

Each product (ASIN lookup or search result) costs $0.004. Scraping 500 ASINs across two marketplaces costs $4. A weekly sweep of a 200-product catalogue costs $1.60/week.

Products that return a CAPTCHA or network error are not charged.

Frequently Asked Questions

Why is the price sometimes missing?

Amazon geo-locks pricing to sessions with accepted cookie consent and a matching regional IP. On cold residential proxy sessions — like a health check run — some pages load the product details but show no price in the main price element. Warm sessions (repeat runs with the same proxy session) have much higher price extraction rates.

Does it handle ASINs from any category?

Yes. Electronics, books, clothing, kitchen, tools — the actor uses the standard product page at /dp/{asin} which exists across all categories. Some category-specific fields (like book author or clothing size chart) are not extracted by default.

Can I extract all variants of a product?

Set includeVariants: true. The actor parses the variant selector (colours, sizes, styles) and records available options. Prices per variant are captured when Amazon renders them in the variant dropdown — this varies by product type.

What happens if Amazon returns a CAPTCHA?

The actor detects the CAPTCHA page (URL contains validateCaptcha or the title matches the CAPTCHA template) and retries with a fresh residential proxy IP. Up to 2 retries per product. If all retries fail, the product is skipped and not charged.

Related Actor

Explore the scraper referenced in this article — see inputs, outputs, and pricing, then run it on Apify.