# Changelog of Apple Ad Repository Scraper (`devilscrapes/apple-ad-repository-scraper`) Actor

- **URL**: https://apify.com/devilscrapes/apple-ad-repository-scraper/changelog.md
- **Full Actor documentation**: https://apify.com/devilscrapes/apple-ad-repository-scraper.md

## Apple Ad Repository Scraper — Changelog

### 0.1.0 — 2026-09-21

- Real implementation: entity resolution (name search + direct id),
  live country-code resolution, RSQL query builder, curl-cffi HTTP
  transport with retry/backoff, per-target pagination, Pydantic
  `ActorInput`/`ResultRow`, PPE charges, per-target fault isolation.
- Live-confirmed and fixed two undocumented Apple wire-format
  constraints found during implementation:
  - `curl-cffi`'s `params=` dict URL-encodes values itself — passing
    an already-percent-encoded `ql` string double-encodes it and the
    API 400s. `client.fetch_ads` now takes the raw (unencoded) `ql`.
  - `countryOrRegion=in=(...)` is capped at 5 codes per query
    ("Number of countries greater than allowed limit"). `scraper.py`
    now chunks `country_codes` into groups of 5 and merges results —
    required for REQ-6's default (empty `countryOrRegions` → the
    full ~25-code live EU list) to work at all.
- `tests/fixtures/input.qa.json` and the input schema prefill now use
  a high-volume advertiser (Temu, App Store id 1641486558) as the
  `entities` target so cloud QA genuinely exercises pagination past
  the 50-item page size (REQ-14), confirmed live (100 rows fetched).

### 0.0.1 — 2026-09-21

- Scaffolded actor skeleton (`.actor/` manifest, minimal boot-only
  `src/main.py`, tests scaffold, promo.json). No real scraping logic
  yet — see `docs/specs/apple-ad-repository-scraper/tasks.md` T02-T09.
