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

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

## Changelog

### 0.1 — first version, 25 Sep 2026

- Any number of BambooHR careers sites per run, by company name (`acme`) or by any `acme.bamboohr.com` link: the careers site, a job opening, an older `/jobs/` link or the job list a company embeds in its own website. Names are lower-cased, because host names are not case-sensitive.
- Each board's list of openings is read in one request, from the same public JSON BambooHR's own careers pages read. Every opening that will be saved then gets one request for its own record: its posted date, its pay, the office's postcode and country, and its text.
- Output in the Adderley Data `job.v1` schema: the office as the company entered it (`Melbourne, Victoria`), or `Remote` with the place BambooHR records for a remote opening (`Remote (Canada)`); countries as ISO codes, from the country BambooHR names or from a US state, Canadian province or Australian state, never from a city; on-site, hybrid or remote from BambooHR's own location setting; the department as category; employment types from the words of the company's employment status; the posted date at midnight UTC. The company is named by its board name: BambooHR's job records do not carry a display name.
- Pay from BambooHR's pay field, which is free text: amounts, currency and period are read from the company's words and kept beside them in `salary.raw`; a `$` is the dollar of the opening's country. A reading that contradicts itself — a range wider than tenfold, an hourly rate in the thousands, a yearly salary under a thousand, or one figure read from words that state two — keeps the words and drops the numbers. Where the field holds no amount and the opening's text states a range, that range is read from the text.
- Filters on title keywords; city, state or province, country or location type; and department. Filters are applied to the board's list, so an opening they leave out costs no request.
- Incremental mode: `changeType` of NEW, UPDATED, REAPPEARED or EXPIRED; unchanged openings skipped, not charged and not requested. A change is a new title, department, employment status, place or location type on the board's list; an edit only to an opening's text, pay or date is not reported.
- Optional full descriptions from the opening's record, with email addresses and phone numbers redacted by default and link addresses and images dropped from the HTML.
- A name BambooHR does not know (it redirects to its home page) fails that board's request once, with a message saying so; an expired account says it has expired. Neither is counted as a block, 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: openings in the default dataset, the run summary in the default key-value store.
- No recruiter names, emails or phone numbers in any field. The application form BambooHR attaches to every opening is never read, and `job.v1` has nowhere to put a person.
- 26 Sep 2026: a board that does not exist is no longer logged as a failed request with an error trace. It is named once in the log and in the run summary, as before, and is no longer counted under `http.failed`. The run summary also counts any HTTP 429 (too many requests) answers, under `http.tooManyRequests`.
- 26 Sep 2026: the prefilled example board is now `estella`, one company's public careers site with 35 openings, in place of BambooHR's demo site, which held one test opening. The prefill saves 20 openings.
