# Changelog of Lever Jobs Scraper — Company Job Boards (`adderleydata/lever-jobs-scraper`) Actor

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

## Changelog

### 0.1 — first public version

- Any number of Lever job boards per run, by site name or by any jobs.lever.co, jobs.eu.lever.co or api.lever.co link. One request per board returns the whole board, every posting's text included.
- Boards on Lever's EU instance are read from Lever's EU API when given as a jobs.eu.lever.co link. A bare site name is read from the global instance: the same name can be a different board on each. Site names are kept exactly as given, because Lever's are case-sensitive.
- Output in the Adderley Data `job.v1` schema: department as category and team as subcategory; every location the posting lists, the primary first, with city and region from the primary and Lever's own ISO country code; employment type from Lever's commitment field and work arrangement from its workplace type; the date the posting was created, in UTC.
- Pay from Lever's structured salary range only: minimum, maximum, currency and period. `salary.raw` holds the sentence of the company's pay note that states the range, or the range as Lever's own page prints it (`$132,000 - $165,000 a year`) when the note does not state it. No range, no salary.
- Filters on title keywords; location, country or workplace type; department or team; and days since the posting was created.
- Incremental mode: `changeType` of NEW, UPDATED, REAPPEARED or EXPIRED; unchanged postings skipped and not charged. Lever publishes no last-modified time, so a change is found by comparing the posting's fields and a hash of its text. A formatting change alone is not an update.
- Optional full descriptions in the order Lever's page shows them — description, lists, pay note, closing section — from the same request as the listing, with email addresses and phone numbers redacted by default.
- A site name Lever does not know fails that board's request with a message saying so. The other boards in the run are kept, and nothing is declared expired.
- The run's output is declared for Console's Output tab, the Run API and AI agents: postings in the default dataset, the run summary in the default key-value store.
- No recruiter names, emails or phone numbers in any field: Lever's public feed has none, and `job.v1` has nowhere to put one.
- Where Lever's salary range is empty and the posting's text states a range, the range is read from that sentence (24 Sep 2026).
- 24 Sep 2026: `description.html` keeps each link's words and drops its address, and drops images; personal profile addresses (linkedin.com/in/…) in the text are redacted with the other contact details. An address written as "ending in @example.com" is no longer mistaken for an email address.
- 24 Sep 2026: a board that does not exist is asked for once, not five times, and is never counted as a block. A run in which every board is missing ends with an empty dataset and a message naming them. "Poland - Remote" and other labels that put the country before a dash now give the country.
