# Changelog of 🔥 Apple Store Api (`bebity/apple-store-api`) Actor

- **URL**: https://apify.com/bebity/apple-store-api/changelog.md
- **Full Actor documentation**: https://apify.com/bebity/apple-store-api.md

## Changelog — Apple App Store Scraper (`bebity/apple-store-api`)

Mirrors every shipped version of `.actor/actor.json` / `package.json`. The README carries an excerpt.

### 2.0.2 — 2026-09-15 · pricing

#### Changed

- Pay-per-event is live on the Store since 2026-09-15. The prices listed in 2.0.0 were never billed; these are:
  - `scraped-app` — $0.20 / 1,000 app rows, on every plan.
  - `app-full-details` and `app-public-store-details` — +$0.30 / 1,000 on the Free, Bronze and Silver plans, +$0.20 from Gold.
  - `app-ratings` — +$0.20 / 1,000, on every plan.
  - `app-review` — $0.50 / 1,000 on the Free plan, $0.40 from Bronze.
- Each run is charged Apify's `apify-actor-start` event: $0.00005 at the actor's fixed 1 GB.
- Event titles and descriptions rewritten for the Store's pricing table; the input form's box descriptions show the new prices.

### 2.0.1 — 2026-09-15

#### Changed

- An invalid input no longer fails the run: the log explains in colour what to fix, and the run ends as succeeded — no request sent, nothing charged. Values the input schema itself forbids (an unknown `action`, a wrong type) are still refused by Apify before the run starts.
- Memory is fixed at 1 GB (`minMemoryMbytes` = `maxMemoryMbytes` = 1024): the actor is HTTP-only and never needs more.

### 2.0.0 — 2026-09-15 · full rewrite

Rewritten on Crawlee `HttpCrawler`; the `app-store-scraper` library is removed. Priced pay-per-event.

#### Breaking — input

- One action per run: `action` is now `searchApps` · `appDetails` · `similarApps` · `appReviews`; privacy and ratings became the boxes `includeAppStorePage` and `includeRatings`.
- `appIdOrUrl` → `appIdsOrUrls`, `devIdOrUrl` → `developers`, `search` → `searchTerms` — all lists.
- `collection` / `category` → `chart` / `genre` (Apple's 27 genres and 61 sub-genres).
- `num` → `maxItems` (whole run) and `maxReviewsPerApp`.
- `fullDetail` → `includeAppFullDetails` (on by default); unticked, rows are short (what the search, chart or similar-apps source gives).
- A v1 input is refused with a message mapping it to the new fields.

#### Breaking — output

- App rows keep the 33 historical `cleanApp` fields and their v1 types: `id` and `developerId` stay numbers, like the new `sourceAppId` and a review's `appId` (a review's own `id` stays a string).
- Reviews moved to their own `reviews` dataset.
- Failures are `{ failed: true, reason, inputUrl, error, scrapedAt }` rows instead of empty "succeeded" runs.

#### Added

- Pay-per-event: `scraped-app`, `app-full-details`, `app-public-store-details`, `app-ratings`, `app-review`.
- Platforms: iPhone, iPad, Mac, Apple TV, Apple Watch, Vision Pro; Apple TV charts.
- Developers by name, resolved with a `developerConfidence`.
- `includeAppStorePage` — privacy, in-app purchases (the ones the store lists, local prices), the 25 latest versions and the app's chart rank (`chartRank`), from one page per app.
- Reviews up to 100,000 per app, with `developerResponse`, `isEdited`, `position`, and the `favorable` / `critical` sorts.
- Ratings histogram with its total; provenance fields `sourceType`, `sourceAppId`, `searchTerm`, `position`, `platform`.
- Dataset views `overview` and `failed_items` for both datasets; output schema.

#### Fixed

- Privacy labels — dead since Apple removed the page token.
- Numeric app IDs were sent as bundle IDs and returned 0 rows.
- App Store URLs were never parsed.
- Reviews were capped at 50, developer catalogues at 50.
- Rating counts were truncated (`42,036,572` read as `42`).
- Errors were swallowed: every run ended "succeeded", with or without data.

### 0.0.18 — 2023-07-04

Legacy actor: a thin wrapper around `app-store-scraper@0.18.0`, monthly subscription.
