Compared · Four ATS systems
Greenhouse vs Lever vs Workday vs Ashby: what job data you can actually get
Three of the four big applicant tracking systems hand you clean JSON. The fourth hosts most of the Fortune 500 and is the reason most job scrapers quietly leave it out.
The short version
| ATS | Data access | Find a company from its name | Pagination | Dates | Difficulty |
|---|---|---|---|---|---|
| Greenhouse | Public board JSON | Usually the slugified name | Whole board in one call | ISO timestamps | Easy |
| Lever | Public postings JSON | Usually the slugified name | Whole board in one call | Epoch millis | Easy |
| Ashby | Public board JSON | Usually the slugified name | Whole board in one call | ISO timestamps | Easy |
| Workday | Native wday/cxs JSON |
Needs tenant + site discovery | 20 per page, must page through | “Posted 3 days ago” — relative | Hard |
Why Workday is the one that matters — and the one most tools skip
Greenhouse, Lever and Ashby all expose a company’s whole board as clean JSON, so almost every job scraper supports them. That is also why almost every job scraper stops there.
Workday is where most of the Fortune 500 posts. Each employer runs its own tenant at a
URL like nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite, which means
you cannot go from “nvidia” to a board without discovering both the tenant
(wd5) and the site name. Results come 20 at a time, and dates arrive as
“Posted 3 days ago” rather than an actual date. Tools that render the
JavaScript UI instead of calling the protocol break whenever Workday restyles.
The ATS Job Board Scraper speaks
wday/cxs directly, discovers the tenant from a bare company name, pages past
the 20-per-call cap, and turns relative dates back into real ones.
The part nobody mentions: four schemas is the actual cost
Any one of these is a morning’s work. The expense is that a real prospect list is never single-ATS: a hundred companies will span all four, each with different field names, different location formats, different ideas of what a “department” is. You end up maintaining four parsers and a reconciliation layer.
One normalized record, whatever the source:
{
"company": "nvidia",
"source": "workday",
"title": "Senior Systems Software Engineer",
"department": "Engineering",
"location": "US, CA, Santa Clara",
"remote": false,
"employment_type": "Full time",
"posted_at": "2026-07-28",
"change": "new",
"url": "https://nvidia.wd5.myworkdayjobs.com/..."
}Which one should you point it at?
Point it at your list, not at an ATS. Bare company names are auto-discovered across
every enabled source, and anything ambiguous can be pinned with a prefix
(lever:palantir) or a full board URL. Companies that cannot be found are
logged and skipped rather than crashing the run.
Per-source detail lives in the individual guides: Workday, Greenhouse, Lever and Ashby.
The diff is worth more than the dump
A full board snapshot is homework. What a sales, recruiting or investment team actually
buys is the change: this company opened four data-engineering roles yesterday, or
that search quietly closed. Delta mode fingerprints each run and returns only
change: "new" and change: "removed" rows — so a daily
watch on a 100-company list bills for a few dozen records instead of thousands.
Questions
Frequently asked
Which ATS has the most companies?
By headcount covered, Workday — it hosts most of the Fortune 500. By number of companies, Greenhouse and Lever dominate mid-market and tech; Ashby skews to well-funded startups. A realistic prospect list spans all four, which is the whole argument for one normalized schema.
Do I need API keys for any of them?
No. All four expose public job-board data, and this actor reads only that. You need an Apify account to run it, nothing else.
What usually breaks a job scraper?
Three things: Workday tenant discovery, pagination past the first page, and relative date strings. Tools that render the careers UI instead of calling the underlying protocol also break on every redesign.
Can one run cover all four systems?
Yes — that is the design. Pass a mixed list of company names and the run auto-discovers each on every enabled source, returning one schema with a `source` column telling you where each row came from.
What does it cost?
$0.0015 per posting returned. A 2,000-posting full sweep is $3; a daily delta run emitting 40 changes is $0.06.
ATS Job Board Scraper
A full sweep returning 1,000 postings costs $1.50; a daily delta run emitting 40 changes costs $0.06.