Workday Jobs Scraper & API — No Site ID Needed
Pricing
from $1.30 / 1,000 jobs
Workday Jobs Scraper & API — No Site ID Needed
[💵 $2.00 / 1K] Scrape every open role from any Workday career site via its official public API. No site ID needed — paste the company website and the board is found for you. Full descriptions, requisition IDs, locations. Monitoring mode returns only new postings. For n8n, Make, Zapier & MCP.
Pricing
from $1.30 / 1,000 jobs
Rating
0.0
(0)
Developer
Dataloft Studio
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
18 days ago
Last modified
Categories
Share
Workday jobs scraper and API: every open role from any Workday career site through Workday's own public JSON endpoint. You do not need the site ID — paste the company website and the scraper finds the board. Works with n8n, Make, Zapier, the Apify API and as an MCP tool for AI agents.
What is the Workday Jobs Scraper?
Workday runs the careers page for a large share of the Fortune 500, and its job data is served by a public JSON API. The awkward part is the URL: every tenant has a site ID like NVIDIAExternalCareerSite or External_Career_Site that is nowhere on the company's homepage.
This actor removes that problem. Give it nvidia.com and it works out the tenant, tries the data centre hosts, probes the known site-ID naming patterns, verifies the board serves jobs, then pulls everything. No login, no cookies, no browser automation, no personal data.
What data do you get from a Workday career site?
Output fields
| Field | Notes |
|---|---|
title, company, workdayTenant, workdaySite | |
id | the real Workday requisition ID, e.g. JR2019813 |
location, locations[], country, isRemote | full location list, not just the summary line |
employmentType | Workday's time type |
descriptionHtml, descriptionText | complete posting, both formats |
applyUrl, jobUrl, companyCareerUrl | |
postedAt, scrapedAt | ISO 8601 |
Example output JSON
{"id": "JR2019813","title": "ASIC Verification Engineer - GPU","company": "nvidia","workdayTenant": "nvidia","workdaySite": "NVIDIAExternalCareerSite","location": "US, CA, Santa Clara","employmentType": "Full time","isRemote": false,"descriptionText": "NVIDIA is seeking elite ASIC Verification Engineers…","applyUrl": "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite/job/…","postedAt": "2026-08-24T00:00:00.000Z"}
How to find a Workday site ID (or skip it entirely)
Any of these work in Workday career sites:
https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite ← full URLhttps://nvidia.wd5.myworkdayjobs.com ← site ID discovered for younvidia.com ← company website
Site IDs are not guessable by pattern alone — they range from External to CISCO_Careers to NVIDIAExternalCareerSite. Discovery tries generic names and tenant-branded variants across every Workday data centre. It resolves most well-known companies; when it cannot, the run tells you which input failed rather than skipping it silently. The resolved workdayTenant and workdaySite are in every output row, so one run also answers "what is this company's site ID?".
Step-by-step
- Add one or more career sites, URLs or plain domains.
- Optionally set Search term — it is passed to Workday's own search, so filtering happens on their side and the run is far faster than pulling everything.
- Add local filters for title, location, keyword, posted-after or remote-only.
- Run, then export as JSON, CSV or Excel.
API target requirement
API callers must supply careerSites (or a supported alias). The Console prefilled form is an example, not an implicit target list for an empty API request. A raw POST with no target is rejected with a clear input error and no job-result event; the small Actor-start fee may still apply. In the 2026-09-05 cloud check, the runtime did not substitute the saved exampleRunInput for a missing request body. Copy the complete JSON example when integrating.
Example input JSON
{"careerSites": ["https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite","salesforce.com","cisco.com"],"searchText": "software engineer","titleIncludes": ["senior"],"locationIncludes": ["remote", "california"],"maxTotalJobs": 500}
Input aliases from other Workday scrapers
companies, companyUrls and startUrls are accepted as aliases of Workday career sites, so input copied from another Workday actor runs here unchanged.
Monitoring mode: only new Workday postings since your last run
The first successful run delivers a baseline of the matching postings within your scan limits. Later runs with Only new jobs since last run skip previously delivered identities. This is an unseen-record feed, not proof that a job was first published yesterday, changed, or closed.
Use a distinct Seen-jobs store name per watchlist and run only one task at a time against that store. Named key-value storage has no atomic cross-run lock; do not overlap schedules. Scan/output caps can limit coverage. If history cannot be read or persisted, or a previous delivery is unresolved, monitoring fails visibly instead of silently treating everything as new. Inspect RUN_SUMMARY and the saved pending-delivery record before retrying; do not delete history to bypass a reconciliation error.
How fast is it?
Workday's API returns 20 rows per request and will not return more, however you ask. Rather than walking those pages one at a time, this actor reads the first page to learn the real total and then fetches the rest in parallel — about parallel paging; the improvement depends on the board and rate limits.
Full descriptions cost one extra request per posting. Turn Include full job descriptions off when you only need an inventory of titles and links.
How much does it cost to scrape Workday?
$2.00 per 1,000 jobs. You are charged per job saved to your dataset, so postings removed by your filters and previously-seen postings in monitoring mode cost nothing. No matching result incurs a job event, but the configured Actor-start fee is $0.00005 per GB of memory, including on an empty run (one event at the 1 GB default).
Cost examples
Illustrative result-event charges at the base tier; not measured demand or recurring revenue. Add the small Actor-start fee described above. Actual available matches vary.
| What you run | Rows charged | Cost |
|---|---|---|
| Full inventory of one large tenant (titles and links) | 1,500 | $3.00 |
| "software engineer" search across 10 tenants, ~30 matches each | 300 | $0.60 |
| Daily monitoring of 50 tenants, ~1% churn | ~40 per day | ~$0.08 per day, ~$2.40 per month |
| Ten Fortune 500 companies from plain domains, everything | 6,000 | $12.00 |
Integrations: n8n, Make, Zapier, MCP and the API
Use with AI agents (MCP server)
$npx -y @apify/actors-mcp-server --actors dataloft/workday-jobs-scraper
Or enable the actor at https://mcp.apify.com with your Apify token. An agent can then answer "how many open roles does Cisco have in California right now?" from one tool call.
n8n, Make and Zapier
Use the Apify node (n8n), the Apify app (Make) or the Apify integration (Zapier): Run Actor → dataloft/workday-jobs-scraper → paste the input JSON → read dataset items. With monitoring mode on, "new Workday postings at my target accounts → CRM / Slack" is a three-node workflow.
JavaScript, Python and REST
const { ApifyClient } = require('apify-client');const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('dataloft/workday-jobs-scraper').call({careerSites: ['nvidia.com', 'salesforce.com'], searchText: 'engineer', maxTotalJobs: 200,});const { items } = await client.dataset(run.defaultDatasetId).listItems();
from apify_client import ApifyClientclient = ApifyClient(token=os.environ["APIFY_TOKEN"])run = client.actor("dataloft/workday-jobs-scraper").call(run_input={"careerSites": ["nvidia.com"], "maxTotalJobs": 200})items = client.dataset(run["defaultDatasetId"]).list_items().items
REST: POST https://api.apify.com/v2/acts/dataloft~workday-jobs-scraper/run-sync-get-dataset-items with an Authorization: Bearer <APIFY_TOKEN> header
What this Actor does and does not do
| Does | Does not |
|---|---|
| Pull every open role from a Workday tenant via its public JSON API | Scrape sites that are not on Workday (use the ATS Jobs Scraper for those) |
| Discover the site ID from a plain company domain | Log in, solve CAPTCHAs, or bypass anti-bot systems |
| Hold the true board total that Workday reports only once | Collect candidate or recruiter data |
| Return only new requisitions in monitoring mode | Apply to jobs on your behalf |
Limits and known caveats
- Workday reports the total only once. The first page carries the real count; every page after it reports
0. A scraper that trusts that field on later pages stops early and quietly returns a fraction of the board. This one takes the total from the first response and holds it. - Fully custom site IDs can defeat discovery; paste the careers URL from your browser and it can avoid the discovery step; source access and availability can still fail.
- Descriptions cost one extra request per posting; large boards with descriptions on take proportionally longer.
- Posted dates are relative on Workday ("Posted 3 Days Ago") and are converted to real timestamps; treat them as day-accurate, not minute-accurate.
Example tasks
Ready-made configurations — bounded NVIDIA job samples, company-domain watchlists, and unseen Workday postings since the previous run — are on the Example tasks tab: https://apify.com/dataloft/workday-jobs-scraper/examples
Is it legal to scrape Workday job boards?
This actor calls the same public JSON endpoint your browser calls when you open a company's Workday careers page. It collects job postings — company information, not personal data. No candidate data, no logins, no cookies. How you use the output remains your responsibility, including under the relevant terms if you intend to redistribute it.
Frequently asked questions
Why did discovery fail for my company? Either they are not on Workday, or their site ID is fully custom. Open the careers page in a browser, copy the URL, and paste it in — that avoids the discovery step, subject to source availability.
Can I search inside descriptions? Yes. Search term goes to Workday's engine; Keyword filters locally against the description text after fetching.
Do I need a proxy? Not usually. The option exists for large scheduled runs from a single IP.
Can I scrape several companies at once? Yes — add as many career sites as you like. Each is resolved independently, and one failure does not stop the others.
How do I get only new postings? Turn on Only new jobs since last run. You can also set Only roles posted after to a date; the two combine.
Can I use it from n8n or as an MCP tool? Yes — see Integrations above.
Other job scrapers by Dataloft Studio
- ATS Jobs Scraper — 11 ATS platforms including Workday, for mixed target lists.
- Remote Jobs Aggregator — 7 remote job boards in one deduplicated feed.
Changelog
-
0.3 — 2026-09-05: monitoring fails visibly on history/delivery errors; budget-aware result charging and delivery reconciliation; published examples corrected and bounded.
-
0.2 — 2026-09-02: monitoring mode (only new requisitions since last run); input aliases
companies/companyUrls/startUrls; memory capped at 1 GB; changelog added. -
0.1.2 — 2026-08-25: output schema added; first-run prefill capped for the daily automated test.
-
0.1 — 2026-08-25: initial release, site-ID discovery, parallel paging.
Support and feedback
Issues and feature requests go in the Issues tab. Reports that include the input JSON get fixed fastest.