ATS Job Board Scraper — Workday, Greenhouse, Lever, Ashby avatar

ATS Job Board Scraper — Workday, Greenhouse, Lever, Ashby

Pricing

$1.50 / 1,000 job postings

Go to Apify Store
ATS Job Board Scraper — Workday, Greenhouse, Lever, Ashby

ATS Job Board Scraper — Workday, Greenhouse, Lever, Ashby

Pricing

$1.50 / 1,000 job postings

Rating

0.0

(0)

Developer

Mike

Mike

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

One actor, four ATS systems, one clean schema. Feed it a list of companies (names or board URLs) and get every open job posting from Workday, Greenhouse, Lever and Ashby as normalized records — or run it in delta mode and get only what changed since the last run: the hiring signal itself.

Why this one

  • Workday is first-class, not an afterthought. Most job scrapers stop at Greenhouse/Lever because they have friendly JSON APIs. Workday hosts the careers sites of most of the Fortune 500, and this actor speaks its native wday/cxs JSON protocol directly: automatic tenant/shard discovery from a bare company name (nvidianvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite), full pagination past the 20-per-page cap, and relative-date normalization.
  • Delta mode = hiring signals. The actor persists a fingerprint of every run in a key-value store. The next delta run emits only change: "new" and change: "removed" postings. Schedule it daily against your prospect list and you have a live feed of who just started hiring for what — and which roles quietly disappeared.
  • One schema across all four sources. No per-ATS parsing on your side, ever.

Input (all of this is optional except companies)

{
"companies": [
"stripe",
"https://jobs.ashbyhq.com/openai",
"https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite",
"lever:palantir",
"workday:acme.wd1/AcmeCareers"
],
"sources": ["greenhouse", "lever", "ashby", "workday"],
"keywords": ["engineer", "data"],
"locations": ["Remote", "New York"],
"remoteOnly": false,
"mode": "delta"
}

Plain names are auto-discovered on every enabled source. Companies that can't be found are reported in the log and skipped gracefully — never a crashed run.

Output sample

{
"company": "nvidia",
"source": "workday",
"job_id": "JR2018037",
"title": "Distinguished Engineer, Storage – AI Cloud",
"department": null,
"location": "US, CA, Santa Clara",
"remote": null,
"employment_type": null,
"posted_at": "2026-08-03",
"posted_raw": "Posted Today",
"updated_at": null,
"url": "https://nvidia.wd5.myworkdayjobs.com/en-US/NVIDIAExternalCareerSite/job/US-CA-Santa-Clara/Distinguished-Engineer--Storage---AI-Cloud_JR2018037",
"board_url": "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite",
"change": "new"
}

Fields not exposed by a given ATS (e.g. Workday's list API has no department) are null, never missing — the schema is stable.

Use cases

  • Recruiting / sourcing intel — watch competitors' boards; a burst of "new" senior postings is a roadmap leak.
  • Sales signals — a company opening its first "Head of Data" or 10 sales roles is a buying trigger. Pipe delta output straight into your CRM.
  • Job aggregators — normalized multi-ATS ingestion without maintaining four parsers.
  • Market research — remote-work share, department mix, posting velocity across a portfolio.

Delta mode details

State lives in the named key-value store ats-jobs-workday-state under stateKey (default default). Use a different stateKey per schedule/watchlist so they don't cross-contaminate. The first delta run seeds the baseline and emits everything as new. Keep the company list stable within one stateKey — postings of a company you removed from the input will show up once as removed.

Using from Claude / MCP

Once published, call it through the Apify MCP server (https://mcp.apify.com):

{
"tool": "your-username/ats-jobs-workday",
"input": {
"companies": ["stripe", "figma"],
"mode": "delta",
"keywords": ["machine learning"]
}
}

Ask your agent: "Which of my target accounts started hiring ML engineers this week?" — that's one delta run.

Pricing

Pay-per-result: $1.50 per 1,000 job postings. A daily delta watch on 50 companies typically emits a few dozen records per day — pennies. A full snapshot of 50 large boards (~25k jobs) is about $37/run... which is why delta mode exists.

Fair use & data notes

The actor only reads public, unauthenticated JSON endpoints that the career sites themselves use, with per-source rate limiting (≤ ~2 requests/second/source) and exponential backoff. Job postings are public commercial data; no candidate or personal data is touched.