Workday Jobs Scraper: Full Descriptions, Past the 2,000 Cap avatar

Workday Jobs Scraper: Full Descriptions, Past the 2,000 Cap

Pricing

from $2.10 / 1,000 job posting returneds

Go to Apify Store
Workday Jobs Scraper: Full Descriptions, Past the 2,000 Cap

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

First Party Data

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

a month ago

Last modified

Security

Limited permissions

Share

Workday Jobs Scraper, Full Descriptions, Past the 2,000 Cap

Job postings from any Workday careers site (the *.myworkdayjobs.com kind), read through Workday's own public endpoints. No login, no proxy, no browser.

You give ita careers-site URL, or a company name, which finds about one Workday board in seven (see Input). Or nothing: switch on Search the built-in company list and filter 3,104 live Workday boards
You get backone row per posting: title, location, country, employment type, requisition id, the full description and the exact posting date. Workday's own listing gives you neither of the last two
It costs$3.50 per 1,000 rows on Apify's Free and Starter plans, $2.80 on Scale, $2.10 on Business and above, plus $0.01 per run. Filters are applied before you are charged, and a run that finds nothing costs nothing
The form as it opensreads NVIDIA and Stryker, 10 postings each: 20 rows, 8 cents on the Free plan, about 10 seconds on Apify. For more, raise Maximum jobs from any one job board and Maximum jobs to return

Workday is the slowest of the big systems to read, because every description is its own request. Switch descriptions off when you only need to know who is hiring for what.

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:

FieldListing endpointWhat you get here
Descriptionnot published2,400–9,500 characters, HTML and plain text
Posted date"Posted 3 Days Ago"exact ISO date
Employment typenot publishedFULL_TIME / PART_TIME, vendor wording in employmentTypeRaw
Work arrangementnot publishedWorkday's own remote flag, where the employer set it
Apply URLderived from a paththe employer's canonical URL
Requisition IDpartialjobReqId

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,000
distinct 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 a
single query returns at most 2,000. Splitting by jobFamilyGroup into 15
queries 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:

EmployerNaive pagingThis actorRecovered
Abbott2,0002,669+669
NVIDIA2,0002,671+671
Thales2,0002,603+603
Airbus2,0002,559+559
8,00010,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 to
Job 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/NVIDIAExternalCareerSite
https://abbott.wd5.myworkdayjobs.com/en-US/abbottcareers
workday: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, and it is a real one. Measured against all 3,103 Workday boards then in the bundled list: wd1/wd5/wd3 cover 83% of hosts, and a name search reaches 15% of them. Site names mostly follow no pattern at all, EXT, BAH_Jobs, signetjeweleryretailsales, external_experienced, and the search also assumes the tenant matches the company name, which often it does not. Airbus files under ag.

That figure used to read 95% and about half, measured against 120 boards. It was not wrong then and it is not a regression now: those 120 were large, well-known employers whose tenant is their own name, and the bundled list is now thousands of boards of every size. The old number was a property of the sample. Paste the URL: it always works, costs one request, and is the documented way in. When a name search misses, the log says so and tells you that.

Or switch on Search the built-in company list and skip URLs entirely: this actor ships 3,104 verified live Workday boards carrying 720,222 open postings, largest employers first.

The ten biggest Workday employers in the bundled list

  1. Dollar Tree: 24,132 roles
  2. CVS Health: 19,485 roles
  3. Lowe's: 12,543 roles
  4. RTX: 4,757 roles
  5. PwC: 4,462 roles
  6. PwC: 4,280 roles
  7. Northrop Grumman: 3,753 roles
  8. DaVita: 3,329 roles
  9. Bank of America: 3,085 roles
  10. Micron Technology: 2,992 roles

Verified live at build time (2026-09-24): every board answered its API with at least one open posting. Workday publishes no company name, so the largest tenants are named by hand from the legal entities on their postings and the rest are derived from the tenant identifier. A board you name by URL gets the same name it has in this list.


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.

Set Maximum jobs from any one job board to 0 for a feed. The form opens at 10 per company to keep a first look cheap, and a limit left in place caps what every run can deliver from each company.


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: null on 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 compensation is null rather 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.