# Changelog of Amazon Search Scraper — Best Sellers, Ranks & Prices (`kestrel/amazon-search-scraper`) Actor

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

## Changelog

### 1.3 — 2026-09-07

- **Fix: every run ended with `amazon page failed after 5 tries (last: 503)`.** Amazon started refusing the browser identity the actor sent (a Chrome/139 user agent) with a 503 on every IP, datacentre and residential alike, so a run burned its five attempts and delivered nothing. The actor now identifies as a current Chrome (152), which gets search and chart pages again from every IP tested, and a product-style page that arrives with its below-the-fold section empty is treated as a soft block that rotates the IP instead of a page with no results. No change to inputs, output rows or pricing.

### 2026-08-30

- Reliability: a run that cannot act on its input — a URL from the wrong site, a name nothing resolves to, an empty target list, a number outside the documented range — now ends cleanly with the reason on the run card instead of as a failed run. Nothing is charged in either case; a blocked or throttled source still fails loudly.
- Store listing: moved into the categories buyers actually browse (the old `Business` category has no Store page).

### 1.2 — 2026-08-29

- **Automatic residential fallback.** Amazon refuses search pages (`/s?k=`) from whole datacentre ranges for minutes at a time, which occasionally ended a run with `amazon page failed after 5 tries (last: 503)` even though the same input had just worked. A run now starts on the cheap proxies you chose and escalates only when it is pushed back: after the same page is refused twice in a row the sessions re-open on a residential proxy and stay there for the rest of the run, so nothing repeats attempts that were never going to work. Nothing to configure, no change to pricing, and a run that is never refused never leaves the cheap pool — a run costs the least that still succeeds. Reported as `http.escalated` in the run's SUMMARY.

### 1.1 — 2026-08-29

- Search pages answered 503 for the previous browser signature from 2026-08-29; the fetcher now presents a current Chrome build (verified: full pages on 4 of 4 residential IPs where the old one got 503 on 3 of 4).
- `chart: "movers"` removed. Amazon renders Movers & Shakers client-side (the page HTML carries no products), so it always returned zero rows; the actor now says so instead of running an empty job. Diff two daily Best Sellers runs for the same signal.
- Chart rows carry their `image` again — chart tiles moved to the `images-na.ssl-images-amazon.com` host, which the parser did not recognise.
- A chart page renders 30 of its 50 entries in HTML. For every rank of the Top 100 use the [Amazon Best Sellers Scraper](https://apify.com/kestrel/amazon-best-sellers-scraper), which reads Amazon's own load-more call.

### 1.0 — 2026-08-26

First release.

- Amazon search results for any keyword, in any of 20 marketplaces: ASIN, title, price, rating, rating count, image, and the exact slot on the page.
- Category charts: Best Sellers, New Releases and Movers & Shakers, each row carrying its chart rank.
- Sponsored placements are **flagged, not hidden** — and `skipSponsored` drops them before billing, so keyword-rank tracking measures organic position honestly.
- Multi-page walking with automatic stop when a page adds nothing new; an ASIN found by two keywords is delivered and billed once.
- Filters that run **before** billing: `skipSponsored`, `minRating` and `maxResultsPerQuery`. Filtered rows are never charged.
- Billing: pay per delivered product row. Status rows, filtered rows, empty searches and failed jobs are free.
- Reliability: Amazon's captcha page is detected and the session rotates to a fresh IP rather than being parsed as an empty result page.
