Workday Jobs Scraper: Full Descriptions, Past the 2,000 Cap
Pricing
from $2.10 / 1,000 job posting returneds
Workday Jobs Scraper: Full Descriptions, Past the 2,000 Cap
Scrapes job postings from any Workday careers site (*.myworkdayjobs.com). Returns the full job description and the exact posting date, which Workday's listing endpoint does not provide, and splits large boards by category to get past Workday's hard 2,000-result-per-query ceiling.
Pricing
from $2.10 / 1,000 job posting returneds
Rating
0.0
(0)
Developer
First Party Data
Maintained by CommunityActor stats
1
Bookmarked
2
Total users
1
Monthly active users
4 hours ago
Last modified
Categories
Share
Workday Jobs Scraper, Full Descriptions, Past the 2,000 Cap
Pulls job postings from any Workday careers site (the *.myworkdayjobs.com
kind) through Workday's own public endpoints. No login, no proxy, no browser.
Two things here that most Workday scrapers do not do, both of them measurable in about a minute against any competitor.
1. It returns the description and the real posting date
Workday's listing endpoint is thin. Per posting it gives a title, a URL path, a
location string, and a relative date: literally the string "Posted Today"
or "Posted 30+ Days Ago". No description, no employment type, no exact date.
That listing is what a Workday scraper normally hands you, which is why Workday
job data tends to be unusable for anything except counting.
There is a second public endpoint, one per posting, and this actor follows it:
| Field | Listing endpoint | What you get here |
|---|---|---|
| Description | not published | 2,400–9,500 characters, HTML and plain text |
| Posted date | "Posted 3 Days Ago" | exact ISO date |
| Employment type | not published | FULL_TIME / PART_TIME, vendor wording in employmentTypeRaw |
| Work arrangement | not published | Workday's own remote flag, where the employer set it |
| Apply URL | derived from a path | the employer's canonical URL |
| Requisition ID | partial | jobReqId |
Verified against eight unrelated tenants, Abbott, NVIDIA, Thales, IQVIA, Labcorp, Blue Origin and two others, 8 of 8 returned full detail.
It costs one extra request per posting, so it only runs when Include full job descriptions is on, and only for postings that already survived your title and location filters.
2. It gets past Workday's 2,000-result ceiling
This one is worth understanding, because it is invisible and it is why two Workday scrapers can disagree about how many jobs a company has.
Workday will not return more than 2,000 postings for any single query, and it
does not tell you. The total field is silently clamped to 2000. Page past
it and the API keeps answering, with rows you have already seen.
Measured on NVIDIA's board:
total reported by the API ............ 2,000distinct postings from naive paging .. 2,000 (offsets 2000-3980 return only duplicates)postings that actually exist ......... 2,667 (the facet counts say so)─────silently missing ...................... 667 = 25% of the board
Every facet is a separate query with its own ceiling, so the way through is to split the board and merge. This actor detects the clamp automatically by comparing the category counts against the reported total, and only then splits:
INFO workday/nvidia|wd5|NVIDIAExternalCareerSite: 2,667 postings exist but asingle query returns at most 2,000. Splitting by jobFamilyGroup into 15queries to reach the rest.INFO Done in 127.3s, 2667 jobs from 1 live board
All 2,667. If a board fits under the cap, nothing extra happens and it is not slower.
This is not one unlucky board. Reading the four largest Workday employers in the bundled list, measured 14 September 2026. Those boards move daily, so the figure moves with them:
| Employer | Naive paging | This actor | Recovered |
|---|---|---|---|
| Abbott | 2,000 | 2,669 | +669 |
| NVIDIA | 2,000 | 2,671 | +671 |
| Thales | 2,000 | 2,603 | +603 |
| Airbus | 2,000 | 2,559 | +559 |
| 8,000 | 10,502 | +31.3% |
Any Workday tenant with more than 2,000 open roles is affected, and there are a lot of them, because that is a normal size for an enterprise employer.
3. Filtering happens inside Workday, not after
Workday supports a server-side search and server-side facets, and this actor passes yours straight through. That matters for cost as well as speed: rows filtered out at the source are rows you are never billed for.
{"companies": ["https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite"],"searchText": "kernel","jobCategory": ["Engineering"]}
INFO workday/nvidia|wd5|NVIDIAExternalCareerSite: filtering at the source toJob Category: Engineering.INFO Done in 12.4s, 249 jobs (288 postings scanned)
288 postings read instead of 2,667, for the same answer.
Category names are matched against whatever that tenant actually publishes, so
you can write "Engineering" without hunting for Workday's opaque internal ids.
Name one that does not exist and the log tells you which categories the board
does have.
Input
Paste the careers URL. Any of these shapes works:
https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSitehttps://abbott.wd5.myworkdayjobs.com/en-US/abbottcareersworkday:nvidia|wd5|NVIDIAExternalCareerSite
A Workday address has three parts: the tenant (nvidia), the host
(wd5, which genuinely varies: wd1 through wd12 are all in use), and the
site name (NVIDIAExternalCareerSite). Paste the whole URL and all three are
read off it.
Or just give the company name. With stryker, medtronic or gartner the board
is searched for by probing the shapes that real Workday tenants actually use,
cheapest first, stopping at the first hit:
INFO Found a Workday board for "stryker": stryker / wd1 / strykercareers (1455 postings).INFO Found a Workday board for "gartner": gartner / wd5 / EXT (762 postings).
Be aware of the limit: measured against the 120 real Workday boards in the
bundled list, wd1/wd5/wd3 cover 95% of hosts but 48% of site names follow
no pattern whatsoever: EXT, BAH_Jobs, signetjeweleryretailsales,
external_experienced. So a name search finds about half of them, and that is
the best case, because it also assumes the tenant matches the company name.
Airbus files under ag. When the search misses, the log says so and tells you to
paste the URL, which always works and costs one request.
Or switch on Search the built-in company list and skip URLs entirely: this actor ships 120 verified live Workday boards carrying 47,125 open postings, largest employers first.
The ten biggest Workday employers in the bundled list
- Abbott: 2,677 roles
- NVIDIA: 2,657 roles
- Thales: 2,588 roles
- Airbus: 2,582 roles
- Booz Allen Hamilton: 2,398 roles
- IQVIA: 1,924 roles
- Labcorp: 1,775 roles
- Blue Origin: 1,641 roles
- Signet Jewelers: 1,556 roles
- Stryker: 1,457 roles
Verified live at build time (2026-09-15): every board answered its API with at least one open posting. Workday publishes no company display name, so these are derived from the tenant identifier.
Output
One row per posting, with a stable id so repeat runs can be de-duplicated:
{"id": "workday:nvidia|wd5|NVIDIAExternalCareerSite:JR2017846","title": "Senior Embedded Software Engineer, DPU - Networking","company": "NVIDIA","ats": "workday","locationRaw": "US, MA, Westford","city": null,"region": null,"country": "United States","countryCode": "US","countryInferred": false,"employmentType": "FULL_TIME","employmentTypeRaw": "Full time","seniorityLevel": "SENIOR","seniorityInferred": true,"workplaceType": null,"isRemote": null,"descriptionText": "We are looking for a versatile Senior Software Engineer...","applyUrl": "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite/job/...","postedAt": "2026-09-11T00:00:00.000Z","postedOnRaw": "Posted Yesterday","requisitionId": "JR2017846","scrapedAt": "2026-09-12T07:54:44.226Z"}
isRemote is three-valued: true, false, or null when the employer did
not say. Most Workday tenants leave the remote flag unset, so null is common
and it is not the same as false. Filtering on Remote roles only excludes
unknowns rather than guessing at them.
Running it as a feed
Switch on Only new or changed jobs and the actor remembers what it returned
last time, then bills only what moved. Unchanged postings are skipped entirely.
Postings that vanished from the board are listed in the
REMOVED_SINCE_LAST_RUN record, so you can close them out of your own index.
On a large Workday board that is the difference between paying for a full re-read every morning and paying for one, once.
What to expect, honestly
- Workday is the slowest major ATS to read. It pages 20 postings at a time, so a 2,600-role board is 130 round trips before descriptions. Budget minutes, not seconds. Nothing can fix this; the page size is Workday's.
- Descriptions double the work. One extra request per posting. Turn them off when you only need to know who is hiring for what.
- Most tenants do not set the remote flag. Expect
isRemote: nullon the majority of postings; the description usually says, but this actor will not guess from prose. - No structured salary. Workday exposes no pay field. Where a range is
written into the description in an unambiguous, currency-marked form it is
parsed out; otherwise
compensationisnullrather than a guess. - Boards move. Tenants get renamed and sites get retired. Those return 404,
are counted separately in
RUN_SUMMARY.boardsNotFound, and never fail the run. - Public data only, and worth being precise about. The endpoint this actor reads is the one a Workday careers page calls to draw its own list. It is public and unauthenticated, and it is not a feed Workday documents for third-party use. Nothing authenticates, submits an application, or touches candidate data, and the requests carry a User-Agent naming this actor.
Unofficial: this actor is not affiliated with or endorsed by Workday, Inc.