# Changelog of Amazon Scraper (Pay-Per-Event) (`prodiger/amazon-scraper`) Actor

- **URL**: https://apify.com/prodiger/amazon-scraper/changelog.md
- **Full Actor documentation**: https://apify.com/prodiger/amazon-scraper.md

## Changelog

### 0.1.0 — 2026-06-02

Initial release. Pay-per-event Amazon search-results scraper — a cheaper, more capable drop-in for `automation-lab/amazon-scraper`.

- Input: `searchQueries` and/or `startUrls`, `marketplace` (US/UK/DE/FR/ES/IT/CA/JP/IN/AU/MX), `sort` (relevance/price\_low/price\_high/avg\_rating/newest), `maxProductsPerSearch`, `maxSearchPages` (1–20 accepted for drop-in parity, internally capped at 7), `maxRequestRetries`, `proxyConfiguration`.
- Output: `asin`, `title`, `url`, `price`, `priceString`, `listPrice`, `listPriceValue`, `discountPercent`, `onSale`, `currency`, `rating`, `reviewCount`, `availability`, `sellerName`, `bestsellerRank`, `thumbnail`, `isPrime`, `isSponsored`, `brand`, `marketplace`, `pageNumber`, `searchQuery`, `scrapedAt`.
- `sort` maps to Amazon's `&s=` rank parameter (relevance omits it); applied to keyword seeds and carried through pagination. URL seeds keep their own ordering.
- `availability`, `sellerName`, `bestsellerRank` parsed best-effort from search cards — `null` when not confidently present (mirrors the `brand` convention).
- Run-scoped deduplication by `asin` — duplicate products across overlapping keyword searches or sponsored-then-organic placements are billed at most once.
- Charges `product_scraped` ($0.003) only after `pushData` succeeds — ~25% cheaper than `automation-lab/amazon-scraper` ($0.004/product, Free tier).
- Marketplace-aware currency in output rows; marketplace-aware `Accept-Language` header in pre-nav hooks for correct localization per request.
- Residential proxy default; HttpCrawler with low concurrency (5) and session pool to ride Amazon's bot detection. `extractionPath === 'none'` triggers session rotation on captcha-style 200s.
- European decimal-comma (`1.299,00 €`) and Japanese yen (`¥98,000`) prices parsed correctly.
- `Actor.on('aborting')` flushes state and exits within 1s so user cost ceilings are honored.
