Speak at Bengaluru Systems meet-up

Call for talks & demos for monthly meet-ups

Prasanth Velithoti

@prasa

What 2,704 public ATS job boards actually expose, and what breaks when you crawl them

Submitted Aug 6, 2026

Greenhouse and Lever both publish open job board APIs. No key, no account, no OAuth. On 1 August 2026 I pulled every board I could resolve: 101,432 open postings across 2,704 companies.

The crawl was the easy part. The interesting problems were downstream.

Greenhouse’s job object has no structured pay field at all. Not null, not absent for some employers. The field does not exist, across all 49,722 postings. Lever has salaryRange as {min, max, currency, interval} and 15,060 of 51,710 postings populate it. So one vendor gives you a typed column and the other gives you nothing, and any schema spanning both has to model “the concept is unrepresentable here” rather than “this value is missing”. Those are different things and most warehouse schemas get it wrong.

Second problem: 37.4% of Greenhouse postings do state pay, in prose, inside the description HTML. So the structured signal and the true signal disagree by design. Anyone joining these two sources without noticing will report that Greenhouse employers hide pay. They do not. Their software has nowhere to put it.

Third: posting age. Median time open is 28 days, but 13.4% (13,636 postings) have been live over a year. Snapshot once and you cannot tell a filled role from an abandoned requisition. Daily snapshots plus a disappearance signal are the only way, and that changes your storage model.

What I will cover: resolving board tokens at scale, rate limits and what actually 429s, schema design across two vendors that disagree about whether a field exists, the prose versus structured reconciliation, and the daily snapshot design for detecting removal.

The aggregate dataset is published CC BY 4.0 with a DOI, so everything in the talk is checkable: https://doi.org/10.5281/zenodo.21754196

Write-up of the salary finding: https://lastroundai.com/blog/greenhouse-lever-job-board-api-salary

Session type: talk, 25 minutes.

Speaker: Prasanth Velithoti, Bengaluru. I work on LastRound AI, where the job index behind this talk runs in production.

Comments

{{ gettext('Login to leave a comment') }}

{{ gettext('Post a comment…') }}
{{ gettext('New comment') }}
{{ formTitle }}

{{ errorMsg }}

{{ gettext('No comments posted yet') }}

Hosted by

Bengaluru Systems Meetup