# Changelog of Trustpilot Reviews Scraper (`devilscrapes/trustpilot-reviews-scraper`) Actor

- **URL**: https://apify.com/devilscrapes/trustpilot-reviews-scraper/changelog.md
- **Full Actor documentation**: https://apify.com/devilscrapes/trustpilot-reviews-scraper.md

## Trustpilot Reviews Scraper — Changelog

### 0.1.0 — 2026-09-12

- Implemented the real crawl: `challenge.py` (one Camoufox launch per run
  clears the block and extracts the replayable cookie jar, REQ-1/REQ-2),
  `browser.py` (Camoufox launch/page primitives, structural copy of the
  justdial/idealista pattern), `scraper.py` (curl-cffi `TrustpilotSession`
  handling pagination, star filtering, retry/backoff, and per-row
  `ResultRow` validation), and `parser.py` (pure `__NEXT_DATA__`
  extraction/mapping, no I/O).
- `main.py` now: validates input, charges `actor-start` once (REQ-9),
  solves the challenge once, dispatches businesses sequentially with fault
  isolation (REQ-7), dedupes rows by `review_id` before pushing and
  charging `result-row` (REQ-8), applies the client-side `language`
  fallback filter, and fails loud only when the run's total is zero
  (REQ-6).
- Added `tests/fixtures/next_data_page1.json` / `next_data_page2.json` /
  `next_data_stars5.json` / `next_data_empty.json` (synthesized from the
  confirmed live wire shape in `research/RECON-trustpilot-2026-09-12.md`)
  and a full unit-test suite across `parser`, `browser`, `challenge`,
  `scraper`, and `main` (72 tests, mocked Camoufox/curl-cffi — no live
  network in CI).
- Added `promo.json` per `docs/PROMO-MANIFEST.md`.

### 0.0.1 — 2026-09-12

- Scaffolded via `actor-scaffolder` from `docs/specs/trustpilot-reviews-scraper/spec.md`
  and `design.md`. `.actor/actor.json`, `input_schema.json`,
  `dataset_schema.json`, `output_schema.json`, `pay_per_event.json`,
  `Dockerfile`, `pyproject.toml`, `src/models.py` (real `ActorInput` /
  `ResultRow`), and stub modules for `challenge.py` / `browser.py` /
  `scraper.py` / `parser.py`.
- `src/main.py` is a placeholder that validates input, charges
  `actor-start` once, and pushes a single `{"placeholder": true, ...}`
  dataset row — not the real crawl. `crawlee-developer` implements the
  Camoufox challenge-solve + curl-cffi crawl loop next.
- `.actor/icon.svg` is intentionally not part of this commit —
  `actor-icon-designer` owns it exclusively.
