# Changelog of Company Jobs Search: Live Career Site Jobs API (`enisbodlli/company-jobs-search`) Actor

- **URL**: https://apify.com/enisbodlli/company-jobs-search/changelog.md
- **Full Actor documentation**: https://apify.com/enisbodlli/company-jobs-search.md

## Changelog

### 0.0 (2026-10-07), not yet pushed

First build for the Store. Built on 2026-10-04 and brought to the shared posting format on 2026-10-07.

- Searches open jobs by job title across the built-in list of 1,302 company job boards (723 on
  Greenhouse, 200 on Lever, 374 on Ashby, 5 Workday careers sites; checked 2026-10-04), read live
  from each board during the run. Extra companies can be added by job board address or board name.
- Filters: title keywords, excluded title keywords, locations, excluded locations, remote only,
  workplace types, employment types, seniority, departments, posted within days, has salary,
  minimum yearly salary, companies, excluded companies, job board systems.
- New on 2026-10-07: `employmentTypes`, `workplaceTypes`, `excludeLocations` and `departments`.
- `departments` on Greenhouse: the job list Greenhouse serves without descriptions names no
  department (and no offices), so with the filter set each Greenhouse company that has a job
  passing the other filters is asked for its departments in one more request. Without the filter a
  Greenhouse row has `department` only when *Include job description* is on.
- Output: 27 fields per job, every field on every row. New on 2026-10-07: `employmentTypeText` and
  `salarySource`; `employmentType` and `salaryInterval` are in one vocabulary
  (`full_time`, `part_time`, `contract`, `temporary`, `internship`; `year`, `month`, `week`, `day`,
  `hour`); pay is also read from the pay ranges companies publish on Greenhouse and from a pay
  range written in the description.
- `seniority` uses the vocabulary of ATS Job Postings: `entry` replaces `junior`, and a title such
  as "Product Manager" states no rank.
- With *Include job description* on, a board is listed without descriptions and the description is
  fetched only for the jobs that are saved: one more request for a small board (up to 300 postings
  on Greenhouse, under 100 on Lever, any Ashby board), one request per saved job for a larger one.
  Memory then follows the jobs that are saved, not the size of the boards that are searched.
- The salary filters decide on the pay a job system states in its own fields and, on Lever, Ashby
  and Workday, on a pay range written in the description. On Greenhouse a figure that appears only
  in the description is not used by the filters.
- Requests: at most 4 a second to one job board host and 1 a second to Lever, whose `robots.txt`
  asks for a crawl delay of one second. Three refusals in a row end the requests to a host for the
  run. A pass over every company took 271 seconds when measured on 2026-10-07.
- Charging: one `apify-default-dataset-item` event per saved job. A restarted run asks the dataset
  which jobs are stored and saves none of them twice.
- A `RUN_SUMMARY` record says how many companies were searched, which were skipped or searched only
  in part and why, and why the run stopped.
- Changed at verification on 2026-10-08, before the first push:
  - With a maximum charge set, single postings are read only for as many jobs as that charge still
    pays for, and a company that answers after the charge is spent is left as not reached. Before,
    a run limited to 3 jobs read 400 postings of one large board for their descriptions.
  - A run that fails with nothing saved no longer says "No job matched ... try a shorter title". It
    says "Saved 0 jobs, and the search is not complete", followed by the first problem.
  - A company given both by name and by its job board address is searched once, also when the
    built-in list does not hold it.
  - A posting whose fields other than the description exceed 1 MB is left out and counted. Before,
    one such posting made the dataset refuse the whole push and ended the run.
