I measured what 12 ATS APIs actually return, across 1.5M job postings
BambooHR's public job endpoint has an isRemote field. Across 50,616 postings from 9,711 live BambooHR boards, not one had it set. Not "most were blank". Not one. If you write a client that trusts that field, you will conclude That is the kind of thing you only find by measuring, so I measured all of

BambooHR's public job endpoint has an isRemote field. Across 50,616 postings from 9,711 live BambooHR boards, not one had it set. Not "most were blank". Not one. If you write a client that trusts that field, you will conclude That is the kind of thing you only find by measuring, so I measured all of it. Twelve applicant tracking systems publish an open JSON endpoint that their customers' careers pages curl -s 'https://boards-api.greenhouse.io/v1/boards/stripe/jobs?content=true' curl -s 'https://api.lever.co/v0/postings/spotify?mode=json' curl -s 'https://api.ashbyhq.com/posting-api/job-board/notion?includeCompensation=true' Plenty of articles list these endpoints. What none of them tell you is which fields actually come , which is the only thing that matters once you start building. "Supports salary" So I read every live board I could find on each platform โ between 17,000 and 179,000 postings per 1,551,977 in total โ and counted. Platform Posting date Description Pay Marked remote Postings measured Workday 78.2% no no no 41,683 SmartRecruiters yes no no 7.7% 86,464 Greenhouse yes yes no no 179,303 Workable yes yes no 36.3% 68,849 BambooHR no no no no 50,616 Lever yes 94.7% no 4.8% 46,005 Breezy HR yes no 45.7% 15.7% 47,085 Personio no no no 8.8% 41,608 Ashby yes yes 38.9% 54.2% 32,407 Recruitee yes yes 26.9% 9.9% 21,621 Rippling no no no 17.4% 18,701 Pinpoint no yes 42.5% 8.8% 17,302 yes means 99.5% or more. no means the endpoint carries no such field at all โ not that Only four of the twelve publish compensation, and none fills it most of the time. But the split Numbers you can compute on: // Pinpoint โ separate fields { "compensation_minimum": 45000, "compensation_maximum": 55000, "compensation_currency": "GBP", "compensation_frequency": "annual" } // Recruitee โ same idea { "salary": { "min": "4500", "max": "6500", "currency": "EUR", "period": "month" } } Sentences you cannot: // Breezy โ highest fill rate of all four, at 45.7% { "salary": "$28 โ $100 / hour" } // Ashby { "compensationTierSummary": "$211.4K โ $290.6K โข Offers Equity" } Parsing the second group means guessing at currency, period, and whether equity is folded into the Two traps in that group: Recruitee keeps the salary object with zeros when the employer skipped the field. A naive reader ships "0 USD hour" as a pay range. Treat min <= 0 && max <= 0 as absent. European employers quote monthly. 4500โ6500 EUR month is not an annual figure, and multiplying by twelve to normalise is a guess about holiday allowance and 13th-month pay. Four platforms โ Personio, Rippling, Pinpoint and BambooHR โ publish no posting date at all. { "postedOn": "Posted 30+ Days Ago" } "Posted Today" and "Posted 5 Days Ago" convert to a timestamp. "30+" does not, and inventing This is a design decision, not a detail. If you build a "posted in the last 7 days" filter, you Five platforms let the employer state the work arrangement. The other seven do not, so the only "Anywhere" and misfires on "Remote Support Engineer, London office". The spread between platforms says more about who uses them than about the job market: Ashby: 54.2% marked remote. Remote-friendly tech companies. Workable: 36.3%. Lever: 4.8% โ and that is inferred, not stated. And then BambooHR, from the top of this post: the field exists, and across 50,616 postings nobody SmartRecruiters caps at 100 rows whatever limit you pass. Ask for 500, get 100. Page with offset and take the count from totalFound, not from the length of the array you got back. Breezy answers 403, not 404, for a subdomain with no board on it. Treat that as rate Workday's total saturates at 2000, and the API keeps serving rows past the end of the list. facets counts are the real total โ they match total exactly on boards that have not saturated. A 429 is not a dead board. I once discarded 1,644 Workable boards as dead. The only problem was Calling these endpoints is easy. Knowing that Notion is on Ashby and Figma is on Greenhouse, and The practical source is the Wayback CDX index, with one non-obvious catch that cost me two separate CDX sorts by urlkey. For recruitee.com that means com,recruitee)/โฆ โ the platform's own com,recruitee,acme)/ sit deep in a 92-page index. Read only the front and you get zero The mirror-image mistake is trusting a single source. Common Crawl does not crawl jobs.lever.co Check whether a coverage gap is your crawler's blind spot before concluding the segment is One methodological note, because I got this wrong three times Every number above is the full population for that platform โ every live board in the registry, That is not pedantry. Board sizes vary by orders of magnitude, so any sample is dominated by Sample Result 1 board 94% 40 boards 43.7% All 1,126 boards (21,621 postings) 26.9% I published a page with a sampled number before catching this, and had to correct it. Ashby's 54.2% across all 1,588. If you are going to These are listing endpoints. Several platforms expose more on a per-posting detail endpoint โ BambooHR's date, description and compensation all live there โ at the cost of one request per row. Coverage is what I have found, not every company on earth. A miss means the board is not in my registry, not that it does not exist. Boards close. Measured decay is about 0.6% every day and a half, so these counts drift. Measured 2026-08-24. Per-platform pages with the request shape, the measured fields and the traps for each one: Greenhouse ยท Lever ยท Ashby ยท Workday ยท SmartRecruiters ยท Workable ยท Breezy ยท Personio ยท Recruitee ยท BambooHR ยท Pinpoint ยท Rippling The comparison table lives at Which ATS API gives you what, GitHub. If you would rather not maintain twelve clients and a board registry, I run the same engine as hosted Actors โ but the endpoints above are open, and everything in this post is reproducible without them.
Key Takeaways
- โขBambooHR's public job endpoint has an isRemote field. Across 50,616 postings from 9,711 live BambooHR boards, not one had it set. Not "most were blank"
- โขThis story was reported by Dev.to, covering developments in the dev space.
- โขAI advancements continue to reshape industries โ read the full article on Dev.to for complete coverage.
๐ Continue reading the full article:
Read Full Article on Dev.to โShare this article



