ATS Job Board Scraper — Workday, Greenhouse, Lever, Ashby
Pricing
$1.50 / 1,000 job postings
ATS Job Board Scraper — Workday, Greenhouse, Lever, Ashby
Job postings from Greenhouse, Lever, Ashby, and Workday boards in one normalized schema. Delta mode surfaces new and removed postings as hiring signals.
Pricing
$1.50 / 1,000 job postings
Rating
0.0
(0)
Developer
Public Signal Data
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
6 days ago
Last modified
Categories
Share
Docs & recipes: pricing math, use-case playbooks and copy-paste API/MCP snippets · practical guide
Scrape job postings from Workday, Greenhouse, Lever and Ashby — one actor, four ATS systems, one clean schema. Feed it company names or board URLs; every open role comes back as a normalized record (illustrative example):
{"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"}
Or run delta mode and turn job boards into hiring signals: only what changed since the last run — which companies just opened new roles (and in what department), and which postings quietly disappeared. That diff is the signal recruiters, sales teams and investors actually pay for.
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/cxsJSON protocol directly: automatic tenant/shard discovery from a bare company name (nvidia→nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite), full pagination past the 20-per-page cap, and relative-date normalization ("Posted Today" → ISO date). - 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"andchange: "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. Companies that can't be found are reported in the log and skipped gracefully — never a crashed run.
Input (only companies is required)
{"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"}
| Field | Default | Meaning |
|---|---|---|
companies | demo list (Stripe, OpenAI, NVIDIA) | Company name (auto-discovered on every enabled source), full board URL, or explicit source:token pair |
sources | all four | Which ATS systems to query/probe |
keywords | [] (all) | Keep postings whose title contains any of these (case-insensitive) |
locations | [] (all) | Keep postings whose location contains any of these strings |
remoteOnly | false | Keep only remote-flagged postings |
mode | snapshot | snapshot = all current postings; delta = only new/removed since last run |
includeDescription | false | Attach full job description HTML as description_html (large) |
maxJobsPerCompany | 5000 | Safety cap per company per source |
stateKey | default | Independent delta watchlist name (one per schedule) |
Output fields
| Field | Type | Meaning |
|---|---|---|
company | string | Company/board identity as resolved |
source | string | workday | greenhouse | lever | ashby |
job_id | string | ATS-native posting ID |
title | string | Job title |
department | string | null | Department/team (not exposed by Workday's list API) |
location | string | Location as published |
remote | boolean | null | Remote flag where the ATS provides one |
employment_type | string | null | Full-time/contract/etc. where provided |
posted_at / updated_at | date | null | Normalized dates; posted_raw keeps Workday's original relative text |
url | url | Direct apply link |
board_url | url | The careers board scraped |
change | string | Delta mode: new | removed (snapshot rows omit it) |
description_html | string | Only when includeDescription: true |
Fields not exposed by a given ATS are null, never missing — the schema is stable.
Use cases
Recruiting and sourcing intelligence
Watch competitors' boards; a burst of "new" senior postings is a roadmap leak. A scheduled delta run per watchlist is a standing competitor-hiring monitor.
Sales signals from job postings
A company opening its first "Head of Data" or 10 sales roles at once is a buying trigger. Pipe delta output straight into your CRM and route the account to the right rep the day the posting appears.
Job aggregators and job boards
Normalized multi-ATS job postings ingestion — Workday, Greenhouse, Lever and Ashby in one stable schema — without building or maintaining four parsers.
Labor-market research
Remote-work share, department mix, posting velocity across a portfolio of companies, tracked over time from primary sources.
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 ($0.0015/record). Worked math:
- Daily delta watch on 50 companies: typically a few dozen records/day — pennies.
- Full snapshot of 50 large boards (~25,000 jobs): $37.50/run … which is why delta mode exists.
Honest limits
- Field coverage varies by ATS: Workday's list API exposes no department/remote/employment-type — those are honestly
null, not guessed. - Auto-discovery probes common token patterns; unusual board tokens may need the explicit URL or
source:tokenform (misses are logged and skipped, never fatal). - Delta mode diffs against this actor's own previous run on the same
stateKey; the first run is a baseline.
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.