Workday Jobs Scraper & API - Open Roles, Any Company Board avatar

Workday Jobs Scraper & API - Open Roles, Any Company Board

Pricing

from $1.20 / 1,000 jobs

Go to Apify Store
Workday Jobs Scraper & API - Open Roles, Any Company Board

Workday Jobs Scraper & API - Open Roles, Any Company Board

For recruiters, talent intelligence and hiring tracking: every open job on any company's Workday board, from Workday's own public board API, up to 200 boards per run in one row shape you can diff daily. A default run on 2026-09-01 returned 622 job rows across 2 boards. No API key, no proxies.

Pricing

from $1.20 / 1,000 jobs

Rating

0.0

(0)

Developer

NeverEmpty

NeverEmpty

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

2 days ago

Last modified

Share

Workday Jobs Scraper & API - Open Roles, Any Company

For recruiters, sales teams selling into hiring companies, and anyone building a jobs feed: every open role on any company's Workday job board, read straight from Workday's own public board API — one identical row shape for every board, with the title, the job URL and the location as the board writes it.

Measured, not promised. A run on 2026-09-01 with the shipped build and the default input returned 622 job rows across 2 boards (nvidia 500, redhat 122). title, jobUrl and locationRaw came back on 100% of rows from both. Up to 200 boards per run.

Read this before you pick Workday: it carries the least of the five big ATSs. Its board listing returns only the title, the location, a job code and a relative "Posted 3 Days Ago" string — so postedAt, department, employmentType, workplaceType, isRemote, salaryMin and salaryMax were 0% on both boards. A relative phrase is not a date, so postedAt stays null rather than being turned into a guess that looks like a fact. If you need posted dates or departments, Greenhouse, Lever and Ashby publish them.

No HTML scraping, no proxies, no API keys, nothing that breaks when a careers page is redesigned. Export as JSON, CSV or Excel.

Unofficial. This Actor is not affiliated with, endorsed by, or sponsored by Workday. All product names are trademarks of their respective owners.

Don't know a company's board name? ATS Job Board Finder turns a domain into the board name this Actor takes.


It never returns an empty result to mean two different things

Most job-board Actors return an empty dataset when something goes wrong, and an empty dataset when there is genuinely nothing to report. Those are not the same answer, and if you are monitoring hiring activity the difference is the whole point.

Every board you ask for produces at least one row, tagged in the rowType column:

rowTypeokWhat it meansCharged?
jobtrueA real open jobYes
no-open-rolestrueThe board is live and has no open jobs (or none matching your filters)No
board-not-foundfalseNo board with that name exists on WorkdayNo
unavailablefalseWorkday could not be reached, or the entry could not be read as a board; reason says whyNo
budget-reachedfalseThe run hit the Max total charge you set. Names every board that was cut short and every board not fetched because of itNo
partialtrueThe rows are real, but the board has more than one run returns. Says how many of how manyNo

You are charged only for job rows.


What Workday actually publishes - measured, not estimated

Run on 2026-09-01 with the shipped build and the default input: 622 job rows across 2 boards.

nvidia (500)redhat (122)
title, jobUrl, locationRaw100%100%
postedAt0%0%
department, employmentType, workplaceType, isRemote0%0%
salaryMin / salaryMax0%0%

Workday carries the least of the five. Its board listing returns only the title, location, a job code and a relative "Posted 3 Days Ago" string - and a relative phrase is not a date, so postedAt stays null rather than being turned into a guess. That means remoteOnly, departmentContains and postedWithinDays filter out every Workday row - use titleContains and locationContains instead, or remoteHint for the guess. One run returns up to 500 roles per board; if a board has more you get a free partial row saying how many of how many you received, so a truncated run can never look complete.


Input

FieldTypeDefaultWhat it does
boardsarrayworkday:redhat.wd5.myworkdayjobs.com/jobs, workday:nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSiteOne entry per company board, up to 200
titleContainsstring(empty)Keep only jobs whose title contains this text (case-insensitive)
departmentContainsstring(empty)Keep only jobs whose department or team contains this text
locationContainsstring(empty)Matches the primary location and every secondary location
remoteOnlybooleanfalseKeep only jobs Workday itself flags as remote - never a guess
postedWithinDaysinteger0 (off)Keep only jobs first published within N days. Unknown dates are excluded rather than assumed recent
maxJobsPerBoardinteger0 (no limit)Cap of job rows per board, applied after filtering
includeDescriptionbooleanfalseAdd the full description as plain text in descriptionText
maxRetriesinteger3Total attempts per board for temporary errors (HTTP 429 / 5xx). A 404 is a permanent answer and is not retried

Naming a board: the board URL - https://<tenant>.wd5.myworkdayjobs.com/<Site>. A bare company name never tries Workday, because the tenant and the site name are both part of the address.


Output columns

rowType, ok, reason, ats, companySlug, companyName, jobId, title, department, team, employmentType, locationRaw, locationsAll, country, city, workplaceType, isRemote, remoteHint, salaryMin, salaryMax, salaryCurrency, salaryInterval, salaryText, postedAt, updatedAt, jobUrl, applyUrl, descriptionText, source

All 29 columns are present on every row, in the same order - including the marker rows. The Greenhouse, Lever, Ashby, Workable and Workday Actors all return these same 29 columns, so adding another ATS never means rewriting your parser.

Two things it refuses to invent

  • isRemote is set only when Workday itself says so. A guess based on the location text lives in a separate column called remoteHint, so you always know which is which. A job located in "Remote, Oregon" is not a remote job.
  • salaryMin / salaryMax come only from structured compensation fields. Nothing is parsed out of prose, and a missing figure stays null - never 0.

How it is checked

  • 148 automated checks across 3 files, run before every publish
  • 50 deliberate defects injected into the source; all 50 were caught by those checks (re-run and verified 2026-09-03)
  • Only public job boards are read. Nothing needs a login, and no private ATS data is accessed
  • Every request has a 45-second timeout, so a silent server cannot hang the run
  • Up to 200 boards per run

The rest of the family

Same 29 columns, same row rules, one ATS each:

Support

Found a board that behaves oddly? Open an issue on the Issues tab and include the board name - it will be reproduced against the live API before anything is changed.