Build it yourself, or use ours
Most of this dataset could, in principle, be scraped by anyone. A Greenhouse board returns its whole contents in one unauthenticated request; so does Lever. If you need three named companies' boards and nothing else, go and do that — the Greenhouse pageis the endpoint and the caveats, and you don't need us for it.
This page is about the other 99%: what it costs to turn "I can read one board" into "I have a live, deduplicated, normalised feed of every company's hiring." That gap is the product.
Finding the boards is harder than reading them
There is no global index of which companies run Greenhouse. Board discovery is a continuous problem — new companies adopt an ATS every day, and each one is a board you have to find before you can read it. We track 108,389 company boards and the queue never stops growing. This is the part nobody budgets for, and the part that never ends.
The easy platforms are the minority
Greenhouse and Lever hand you a whole board in one unauthenticated request. Workday, Oracle, iCIMS and SuccessFactors— which together are more than half the dataset — do not. They paginate, they rate-limit, they want a detail request per posting, and some need a real browser. The pitch is not that scraping is impossible; it's that the platforms with the most jobs are exactly the ones you least want to own a scraper for.
Knowing when a job comes down
A posting you scraped last week may already be filled. We reap by board diffing— every re-fetch marks the roles that were there before and aren't now as expired, because the employer taking a job down is the only honest signal. Skip this and your index quietly fills with dead roles you can't distinguish from live ones.
The same job, once
A role posted to Greenhouse and mirrored to LinkedIn is one job, not two. We collapse duplicates across sources into a single row. Doing it yourself is a matching problem across boards that share no ids and format everything differently.
A company, not a string
A scraped posting gives you an employer name. The company joingives you a resolved profile — domain, industry, headcount, HQ — attached inline on all but two postings in the entire dataset. That's the difference between the string "Acme" and a record you can actually filter and segment on.
One schema across 64 sources
Greenhouse salary arrives in cents on a separate endpoint; Ashby ships typed compensation tiers; most boards ship nothing at all. We normalise all of it into one salary object, and do the same for skills, seniority, location and work arrangement across 64 sources. Every source you add yourself is another parser to write, and then to keep working as the platform changes underneath it.
It never stops
Boards change their URL shapes, companies migrate ATS, and dead boards have to be noticed and disabled or they starve the live ones. A scraper isn't a project you finish; it's one you staff. Here, a board that fails five times running disables itselfso the rotation doesn't fill with corpses — one of a hundred small rules that only exist because someone hit the problem first.
At a glance
| Scrape it yourself | HyperJobs | |
|---|---|---|
| Board discovery | Find every board, forever | 108,389 tracked |
| Hard platforms (Workday, iCIMS…) | Paging, proxies, browsers | Done |
| Expiry | Build board-diffing | Reaped every cycle |
| Deduplication | Cross-board matching | One row per job |
| Company data | An employer name string | Resolved firmographics |
| Normalisation | A parser per source | One schema, 64 sources |
| Freshness | Your cron, your problem | New roles within the hour |
| Maintenance | Ongoing headcount | Ours |
Build it if you need a handful of known, easy boards, once. Buy itif you need breadth, freshness, or the platforms that fight back — or if you'd rather your engineers ship your product than maintain someone else's scraper.
Quickstart is a key and a curl. Pricing is what it costs.
Get an API key