Workday Jobs Scraper for myworkdayjobs.com
Pricing
from $0.75 / 1,000 results
Workday Jobs Scraper for myworkdayjobs.com
Reads any Workday careers site on myworkdayjobs.com through the tenant's own CXS search API and returns the requisition ID, title, employmentType, isRemote, postedAt, apply URL and a location split into city, state and country. Paginates a whole board 20 postings at a time.
Pricing
from $0.75 / 1,000 results
Rating
0.0
(0)
Developer
String
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
9 days ago
Last modified
Categories
Share
Pull every open role off any Workday careers site — one URL in, the whole board out, with the location split into city, state and country.
What can Workday Job Board Scraper do?
Give it a careers-site URL and it returns the board's postings as rows, walking the whole board rather than the first page.
🏢 Any Workday board, no setup. Paste a careers URL such as
salesforce.wd12.myworkdayjobs.com/External_Career_Site and it works out the tenant and board
itself. Nothing is per-company.
📋 Every posting, paginated to the end. Workday hands out 20 at a time; this walks the board to
its own reported total, or stops at your maxItems.
📍 A location you can filter on. Tenants write Reno, NV, USA.VA.Reston and
California - San Franciscocity, state and an ISO country code.
🏠 A real remote flag. isRemote reads the location and Workday's own remoteType, not the
title.
📅 A calendar date. Workday publishes "Posted 4 Days Ago"; you get postedAt as YYYY-MM-DD.
🔑 A stable jobId. Workday's own requisition id, so a scheduled run de-duplicates on one
column.
🚫 No login. No Workday account, cookie or API key — this is the external careers site a logged-out visitor sees.
Why scrape Workday?
Workday is the ATS of large employers. If you are tracking hiring at enterprises, this is where the requisitions actually live, and the CXS API returns them as clean JSON rather than as rendered markup.
- Monitor enterprise headcount direction across a named competitor set, run on a schedule.
- Detect a new site or market entry from where requisitions start appearing.
- Feed a job board or talent CRM directly from the employer's board, keyed on a stable
jobId. - Build recruiting lists filtered on
city,state,countryorisRemote. - Score sales accounts on hiring signals, weighting by
postedAtfreshness. - Track how much of a large employer's hiring is genuinely remote, using the flag rather than the title.
How to use it
- Follow the employer's "careers" or "search jobs" link until the address bar shows
<tenant>.wd<N>.myworkdayjobs.com/<Board>. Copy the URL. A single posting's URL works too. - Add it to Job boards, up to 100 per run.
- Set Maximum results. Boards paginate 20 at a time, so this is what bounds the request count.
- Raise Concurrency toward 10 when collecting many boards.
- Run it, then export the dataset as JSON, CSV, Excel or XML, or read it over the API.
Output
One row per posting. Illustrative shape:
{"jobId": "JR284401","title": "Lead Solution Engineer","company": null,"tenant": "salesforce","location": "California - San Francisco","city": "San Francisco","state": "CA","country": "US","isRemote": false,"department": null,"employmentType": "Full time","postedAt": "2026-08-16","jobUrl": "https://salesforce.wd12.myworkdayjobs.com/External_Career_Site/job/California---San-Francisco/Lead-Solution-Engineer_JR284401","boardUrl": "https://salesforce.wd12.myworkdayjobs.com/External_Career_Site","sourceUrl": "https://salesforce.wd12.myworkdayjobs.com/wday/cxs/salesforce/External_Career_Site/jobs","collectedAt": "2026-08-20T09:14:02.118Z"}
The run also writes a SUMMARY record holding the item count, the failure count and each failed board
or page with its error.
Limitations
Board-level data only. Workday's search API publishes no description body and no salary, and it
names neither the employer nor the department, so company and department are always null —
the FAQ says why. Follow jobUrl for the posting itself.
Locations are resolved from free text the tenant wrote, so the split is a best reading rather than a
lookup. A two-letter part is tried as a US or Canadian region before a country, which keeps the CO
in Denver, CO, USA as Colorado rather than Colombia; the trade is that a bare CA always reads as
California. Virtual and Home Office are read for isRemote and then dropped, and region labels
such as EMEA and APAC are left as neither a city nor a country.
How much does it cost?
A run that returns 1,000 rows costs $1.50 on a paid plan, or $1.75 with no subscription.
You are charged per result row written to the dataset, so a run that returns nothing costs nothing,
and maxItems is the budget dial.
| Plan | Per 1,000 rows |
|---|---|
| Free | $1.75 |
| Bronze | $1.50 |
| Silver | $1.00 |
| Gold | $0.75 |
| Platinum | $0.75 |
| Diamond | $0.75 |
Apify bills its own platform usage for the run on top of this.
At 20 postings per request, requests track rows closely, so maxItems is effectively the budget dial.
Collecting the first 200 postings of fifty boards is much cheaper than collecting fifty boards in full,
and the scheduler here is built to make that first case work rather than fetching everything and
throwing the surplus away.
Runs started from an Apify free plan stop at 250 requests and 250 results and report the limit in the run status. Any paid plan runs the full input. Because pagination turns one board into many fetches, the second pass of a free-plan run is bounded against whatever the first pass left rather than against the full allowance again.
Using it with the Apify API
import { ApifyClient } from "apify-client";const client = new ApifyClient({ token: "<YOUR_APIFY_TOKEN>" });const run = await client.actor("usestring/workday-jobs").call({boards: ["https://salesforce.wd12.myworkdayjobs.com/External_Career_Site"],maxItems: 3000,concurrency: 5});const { items } = await client.dataset(run.defaultDatasetId).listItems();const remoteShare = items.filter((job) => job.isRemote).length / items.length;console.log(`${items.length} postings, ${(remoteShare * 100).toFixed(1)}% remote`);
Read the run's SUMMARY record from its key-value store to see which boards, if any, were rejected.
Related actors
- Taleo Job Board Scraper covers the Oracle platform many of these employers migrated away from, and some still run alongside.
- iCIMS Job Board Scraper covers the other large enterprise ATS you will meet in the same employer list.
- Greenhouse Job Board Scraper returns a whole board in a single request for technology employers.
- Ashby Job Board Scraper covers the well-funded startups that have not reached Workday yet.
- Glassdoor Jobs Scraper adds the reputation layer around an enterprise requisition.
FAQ
How do I find a company's Workday careers site? Follow the careers link on the employer's own site.
Workday sites look like https://<tenant>.wd<N>.myworkdayjobs.com/<Board>, where <N> is a data-centre
number. Paste the whole URL, or paste a single posting's URL and let the Actor reduce it to the board.
How many postings come back per request? Twenty. Workday rejects anything larger with HTTP_400, so
a 2,000-posting board is 100 requests and there is no way around that.
Why is there no company name? Workday publishes none on any public endpoint. The search response has
no such field, and the detail endpoint carries only the hiring legal entity, which is often something
like 4 LZB Retail, Inc. rather than the brand a person would recognise. Rather than fill the column
with something misleading it is left null, and tenant is the identity to join on.
Why is there no department? For the same reason. Department exists on a Workday board only as the
jobFamilyGroup facet, which counts how many postings sit in each category without naming the category
of any individual posting.
How accurate is postedAt? It is exact for anything posted within the last 30 days, since
Posted 4 Days Ago resolves to a real calendar date against the run clock. Beyond that Workday only
says 30+ Days Ago, and the field is null.
Do results ever duplicate? They are de-duplicated on jobUrl before being written, which is
necessary because a board whose reported total understates it hands back page one again past the end
instead of terminating.
What happens if a board rejects the search? Workday answers a rejected search with an error envelope
carrying its own httpStatus inside a 200 response, so it would otherwise look like a successful empty
board. That envelope is read, and the board is recorded under failures in the run's SUMMARY.
Feedback
If a board returns nothing, or a location splits into the wrong fields, open an issue from this Actor's Store page with the board URL. Workday location strings vary more than anything else here, and a real example is what it takes to handle a new form.