# Changelog of Scraper for ZipRecruiter — Jobs, Pay & Benefits (`logiover/ziprecruiter-jobs-scraper`) Actor

- **URL**: https://apify.com/logiover/ziprecruiter-jobs-scraper/changelog.md
- **Full Actor documentation**: https://apify.com/logiover/ziprecruiter-jobs-scraper.md

## Changelog

### 2026-10-15

- A run that reaches its maximum cost per run now stops cleanly with its results saved and a status message, instead of ending as aborted.
- A proxy group your account cannot use no longer stops the run at start-up; it falls back to the default Apify Proxy.
- Memory is managed within the run's own limit, which removes a rare out-of-memory crash on large pages.

### 2026-10-10 — speed update

Faster: 1,000 jobs in ~80 s instead of ~270 s (measured on the same input).

- 40 result pages in parallel by default (input max 50); every page the row limit needs is queued at the start.
- Hedged requests: a page still unanswered after the median page time gets one duplicate on a fresh proxy session; the first good answer wins and the other is aborted (aborted UNBLOCKER requests are not billed). Small runs duplicate at once and add a third attempt after 6 s; at the end of a run, idle slots duplicate the pages still out.
- Per-attempt timeout 40 s (the unblocking proxy sometimes holds a request without answering).
- One spare page per search, so the run ends as soon as the limit is met instead of waiting for its slowest page.
- Stop immediately when Max jobs is reached; in-flight requests are cancelled.
- Rows are pushed page by page; live status message.
- Fixed a lost-update race in the saved-row counter that let a run exceed Max jobs (measured 1,131 / 1,000).
- SUMMARY gains `hedges`, `hedgeWins`, `firstRowSecs`, `pageSeconds`; a `PERF` record holds the per-attempt timeline.

### 2026-10-10

First release.

- Keyword × location grid with every ZipRecruiter filter that was verified to change results: radius, posted within, employment type, remote only, 1-Click Apply only, minimum salary.
- Parses both page serialisations ZipRecruiter serves at random (readable enums and protobuf-JSON).
- Structured pay: min / max / period / annualised / currency, plus `paySource` and `payIsEstimated`.
- Benefits, workplace highlights, workplace type, county and ZIP, 1-Click Apply flag, posting / refresh / update timestamps.
- Fair per-search share of the row limit; de-duplication by job ID across searches.
- Optional `fetchDetails`: full description, industry, O\*NET occupation, education, closing date, company website, employer rating.
- UNBLOCKER proxy forced by default; refused pages retried on fresh IPs; runs that reach nothing fail with the reason.
- `SUMMARY` record with outcome, request counts and per-search totals.
