# Changelog of App Store & Google Play Reviews Scraper · $0.15/1k (`leoworks/app-review-scraper`) Actor

- **URL**: https://apify.com/leoworks/app-review-scraper/changelog.md
- **Full Actor documentation**: https://apify.com/leoworks/app-review-scraper.md

## Changelog

### 2026-10-23 (2) — README search wording

- Search wording from keyword data: new SEO title and description, FAQ and section headings use the terms people search for. No change to the Actor, its input or prices.

### 2026-10-23 — README: common questions and schedules

- README only, no change to the Actor, its input or prices: three common questions first in the FAQ (why not the official API or an LLM, the alternatives, one how-to), a **Run it on a schedule** section with the usual rhythm.

### 0.1.10 (2026-10-21)

- Renamed the Actor to `app-review-scraper` (it leads with collection). Code and prices are the same as 0.1.9; only the Actor name and the README code examples changed.

### 0.1.9 (2026-10-21)

- Collection first: **Add AI labels** (formerly "Classify reviews with AI") is now off by default, so a default run collects reviews only ($0.15 per 1,000). Giving Custom labels or a Dataset ID turns labels on. Title, description and README now lead with collection; event prices are unchanged. No change to collection or the empty-page ladder.

### 0.1.7 (2026-10-21)

- Last stage added to the empty-page ladder: if the quick steps all stay empty, the page is asked again after a pause of about 1.5 minutes and once more about 4 minutes after that (same address first, then the XML spelling). Apple's empty episodes last minutes to hours, so the quick steps often fail together. No new request type, no extra proxy cost; a run with a stuck page can take a few minutes longer. Delayed rounds are skipped once the run is more than 20 minutes old.

### 0.1.6 (2026-10-20)

- Empty App Store pages now go through a short ladder, one try per step: the same address on a fresh connection, then the same feed in its XML spelling, then the XML spelling through a residential proxy (only at this point, never for a first request, skipped where the plan has no residential proxy). A step that works stays in use for the next pages of that app. `SUMMARY.sources[].fetchPath` shows `json`, `json_retry`, `xml` or `xml_residential`; `SUMMARY.ladder` counts recovered pages per step and `exhausted`; `SUMMARY.residential` shows requests and kilobytes sent through the residential proxy.
- If every step stays empty, the result is the honest outcome from 0.1.5 (`empty_feed` for apps with 200 or more ratings, nothing charged, previous Monitor baseline kept).

### 0.1.5 (2026-10-20)

- An App Store page that comes back empty (HTTP 200 with no reviews) is retried once on a fresh connection when it should not be empty: the first page, or a page right after a nearly full one. Before, an empty page in the middle of the feed silently ended the collection with fewer reviews than the store has. `SUMMARY.sources[].emptyPages` lists `{ page, outcome }` (`recovered` or `empty_twice`).
- If the first page stays empty although the storefront lists 200 or more ratings for the app, the source is recorded as `empty_feed` (a failed source, nothing charged, with a message that this is usually temporary on Apple's side) instead of "no reviews". Smaller apps still end as `no_reviews` with a note; a feed that stops mid-way keeps what was collected and adds a note.
- With a Monitor key, a run in which a feed stayed empty keeps the previous baseline instead of saving a smaller one.

### 0.1 (2026-10-19) — first release

- Collects reviews from the Apple App Store (public customer-review feed, up to 500 per country and sort order) and Google Play (the web endpoint the Play page uses, thousands per app) from links, IDs or package names, and classifies each review: 10 complaint types, praise, sentiment, serious-issue alert, needs-a-reply and up to 10 custom labels.
- Per app and country summary with a one-sentence `headline`, star distribution, complaint rate of the 5 newest app versions (`byVersion`), developer reply rate and unanswered queue (Google Play), monthly trend and last 90 days vs before; `REPORT`, `REPORT_APPS.csv`, `REPLY_QUEUE.csv`, `SUMMARY`.
- Optional **Monitor key**: rating change, new reviews, new serious issues and unanswered change since the last run (summary figures only, in the named key-value store `monitor-app-reviews` of the user's account).
- Side input **Dataset ID**: classify app reviews collected elsewhere.
- Pay per event: `review` $0.00015 (collected) + `review-judged` $0.0005 (classified) = $0.65 per 1,000 all-in. Filtered, repeated and empty reviews are free.
- No login, cookies or CAPTCHA handling: a blocked source is recorded as failed, never worked around.
