Amazon Product Scraper - Prices, BSR, Reviews & Alerts avatar

Amazon Product Scraper - Prices, BSR, Reviews & Alerts

Pricing

from $5.00 / 1,000 product scrapeds

Go to Apify Store
Amazon Product Scraper - Prices, BSR, Reviews & Alerts

Amazon Product Scraper - Prices, BSR, Reviews & Alerts

Scrape Amazon products across 11 markets: prices, BSR, ratings, reviews, availability, seller data, and rank-change alerts. Built for seller research, price tracking, competitor monitoring, and optional AI analysis.

Pricing

from $5.00 / 1,000 product scrapeds

Rating

0.0

(0)

Developer

Nick

Nick

Maintained by Community

Actor stats

0

Bookmarked

20

Total users

11

Monthly active users

3 days ago

Last modified

Share

Scrape Amazon product search results and product pages across supported markets, including prices, BSR, ratings, reviews, availability, seller data, and rank-change alerts.

Best first run

{
"searchQuery": "wireless earbuds",
"amazonDomain": "amazon.com",
"maxProducts": 10,
"fetchDetails": false,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"],
"apifyProxyCountry": "US"
}
}

Use this actor for seller research, competitor monitoring, price tracking, keyword checks, and product intelligence. Start small because Amazon is anti-bot-sensitive; increase detail fetching after a basic search works.

No cookies, no OAuth, no API keys (for the scraping) - runs on public data only. AI keys are optional and only needed when enableAiAnalysis: true.

Track Amazon prices and Best Sellers Rank across 11 marketplaces at $0.005/product - the only scraper on Apify Store with cross-run BSR time-series + real-time webhook alerts. Replaces $19-39/mo Keepa/AMZScout/RankBlaze SaaS at ~$11/mo for a 25-ASIN daily watchlist (3-5x cheaper than equivalent Apify scrapers). 5-provider AI competitive analysis. No subscription, no upfront cost - pay only for results you receive.

Why this beats the 50+ other Amazon scrapers

  • BSR rank tracking that actually persists - every other scraper ships a single-run snapshot. This one stores per-ASIN rank history in Apify's key-value store and emits rank_change, rank_peak, and rank_movement deltas on every run. Schedule it once and you have a free Keepa-style rank monitor.
  • Real-time webhook alerts - POST to Slack, Zapier, n8n, Make, Discord, or any HTTP endpoint the moment a competitor crosses your rank threshold. Replaces $19-39/month rank-alert SaaS (RankBlaze, AMZScout Stock Stats) at ~$11/month for a 25-ASIN daily watchlist.
  • Browser-grade anti-bot - curl_cffi Chrome 131 TLS fingerprint + per-request residential proxy rotation + WAF-retry logic. Survives Amazon's 2026 WAF rules that broke half the scrapers in the store.
  • 5-provider AI competitive intelligence - switch between OpenRouter (300+ models), Anthropic Claude, Google Gemini, OpenAI GPT, or self-hosted Ollama. AI auto-switches to a rank-movement narrator when BSR tracking is on.
  • 11 Amazon marketplaces - US, UK, DE, FR, IT, ES, NL, CA, JP, AU, IN. Each domain returns native currency. European decimal-comma prices (1.299,50 €) parse correctly.
  • Transparent pricing - $0.005/product (3-5x cheaper than equivalent competitor scrapers). $0.05 flat for AI analysis. $0.002 per webhook delivered. Failed scrapes and failed webhooks cost nothing.

Multi-marketplace arbitrage suite

Amazon Scraper is the anchor of harvestlab's 4-actor multi-marketplace cluster. Buyers tracking Amazon catalog usually want adjacent-marketplace coverage too - same SKU, different channel, different price. Pair them on a daily schedule with watchMode: true and you get unified cross-channel price-history datasets without writing any glue code.

Pair withCoveragePriceWhy pair
eBay Scraper13 country domains, auctions + Buy-It-Now + sold-comps$0.003/productSpot multi-marketplace arbitrage between Amazon catalog prices and eBay sold-comps
Bol.com ScraperNL + BE retail$0.005/productExtend Amazon EU intel into Dutch/Belgian markets where Amazon is weak
Shopify ScraperAny DTC Shopify store$0.004/productRound out marketplace research with direct-to-consumer Shopify storefront prices

All four share the same MCP-server tag, watchMode pattern, webhook event-log, and Apify key-value-store snapshot format - copy a working schedule from one to the others in minutes.

What it does

Scrapes Amazon product listings from search results or direct product URLs and extracts prices, ratings, reviews, images, seller info, Prime eligibility, Best Sellers Rank, and more - across 11 Amazon marketplace domains worldwide.

The actor goes beyond a point-in-time snapshot. Enable trackBestsellerRank and it persists each ASIN's rank across runs, emitting rank_now, rank_previous, rank_change, rank_peak, and rank_movement ("rising" / "falling" / "steady" / "new") on every item. Pair with Apify's built-in scheduler to build a persistent BSR history per ASIN with no external database required - cross-run state lives in a named Apify key-value store, one snapshot slot per Amazon domain.

Set alertWebhookUrl and the actor becomes a real-time rank-alert service: it POSTs a compact JSON payload to your URL (Slack, Discord, Zapier, Make, n8n, or any HTTP endpoint) whenever a tracked ASIN's absolute rank change crosses your threshold - no polling, fire-and-forget, billed only on successful delivery at $0.002/webhook.

Optionally generate AI-powered competitive pricing analysis via 5 LLM providers (OpenRouter, Anthropic, Google AI, OpenAI, Ollama) with market positioning, price sweet spots, brand comparisons, and actionable insights. When BSR tracking is also enabled, the AI report switches to a rank-movement narrator that explains why products are climbing or falling.

Supported Amazon domains:

DomainCountryCurrency
amazon.comUnited StatesUSD
amazon.co.ukUnited KingdomGBP
amazon.deGermanyEUR
amazon.frFranceEUR
amazon.itItalyEUR
amazon.esSpainEUR
amazon.co.jpJapanJPY
amazon.caCanadaCAD
amazon.com.auAustraliaAUD
amazon.inIndiaINR
amazon.nlNetherlandsEUR

Each domain returns results in local currency. The currency field in each output item reflects the currency actually rendered on the page - if your proxy's geo doesn't match the domain, Amazon may localize prices to the proxy's currency.

Features

  • Search scraping: Enter any keyword and scrape product results with automatic pagination across multiple pages
  • Direct URL scraping: Provide specific Amazon product URLs for detailed extraction including description, features, and seller info
  • 11 Amazon domains: Scrape any marketplace with localized pricing, availability, and language
  • Rich product data: Title, price, original price, discount %, rating, review count, brand, Prime status, images, badges, delivery info
  • Detail page extraction: Full product descriptions, bullet-point features, availability status, seller info, and category breadcrumbs
  • Multi-language support: Rating and review count parsing works across English, German, French, Spanish, Italian, Dutch, and Japanese pages
  • European decimal-comma parsing: Prices like 19,99 € or 1.299,50 € are correctly normalized to floats (19.99, 1299.50)
  • Dynamic currency detection: The currency field reflects the currency actually displayed on the page
  • Best Sellers Rank extraction: Each product emits bestseller_rank (integer) and bestseller_category
  • BSR time-series tracking (unique): trackBestsellerRank: true persists each ASIN's rank across runs and emits rank_now, rank_previous, rank_change, rank_peak, rank_movement deltas, plus a per-run rank_movement_summary item with top-5 climbers and top-5 fallers. Cross-run state is scoped per Amazon domain
  • BSR alert webhooks (unique): alertWebhookUrl + alertRankThreshold (default 50) fires an HTTP POST per ASIN whose |rank_change| >= threshold. Payload includes ASIN, title, URL, marketplace, rank_previous/now/change/pct, movement, peak, category, price, and scraped_at. Fire-and-forget with 5s timeout, 1 retry, and X-Actor-Run-Id header for traceability
  • Hi-res gallery images: Detail pages emit an images list of up to 12 alt-view images, upscaled to master asset by stripping CDN size specifiers
  • Anti-bot resilience: Browser TLS fingerprint impersonation via curl_cffi (Chrome 131) with residential proxy rotation per request, plus WAF-retry logic on search result pages
  • AI competitive analysis: 5 LLM providers - OpenRouter (300+ models), Anthropic (Claude), Google AI (Gemini), OpenAI (GPT), Ollama (self-hosted). Market overview, pricing sweet spots, brand rankings, and opportunity identification
  • Pay-per-result pricing: $0.005/product - no upfront costs, no monthly subscription

Comparison with alternatives:

Scraper$/1,000 productsAI analysisBSR snapshotBSR time-seriesBSR webhooksMulti-LLM
This actor$5.00YES (5 providers)YESYES (unique)YES (unique)YES
junglee/amazon-crawler$3.00noyesnonon/a
junglee/free-amazon-product-scraper$6.20noyesnonon/a
automation-lab/amazon-scraper$2-4 tierednoyesnonon/a

Every other Amazon scraper on the Apify Store ships a point-in-time BSR snapshot at best. This actor is the only one with cross-run BSR time-series tracking AND real-time BSR alert webhooks - schedule it daily and every ASIN emits rank_change, rank_peak, and rank_movement vs. the previous run, with optional HTTP POST alerts on threshold crossings.

Use Cases

  • E-commerce sellers - Monitor competitor pricing across 11 markets and identify MAP violations. Typical setup: 100 ASINs scraped daily across 3 domains = ~$1.50/day, vs. $99-299/month for Prisync / Pricetrue.
  • Brand & rank monitoring - Get a Slack alert the moment a competitor's BSR climbs past your threshold. Replaces: RankBlaze ($19/mo), AMZScout Stock Stats ($29/mo), Keepa Premium ($24/mo) - 25-ASIN daily watchlist runs ~$11.43/month here, with the full raw catalog as a bonus.
  • Dropshippers & arbitrage - Find profitable products by cross-domain price-arbitrage scans (e.g. amazon.com vs amazon.de). The discount_percentage and bestseller_rank fields surface high-margin candidates fast.
  • Market & category research - Pull 500-product samples per category and analyze brand share, price distribution, sponsored-vs-organic ratio, and review momentum. AI competitive report turns the raw rows into a 1-page market brief.
  • Affiliate marketers - Discover top-rated, high-review-count products by category for "best of 2026" listicles. Sort by avg_review or newest to surface fresh-but-validated picks.
  • MAP & price-policy enforcement - Daily BSR + price scans across resellers; flag any price below your floor and route the alert to a procurement Slack channel via the webhook.
  • Procurement teams - Benchmark supplier quotes against live Amazon list prices at scale; the currency + availability fields make cross-border procurement decisions defensible.
  • AI / ML training data - Pull thousands of product titles, bullet features, and descriptions for embedding fine-tunes or product-categorization models - no API quotas, just pay-per-row.
  • BI / dashboard pipelines - Push CSV / JSON straight into Google Sheets, Snowflake, or BigQuery via Apify's 2,000+ integrations. The scraped_at ISO timestamp makes time-series joins trivial.

Input

Search Parameters

  • Search Query (searchQuery): Keywords to search for (e.g., "wireless headphones", "laptop stand", "organic coffee")
  • Product URLs (productUrls): Direct Amazon product URLs - provide specific ASINs or product pages for detailed extraction. Overrides search query when provided
  • Amazon Domain (amazonDomain): Which Amazon marketplace to scrape. Options: amazon.com (default), amazon.co.uk, amazon.de, amazon.fr, amazon.it, amazon.es, amazon.ca, amazon.co.jp, amazon.com.au, amazon.nl, amazon.in
  • Max Products (maxProducts): Maximum number of products to scrape (1-100, default: 10). Higher values paginate through multiple search result pages
  • Sort By (sortBy): Sort order for search results - relevance (default), price-asc, price-desc, avg-rating, newest
  • Fetch Product Details (fetchDetails): Visit individual product detail pages to enrich results with brand, availability, description, features, and seller info (default: false for faster first runs)

BSR Time-Series & Alerts

  • Track Best Sellers Rank (trackBestsellerRank): Persist each product's BSR across runs and emit rank delta fields (rank_now, rank_previous, rank_change, rank_peak, rank_movement). Forces fetchDetails: true. Default: false
  • BSR Alert Webhook URL (alertWebhookUrl): POST a JSON payload to this URL whenever a tracked ASIN's absolute rank_change crosses the threshold. Works with Slack, Zapier, Make, n8n, Discord, or any HTTP endpoint. Auto-enables trackBestsellerRank
  • BSR Alert Threshold (alertRankThreshold): Minimum absolute rank_change required to fire a webhook (default: 50). Lower = more alerts

AI Analysis Settings

  • Enable AI Analysis (enableAiAnalysis): Toggle AI-powered competitive analysis on or off (default: off). Requires an LLM API key when enabled
  • LLM Provider (llmProvider): Choose between OpenRouter (recommended - 300+ models), Anthropic (Claude), Google AI (Gemini), OpenAI (GPT), or Ollama (self-hosted)
  • OpenRouter API Key (openrouterApiKey): Your API key from openrouter.ai
  • Anthropic API Key (anthropicApiKey): Your API key from console.anthropic.com
  • Google AI API Key (googleApiKey): Your API key from aistudio.google.com
  • OpenAI API Key (openaiApiKey): Your API key from platform.openai.com
  • Model Override (llmModel): Optional custom model selection. Leave empty for defaults (Gemini 2.0 Flash for OpenRouter, Claude Sonnet for Anthropic, Gemini 2.0 Flash for Google AI, GPT-4o Mini for OpenAI, Llama 3.1 for Ollama)

Proxy Settings

Residential proxy is strongly recommended - Amazon's AWS WAF frequently blocks datacenter IPs, especially on non-US marketplaces.

The actor uses browser TLS fingerprint impersonation (curl_cffi Chrome 131) combined with per-request proxy rotation and automatic WAF-retry on search result pages, but residential IPs substantially improve success rates across all domains.

Key proxy tip: Set apifyProxyCountry to match your target domain. Amazon localizes prices and content based on the requesting IP's geography - a US proxy on amazon.co.jp will return USD prices instead of JPY.

Target domainRecommended apifyProxyCountry
amazon.comUS
amazon.co.ukGB
amazon.deDE
amazon.frFR
amazon.itIT
amazon.esES
amazon.co.jpJP
amazon.caCA
amazon.com.auAU
amazon.nlNL
amazon.inIN

amazon.fr WAF limitation: amazon.fr enforces a stricter AWS WAF than other EU domains. Prefer direct product URL scraping (/dp/ASIN) over keyword search on this domain. If search fails, fall back to amazon.de or amazon.co.uk - they share most of the EU catalog.

Output

Search Results

Each product from search results includes:

FieldDescription
asinAmazon Standard Identification Number
titleProduct title
priceCurrent selling price
original_priceOriginal/list price (if discounted)
discount_percentageComputed discount percent when both prices are present
currencyCurrency code as displayed on the page (USD, EUR, GBP, JPY, etc.)
ratingAverage customer rating (out of 5)
reviews_countNumber of customer reviews
is_primeWhether the product is Prime eligible
is_sponsoredWhether the listing is a sponsored ad
in_stockBoolean - whether the item is currently purchasable
image_urlMain product image URL
urlDirect link to the product page
brandBrand or manufacturer name
badgeSpecial badges (Best Seller, Amazon's Choice)
delivery_infoDelivery date information
page_numberWhich search result page the product appeared on
amazon_domainThe marketplace domain scraped
search_queryThe search term used
scraped_atISO 8601 timestamp

Product Detail Pages

When scraping direct product URLs or enabling fetchDetails: true on search, additional fields are extracted:

FieldDescription
descriptionFull product description text
featuresBullet-point feature list
availabilityStock availability status
sellerThird-party seller name (if not Amazon)
categoryProduct category breadcrumb path
imagesList of hi-res gallery image URLs (up to 12)
bestseller_rankAmazon's "Best Sellers Rank" position in its category
bestseller_categoryCategory label associated with bestseller_rank

BSR Time-Series Fields

When trackBestsellerRank: true, these fields are added to every product:

FieldDescription
rank_nowCurrent BSR (same as bestseller_rank)
rank_previousBSR from the previous run (null on first run)
rank_changerank_previous - rank_now. Positive = climbed, negative = fell
rank_peakBest (lowest-number) rank ever observed for this ASIN
rank_movement"new" / "rising" / "falling" / "steady"
rank_previous_scraped_atISO timestamp of the previous snapshot
hours_since_last_snapshotHours between previous snapshot and this run

Sample Output

{
"asin": "B0CHX3QBCH",
"title": "Apple iPhone 15 Pro, 128GB, Natural Titanium",
"price": 999.00,
"original_price": 1099.00,
"discount_percentage": 9.1,
"currency": "USD",
"rating": 4.6,
"reviews_count": 2431,
"is_prime": true,
"is_sponsored": false,
"in_stock": true,
"image_url": "https://m.media-amazon.com/images/I/81Os1SBkFpL._AC_SL1500_.jpg",
"url": "https://www.amazon.com/dp/B0CHX3QBCH",
"brand": "Apple",
"badge": "Amazon's Choice",
"delivery_info": "FREE delivery Tomorrow",
"availability": "In Stock",
"seller": "Amazon.com",
"features": ["6.1-inch Super Retina XDR display", "A17 Pro chip", "48MP Main camera", "Titanium design"],
"category": "Electronics > Cell Phones & Accessories > Unlocked Cell Phones",
"bestseller_rank": 4,
"bestseller_category": "Unlocked Cell Phones",
"description": "The iPhone 15 Pro features a titanium design with the A17 Pro chip...",
"amazon_domain": "amazon.com",
"search_query": "iphone 15 pro",
"scraped_at": "2026-04-18T10:15:00Z"
}

BSR Rank Movement Summary

A rank_movement_summary rollup item is pushed at the end of each run when a prior snapshot exists:

{
"type": "rank_movement_summary",
"amazon_domain": "amazon.com",
"search_query": "air fryer",
"snapshot_at": "2026-04-23T12:00:00+00:00",
"previous_snapshot_at": "2026-04-22T12:00:00+00:00",
"climbers_count": 3,
"fallers_count": 2,
"top_climbers": [{"asin": "B0C...", "rank_previous": 812, "rank_now": 417, "rank_change": 395, "title": "...", "bestseller_category": "..."}],
"top_fallers": [{"asin": "B0D...", "rank_previous": 42, "rank_now": 210, "rank_change": -168, "title": "...", "bestseller_category": "..."}]
}

Screenshots / Sample Output

What you'll see in Apify Console -> Storage -> Default dataset -> JSON after a daily-scheduled run:

Sample BSR rank-movement output (one row per tracked ASIN):

{
"asin": "B0CHX3QBCH",
"title": "Keychron Q1 Pro QMK/VIA Wireless Mechanical Keyboard",
"rank_now": 417,
"rank_previous": 812,
"rank_change": 395,
"rank_change_pct": 48.65,
"rank_movement": "rising",
"rank_peak": 390,
"bestseller_category": "Electronics > Computer Keyboards",
"scraped_at": "2026-04-23T12:00:00+00:00"
}

Sample Slack alert payload (POSTed to alertWebhookUrl when |rank_change| >= alertRankThreshold):

{
"asin": "B0CHX3QBCH",
"title": "Keychron Q1 Pro QMK/VIA Wireless Mechanical Keyboard",
"url": "https://www.amazon.com/dp/B0CHX3QBCH",
"marketplace": "amazon.com",
"rank_previous": 812,
"rank_now": 417,
"rank_change": 395,
"rank_change_pct": 48.65,
"rank_movement": "rising",
"price": 199.00,
"currency": "USD",
"scraped_at": "2026-04-23T12:00:00+00:00"
}

Run a single ASIN to see this output live.

Pricing

This actor uses pay-per-event pricing:

EventPriceDescription
product-scraped$0.005Each product successfully scraped with data
rank-tracked$0.01Each ASIN annotated with BSR time-series deltas (only when trackBestsellerRank: true)
alert-dispatched$0.002Each BSR-alert webhook successfully POSTed (2xx response). Failed webhooks are NOT charged
ai-analysis-completed$0.05One-time charge when AI competitive analysis is generated

Skyfire bulk bundle (AI-agent payment rail)

A skyfire-bundle-1000-products event ships at $5.00 per 1,000 products for AI agents paying via the Skyfire JWT rail. Effective rate: $0.005/product - at parity with the raw product-scraped baseline. This is intentional: Skyfire requires a $5 minimum charge per actor invocation, and the bundle aligns with that floor. There is NO per-unit discount - Skyfire-route is purely a payment-rail convenience for AI agents that need single-prepaid-call billing semantics. Pay-as-you-go users via Apify's standard PPE rail get identical per-product pricing. Skyfire is opt-in, not preferred.

Cost examples:

  • 100 products = $0.50
  • 100 products + AI analysis = $0.55
  • 100 products + BSR tracking (60 have BSR) + AI rank report = $0.005 x 100 + $0.01 x 60 + $0.05 = $1.15
  • 25-product daily watchlist with 3 webhook alerts/day = $0.005 x 25 + $0.01 x 25 + $0.002 x 3 = $0.381/day ~ $11.43/month - vs. $19-39/month flat for RankBlaze / Keepa rank alerts, with you keeping the full raw catalog data

Export formats: JSON, CSV, Excel - plus 2,000+ app integrations via Apify (Google Sheets, Slack, Zapier, Make, Amazon S3).

vs. commercial alternatives: Rainforest API charges $49+/mo and DataForSEO $50+/mo for Amazon product data APIs with monthly minimums. This actor uses pay-per-event with no subscription: $0.005/product and zero monthly fees.

Quick Start

Minimum working input - scrape 10 products from amazon.com with residential proxy:

{
"searchQuery": "wireless headphones",
"amazonDomain": "amazon.com",
"maxProducts": 10,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"],
"apifyProxyCountry": "US"
}
}

Cost estimate: 10 products x $0.005 = $0.05. Add enableAiAnalysis: true for a one-time +$0.05 competitive report.

Scrape specific products by ASIN

{
"productUrls": [
"https://www.amazon.com/dp/B0C8S5Y3KV",
"https://www.amazon.com/dp/B09XS7JWHH"
],
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"]
}
}

Search with AI competitive analysis

{
"searchQuery": "standing desk",
"amazonDomain": "amazon.com",
"maxProducts": 50,
"enableAiAnalysis": true,
"llmProvider": "openrouter",
"openrouterApiKey": "sk-or-...",
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"]
}
}

AI analysis examines all scraped products and generates a structured report including: market overview, price sweet spot ranges, top-5 best-value picks, brand share distribution, and opportunity identification. Output is returned as structured JSON alongside the product data.

Track Best Sellers Rank over time

Run once per day on a schedule - each ASIN will emit its rank delta vs. the previous run:

{
"searchQuery": "air fryer",
"amazonDomain": "amazon.com",
"maxProducts": 50,
"trackBestsellerRank": true,
"enableAiAnalysis": true,
"llmProvider": "openrouter",
"openrouterApiKey": "sk-or-...",
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"],
"apifyProxyCountry": "US"
}
}

First run: every ASIN emits rank_movement: "new" and null deltas (baseline established). Second run onward: every ASIN emits rank_change, rank_movement, and a historical rank_peak. The AI report switches to a rank-movement narrator listing top climbers and fallers with plausible drivers.

Real-time BSR alerts via webhook

{
"searchQuery": "mechanical keyboard",
"amazonDomain": "amazon.com",
"maxProducts": 25,
"trackBestsellerRank": true,
"alertWebhookUrl": "https://hooks.zapier.com/hooks/catch/12345/abcde",
"alertRankThreshold": 100,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"],
"apifyProxyCountry": "US"
}
}

Webhook payload shape (one POST per qualifying ASIN):

{
"asin": "B0CHX3QBCH",
"title": "Keychron Q1 Pro QMK/VIA Wireless Mechanical Keyboard",
"url": "https://www.amazon.com/dp/B0CHX3QBCH",
"marketplace": "amazon.com",
"rank_previous": 812,
"rank_now": 417,
"rank_change": 395,
"rank_change_pct": 48.65,
"rank_movement": "rising",
"rank_peak": 390,
"bestseller_category": "Electronics > Computer Keyboards",
"price": 199.00,
"currency": "USD",
"hours_since_last_snapshot": 24.03,
"scraped_at": "2026-04-23T12:00:00+00:00"
}

Each webhook includes an X-Actor-Run-Id header for correlating alerts with the run in the Apify Console. Only ASINs whose absolute rank_change is >= alertRankThreshold fire (both climbers and fallers). A per-run cap of 250 webhooks prevents runaway misconfigurations.

MCP Quickstart - call this actor from Claude / Cursor / ChatGPT

Install the Apify MCP server in your AI agent of choice:

# Claude Code
claude mcp add apify -- npx -y @apify/actors-mcp-server --token YOUR_APIFY_TOKEN
# Claude Desktop / Cursor (add to mcp.json):
{"mcpServers":{"apify":{"command":"npx","args":["-y","@apify/actors-mcp-server","--token","YOUR_APIFY_TOKEN"]}}}

Then prompt the agent:

"Use the harvestlab/amazon-scraper actor on Apify to find the top 10 wireless earbuds under $100 on amazon.com sorted by review count, with rating and ASIN. Push the results back as JSON."

The agent will discover the actor's dataset_schema.json, generate the right input, run it, and pipe the typed output back into your conversation.

Use with AI agents

amazon-scraper output is agent-ready: typed product dicts with BSR rank, time-series deltas, currency, and AI sentiment across 11 marketplaces - wrap it as a single tool and your product-research, arbitrage, or competitive-intel agent gets cross-marketplace BSR + price intelligence that commodity Amazon scrapers don't expose. See Apify's actor-templates - specifically js-langchain and js-langgraph-agent - for end-to-end skeletons.

LangChain tool wrapper

from langchain_core.tools import Tool
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
def _track_amazon_products(args: dict) -> list:
run = client.actor("harvestlab/amazon-scraper").call(run_input={
"productUrls": args["productUrls"],
"amazonDomain": f"amazon.{args.get('marketplace', 'com').lower()}",
"trackBestsellerRank": True,
"fetchDetails": True,
})
return list(client.dataset(run["defaultDatasetId"]).iterate_items())
track_amazon_products = Tool(
name="track_amazon_products",
description="Scrape Amazon products with BSR rank + price across 11 marketplaces (US/UK/DE/FR/IT/ES/NL/CA/JP/AU/IN). Input: {productUrls: [str], marketplace: str}.",
func=_track_amazon_products,
)
# track_amazon_products.invoke({"productUrls": ["https://www.amazon.com/dp/B0CHX3QBCH"], "marketplace": "US"})

LangGraph price-tracking node

from langgraph.graph import StateGraph, END
from typing import TypedDict
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
class PriceState(TypedDict):
asins: list[str]
threshold: int
products: list[dict]
alert: bool
def track_node(state: PriceState) -> PriceState:
urls = [f"https://www.amazon.com/dp/{a}" for a in state["asins"]]
run = client.actor("harvestlab/amazon-scraper").call(run_input={
"productUrls": urls, "trackBestsellerRank": True, "fetchDetails": True,
})
items = list(client.dataset(run["defaultDatasetId"]).iterate_items())
breached = any(abs(i.get("rank_change") or 0) >= state["threshold"] for i in items)
return {**state, "products": items, "alert": breached}
graph = StateGraph(PriceState)
graph.add_node("track", track_node)
graph.set_entry_point("track")
graph.add_edge("track", END)
# graph.compile().invoke({"asins": ["B0CHX3QBCH"], "threshold": 50, "products": [], "alert": False})

Troubleshooting

Getting 403 / 429 / CAPTCHA errors

Amazon's WAF is blocking the request. Steps to resolve:

  1. Switch to RESIDENTIAL proxy (apifyProxyGroups: ["RESIDENTIAL"]) if you're using datacenter IPs.
  2. Set apifyProxyCountry to match the target domain (e.g. US for amazon.com, DE for amazon.de). Mismatched geo triggers harsher WAF treatment.
  3. Retry the run - WAF posture varies by hour and IP batch. A fresh residential IP from the same country often succeeds.
  4. If scraping amazon.fr, prefer direct product URLs (productUrls) over keyword search - search endpoints on that domain are blocked far more aggressively.

Prices appearing in the wrong currency

The proxy IP's geographic location determines which currency Amazon renders, not the domain. Set apifyProxyCountry to the matching country code (see the table in the Input section above).

No products returned (empty dataset)

  1. Verify the amazonDomain matches the locale of your searchQuery (e.g. German keyword with amazon.de).
  2. Test with a simple English keyword like "laptop" on amazon.com with maxProducts: 5 to isolate the issue.
  3. Retry with fresh proxy IPs - if the first IP batch is flagged, a new run often succeeds.
  4. Check the actor log for WAF / CAPTCHA detection messages. If present, follow the 403/429 steps above.

Webhooks not firing

  • Webhooks only fire on the second run onward - first run establishes the baseline, so there is no prior rank_change to evaluate.
  • Ensure trackBestsellerRank: true is set (or provide alertWebhookUrl - it auto-enables BSR tracking).
  • Confirm the URL is reachable and returns a 2xx response. Only successful dispatches are billed.
  • Check the bsr_alert_dispatch_summary item pushed to the dataset for per-webhook results.

BSR fields are null / rank_movement is "new"

This is expected on the first run - no prior snapshot exists yet. Schedule the actor daily and deltas appear from the second run onward. Note: not all products carry a BSR - Amazon only assigns rank to products with at least one sale.

amazon.fr returning no results

amazon.fr runs the strictest AWS WAF of all supported EU domains. Workarounds: (1) retry the run, (2) use direct product URLs (/dp/ASIN) which succeed more reliably than keyword search, or (3) fall back to amazon.de / amazon.co.uk / amazon.it which share much of the EU catalog.

amazon.co.jp prices showing in USD/EUR

Amazon localizes pages based on requesting IP. Set apifyProxyCountry: "JP" to get a Japanese exit IP and genuine JPY results.

This actor is provided as a technical tool. Users are responsible for ensuring their use complies with:

  • Amazon's Terms of Service and Conditions of Use
  • Applicable data protection laws (GDPR, CCPA, etc.)
  • Local laws regarding web scraping and data collection

Amazon's Terms of Service restrict automated access to their platform. Use this tool responsibly and at your own risk. This actor does not store or process personal data - it only extracts publicly visible product catalog information.

The developer of this actor is not responsible for any misuse or legal consequences arising from its use.

  • eBay Scraper - pair with Amazon to spot multi-marketplace arbitrage between Amazon catalog prices and eBay sold-comp data across 13 country domains.
  • Bol.com Scraper - extend Amazon EU price intel into the Netherlands and Belgium retail market with NL/BE price-tier history.
  • Shopify Scraper - round out marketplace research with DTC store pricing pulled from any Shopify storefront's /products.json API.