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

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

Public Signal Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 days ago

Last modified

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/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 ("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" 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. 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"
}
FieldDefaultMeaning
companiesdemo list (Stripe, OpenAI, NVIDIA)Company name (auto-discovered on every enabled source), full board URL, or explicit source:token pair
sourcesall fourWhich 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
remoteOnlyfalseKeep only remote-flagged postings
modesnapshotsnapshot = all current postings; delta = only new/removed since last run
includeDescriptionfalseAttach full job description HTML as description_html (large)
maxJobsPerCompany5000Safety cap per company per source
stateKeydefaultIndependent delta watchlist name (one per schedule)

Output fields

FieldTypeMeaning
companystringCompany/board identity as resolved
sourcestringworkday | greenhouse | lever | ashby
job_idstringATS-native posting ID
titlestringJob title
departmentstring | nullDepartment/team (not exposed by Workday's list API)
locationstringLocation as published
remoteboolean | nullRemote flag where the ATS provides one
employment_typestring | nullFull-time/contract/etc. where provided
posted_at / updated_atdate | nullNormalized dates; posted_raw keeps Workday's original relative text
urlurlDirect apply link
board_urlurlThe careers board scraped
changestringDelta mode: new | removed (snapshot rows omit it)
description_htmlstringOnly 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:token form (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.