How it works
There is no scraper and no headless browser in this product. All three supported platforms publish a documented public JSON job-board API and we read those, keylessly, with an identifying user agent. The hard part is not the reading — it is working out which board belongs to which company, and being straight with you when we cannot.
We fetch the company's own careers pages and look for a board link in the markup. About half of companies resolve here — they linked it themselves, so it is the highest-confidence signal we can get.
/careers · /jobs · /company/careers · /about/careers · /careers/open-rolesWhen there is no link, we guess the board name from the domain label — airtable.com is airtable on Greenhouse, plaid.com is plaid on Ashby. A guess is only ever a candidate: it is not believed until a platform answers 200 with real roles.
airtable.com → airtable · Airtable · airtable (three platforms, all probed)Never the first one that answers. Airtable and Mercury both return 200 on Greenhouse and Ashby; their Ashby boards are empty shells. The board with the most open roles wins, and every candidate we ruled out comes back with the result.
greenhouse 200 · 55 ashby 200 · 0 lever 404Three applicant-tracking systems that agree on almost nothing become one role object. Function is classified from the title so it means the same thing across companies; the platform's own team label is kept verbatim beside it.
title · team · function · seniority · location · remote · postedAt · urlEvery scan stores a reading of that board keyed by the platform's own job ids. The next scan of the same company returns what opened, what closed, the net change, and any function that appeared for the first time.
opened[] · closed[] · netChange · newFunctions[]Discovery, measured
Some companies run their hiring somewhere we cannot reach without a key or a per-tenant integration. For those the answer is board_not_found, you are not charged, and it is never dressed up as a zero.
One domain, three probes, fired at the same time.
The second reading
The diff key is the platform’s own job id, so a retitled req is not mistaken for a new one and two roles with the same title do not collapse into one.
The same board, read twice.
The three we read
A board that does not exist has to say so unambiguously. That is the entire selection criterion, because without it every empty result is a coin flip between “not on this platform” and “not hiring”.
boards-api.greenhouse.io/v1/boards/<token>/departmentsMiss: 404 with {"status":404,"error":"Job not found"}
api.lever.co/v0/postings/<token>?mode=jsonMiss: 404 with {"ok":false,"error":"Document not found"}
api.ashbyhq.com/posting-api/job-board/<token>Miss: 404 with the bare body `Not Found`
6 credits a scan, 1 credit per role description, and nothing at all when we come up empty.