Public Signal Data / Guides / Greenhouse vs Lever vs Workday vs Ashby: what job data you can actually get

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

ATSData accessFind a company from its name PaginationDatesDifficulty
GreenhousePublic board JSONUsually the slugified name Whole board in one callISO timestampsEasy
LeverPublic postings JSONUsually the slugified name Whole board in one callEpoch millisEasy
AshbyPublic board JSONUsually the slugified name Whole board in one callISO timestampsEasy
WorkdayNative wday/cxs JSON Needs tenant + site discovery20 per page, must page through “Posted 3 days ago” — relativeHard

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:

one schema, four ATS systems
{
  "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.

Actor details → Run on Apify ↗