# Changelog of SiteVerdict Job Postings API: Greenhouse, Lever, Ashby +3 (`siteverdict/siteverdict-job-postings`) Actor

- **URL**: https://apify.com/siteverdict/siteverdict-job-postings/changelog.md
- **Full Actor documentation**: https://apify.com/siteverdict/siteverdict-job-postings.md

## Changelog

### 1.0.6 (2026-10-16) — Private-network (SSRF) protection

- `discoverDomains` (company websites and their careers pages), robots.txt and every ATS request now refuse private, loopback, link-local, CGNAT, multicast, reserved and cloud-metadata destinations (169.254.169.254, metadata.google.internal, fd00:ec2::254 …), internal names (localhost, \*.local, \*.internal, single-label names) and every IP encoding (decimal / octal / hex / IPv4-mapped IPv6 / NAT64 / 6to4). Every redirect hop is re-checked; DNS answers are checked at connect time and the connection is made to exactly the checked address (rebinding-safe).
- A refused domain gets a discovery note "refused: private-network protection; not charged. …" and no board; nothing is contacted or charged. No change to inputs, outputs or pricing.

### Memory default (15 Oct 2026)

- 15 Oct 2026 (build after this entry): default run memory is now 1024 MB via `defaultMemoryMbytes` (the old defaultRunOptions 1024 MB was ignored so runs used 4096 MB; peak 86-109 MB). Measured on the example input: same output, see the public-15 remediation log. You can still choose more memory per run. No change to inputs, outputs or pricing.

### 1.0.0 (2026-10-11)

First release.

- **Six ATS platforms** through their official public job-board APIs: Greenhouse (Job Board API), Lever (Postings API, US and EU), Ashby (Job Posting API with compensation), Workable (jobs widget API), SmartRecruiters (Posting API with per-job details) and Recruitee (Careers Site API).
- **Input:** ATS board URLs, `ats:token` identifiers, company careers-page URLs (embedded boards detected from links, iframes and embed scripts) and company domains (discovery that respects `robots.txt`, with an optional API slug probe that checks the company name).
- **One normalised schema:** parsed locations (city / region / country / ISO code), workplace type and remote flag, normalised employment type, salary (structured first, otherwise parsed from text and flagged `parsed_text`), posted/updated dates, job and apply URLs, requisition ID, HTML and/or text description.
- **Filters:** keywords (title or title + description, wildcards), exclude keywords, departments, locations, workplace types, employment types, posted within N days, salary only, per-company and total caps.
- **Monitoring mode:** NEW / CHANGED (with `changed_fields`) / UNCHANGED / CLOSED against a named key-value store. Partial runs never produce false closures. A filter change starts a fresh baseline.
- **Reliability:** per-board isolation, retries with exponential backoff and `Retry-After`, per-host throttling, timeouts, a per-board `SUMMARY` record.
- **Pay per event:** `job-posting` and `board-checked`. Nothing is charged for errors. Max total charge is respected, and a board is started only if at least one job from it is affordable.
