# Changelog of Idealist Search Scraper (`jobsapi/idealist-jobs-search-scraper`) Actor

- **URL**: https://apify.com/jobsapi/idealist-jobs-search-scraper/changelog.md
- **Full Actor documentation**: https://apify.com/jobsapi/idealist-jobs-search-scraper.md

## Changelog

All notable changes to the Idealist Search Scraper are documented here.

### Unreleased

- Separated Apify platform `status` (`SUCCEEDED` or `FAILED`) from the data `resultStatus` in `OUTPUT` and `RUN_HEALTH`.
- Kept access barriers fail-closed with staged-row discard, classified uncertain browser/transport errors as deferred, and preserved successfully stored job rows as limited success after later non-block failures.
- Switched to sequential per-record dataset writes, counted only resolved writes, and routed fatal zero-row outcomes through `Actor.fail()`; diagnostics and receipts remain KVS-only.
- Added offline lifecycle regression tests and legacy-aware read-only dataset-summary validation without rewriting preserved local stores.
- Restricted `NO_DATA` to explicit empty-result evidence on every requested official search; ambiguous empty pages and parse-only failures now defer.
- Bound `SKIPPED` classification to confirmed official-origin responses, gated Dataset writes to complete source-backed job records, and aligned the schemas and validator with those rules.

### 1.1.0

- Added bounded search-page and detail-page budgets.
- Added official Idealist URL validation, duplicate protection, and access-boundary diagnostics.
- Added robust JobPosting JSON-LD graph extraction and capped source payloads.
- Added OUTPUT and RUN_HEALTH summaries, parser tests, dataset validation, QA inputs, and strict Actor schemas.
- Switched to deterministic npm ci and Playwright 1.55.1.

### 1.0.0 - 2026-07-13

- Initial PlaywrightCrawler-based Idealist job scraper.
