# Changelog of App Store Revenue & Download Estimator - iOS and Google Play (`seibs.co/app-store-revenue-estimator`) Actor

- **URL**: https://apify.com/seibs.co/app-store-revenue-estimator/changelog.md
- **Full Actor documentation**: https://apify.com/seibs.co/app-store-revenue-estimator.md

## Changelog

### 0.2 - 2026-09-27

- Proxy: `apify_proxy_groups` now defaults to empty (Apify automatic groups). The previous default named a group that does not exist on most accounts, so proxy setup failed and requests went out direct. A requested group the account cannot use now falls back to automatic groups before going direct.
- Apple requests retry 403 / 429 / 5xx, transport errors, and non-JSON bodies up to 3 attempts with exponential backoff that honours Retry-After (capped at 10s). Other statuses still fail fast into a `fetch_error` record.
- Multi-app runs (`top_charts`, `app_estimate`, `estimate_monitor` with 2+ App Store apps) resolve metadata with batched iTunes Lookup calls, up to 100 ids per request, instead of one request per app. Apps missing from a batch fall back to a single lookup. Output records and PPE events are unchanged.

### 0.1 - 2026-06-12 - Initial release

- Four modes: `app_estimate` (default), `publisher_rollup`, `top_charts`, `estimate_monitor`.
- Apple App Store via the official free iTunes lookup / search / developer endpoints and the marketing RSS top-free / top-paid charts (top-grossing has no v2 feed, so it degrades to top-free + ratings-velocity revenue, verified live 2026-06-12).
- Google Play (no official API) via a logged-out public app-page scrape with curl\_cffi Chrome impersonation, parsing the ld+json and AF\_initDataCallback (ds:5) blobs defensively; any failure becomes a fetch\_error and the run continues.
- Estimator (`src/estimator.py`): download bands from Play install buckets, chart-rank power law, ratings velocity, or lifetime ratings count; gross revenue bands for paid apps and category-coefficient IAP/grossing revenue; stated confidence (low/medium/high), a methodology sentence, and caveats on every estimate. All calibration in one cited `CALIBRATION` dict.
- Time-series accuracy: per-app history KVStore (`app-estimate-history`, capped 90 entries); estimate\_monitor writes it, every mode reads it, so estimates tighten on scheduled re-runs.
- Cost-control: pre-flight caps, `_RunBudget` guard (1500s compute cap, low-rev abort, 800-record hard cap), demo-mode soft-fail, hardcoded PPE prices.
- Monitor mode (scheduled-run delta digest + Slack webhook), next-actions, and OUTPUT artifacts.
- Logged-out, public-data-only posture; firmographic (app/publisher) data, PII minimized. Not affiliated with Apple, Google, Sensor Tower, or data.ai.
