Workday Jobs Scraper
Pricing
Pay per event
Workday Jobs Scraper
Extract normalized public Workday job listings from one or many employer career sites for search, aggregation, export, and recurring vacancy monitoring.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
8 days ago
Last modified
Categories
Share
Collect public Workday jobs from one employer or many employers in a single run.
Workday Jobs Scraper queries public myworkdayjobs.com career sites, follows their native pagination, and returns normalized vacancy records ready for spreadsheets, databases, recruiting research, and recurring monitoring.
Give it career-site URLs rather than a proprietary company directory. This keeps the target explicit and makes scheduled results repeatable.
What does Workday Jobs Scraper do?
The Actor uses Workday's public career-site JSON endpoints to:
- search one or more employer career sites;
- aggregate vacancies into one default dataset;
- fetch full job details when requested;
- normalize fields across Workday tenants;
- stop at one global result limit;
- preserve stable keys for comparisons between runs;
- export results as JSON, CSV, Excel, XML, or RSS through Apify.
It does not log in, submit applications, or read a candidate's application status.
Who is this Workday jobs API for?
Job-board operators can ingest employer-posted vacancies into a downstream catalog.
Recruiting intelligence teams can compare openings across selected employers.
Analysts can export role titles, locations, posting age, and descriptions for workforce research.
Developers can call one consistent API instead of integrating separately with every Workday tenant.
Automation teams can schedule runs and compare dedupeKey values to detect additions and removals.
Why use this Actor?
Workday tenants use different hosts and career-site identifiers, but their public data follows a common CXS response shape.
This Actor handles URL parsing, pagination, retries, normalization, optional detail requests, deduplication, and Apify dataset export.
The implementation is HTTP-only. It does not start a browser or automatically use paid residential proxies.
When one employer fails in a multi-employer run, the Actor continues with other valid employers. If every supplied site fails, the run fails visibly rather than returning a misleading empty success.
What Workday job data can I extract?
| Field | Meaning |
|---|---|
source | Always workday |
tenant | Tenant parsed from the Workday hostname |
careerSite | Career-site identifier |
careerSiteUrl | Canonical employer career-site URL |
sourceJobId | Stable identifier derived from the job path |
requisitionId | Employer requisition ID when publicly available |
title | Job title |
location | Primary location text |
additionalLocations | Other advertised locations |
postedOn | Posting date or age text from Workday |
timeType | Full-time, part-time, or another exposed time type |
remoteType | Remote, hybrid, or on-site text when exposed |
descriptionHtml | Full public description when detail fetching is enabled |
jobUrl | Public job page |
applyUrl | Public application URL or job URL fallback |
dedupeKey | Stable tenant/site/path key for recurring comparisons |
scrapedAt | Collection timestamp in ISO 8601 format |
A field can be null when the employer does not expose it.
How to scrape Workday career sites
- Open an employer's public
myworkdayjobs.comcareer site. - Copy the board URL, not an individual job URL.
- Add one or more URLs to
careerSiteUrls. - Optionally enter keywords in
searchText. - Choose a global
maxItemslimit. - Keep
includeDetailsenabled for descriptions and requisition fields. - Click Start.
- Open the default dataset to preview or download records.
A supported URL looks like:
https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite
Localized paths are also supported:
https://tenant.wd3.myworkdayjobs.com/en-US/ExternalCareers
Input parameters
careerSiteUrls
Required array of 1–50 public Workday career-site URLs.
All URLs must use HTTPS and a hostname shaped like {tenant}.wd{number}.myworkdayjobs.com.
searchText
Optional keyword text sent to each career site's native search endpoint.
Use a short query such as software, data analyst, or finance.
maxItems
Maximum number of unique records saved across every supplied employer.
The accepted range is 1–10,000. The default is 100.
includeDetails
When true, the Actor requests each job's public detail endpoint.
This adds descriptions, requisition IDs, time types, and additional locations where available.
Set it to false for faster list-level scans.
Example input: search one employer
{"careerSiteUrls": ["https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite"],"searchText": "software","maxItems": 20,"includeDetails": true}
Example input: aggregate employers
{"careerSiteUrls": ["https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite","https://workday.wd5.myworkdayjobs.com/Workday"],"searchText": "","maxItems": 50,"includeDetails": false}
The limit applies to the combined dataset, not separately to each URL.
Example output
{"source": "workday","tenant": "samplecompany","careerSite": "ExternalCareers","careerSiteUrl": "https://samplecompany.wd5.myworkdayjobs.com/ExternalCareers","sourceJobId": "Software-Engineer_R1001","requisitionId": "REQ-1001","title": "Software Engineer","location": "Austin, Texas, United States","additionalLocations": ["Remote - United States"],"postedOn": "Posted Today","timeType": "Full time","remoteType": "Hybrid","descriptionHtml": "<p>Example public job description.</p>","jobUrl": "https://samplecompany.wd5.myworkdayjobs.com/job/Software-Engineer_R1001","applyUrl": "https://samplecompany.wd5.myworkdayjobs.com/job/Software-Engineer_R1001","dedupeKey": "samplecompany:ExternalCareers:/job/Software-Engineer_R1001","scrapedAt": "2025-01-15T12:00:00.000Z"}
The default dataset is compatible with Apify's API, webhooks, integrations, and exports.
How much does it cost to extract Workday jobs?
The Actor uses pay-per-event pricing:
- one small
startevent is charged after input validation; - one
jobevent is charged for each normalized vacancy saved; - failed, duplicate, or rejected records are not charged as jobs;
- detail fields do not create a separate event charge.
Your exact per-job tier appears in Apify Console before the run starts. At the BRONZE tier, each run charges the $0.0005 start event once and $0.001196 per saved job. For example, a 20-job collection records one start event and 20 job events; a 100-job collection records one start event and 100 job events.
Larger platform subscription tiers receive lower per-job rates. Failed, duplicate, and rejected jobs add no item charge. Set a low result limit for small tests and a higher limit for production collections.
Recurring vacancy monitoring
Run the Actor on a schedule to build timestamped snapshots.
For each snapshot:
- retain
dedupeKeyas the stable record identity; - compare current keys with the previous dataset;
- treat new keys as newly observed vacancies;
- treat missing keys as removed or closed vacancies;
- compare selected fields to identify changed locations or descriptions.
The Actor reports the current public state. It does not maintain historical state or send alerts by itself.
Use an Apify schedule, webhook, Make scenario, or Zapier workflow for downstream monitoring.
Export Workday jobs to a spreadsheet or pipeline
In Apify Console, open the run's dataset and choose JSON, CSV, Excel, XML, or RSS.
For a recurring pipeline, retrieve dataset items through the API after each successful run.
Common destinations include:
- Google Sheets for review;
- a warehouse for workforce analysis;
- a database-backed job board;
- an alerting workflow for selected roles;
- a deduplication or change-detection service.
Description HTML may contain markup. Strip or sanitize it before rendering in another application.
API usage with cURL
Replace YOUR_APIFY_TOKEN with an Apify API token:
curl -X POST \"https://api.apify.com/v2/acts/automation-lab~workday-jobs-api-scraper/runs?token=YOUR_APIFY_TOKEN&waitForFinish=120" \-H "Content-Type: application/json" \-d '{"careerSiteUrls": ["https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite"],"searchText": "software","maxItems": 20,"includeDetails": true}'
Fetch items from the defaultDatasetId returned by the run response.
API usage with JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/workday-jobs-api-scraper').call({careerSiteUrls: ['https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite'],searchText: 'software',maxItems: 20,includeDetails: true,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Pin a client version in production and keep tokens outside source control.
API usage with Python
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ["APIFY_TOKEN"])run = client.actor("automation-lab/workday-jobs-api-scraper").call(run_input={"careerSiteUrls": ["https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite"],"searchText": "software","maxItems": 20,"includeDetails": True,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["title"], item["jobUrl"])
Use environment variables or a secret manager for the token.
Use with Apify MCP
Add the Actor to Claude Code:
claude mcp add --transport http apify \"https://mcp.apify.com?tools=automation-lab/workday-jobs-api-scraper"
Claude Desktop MCP setup
Add this server entry to your Claude Desktop configuration:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=automation-lab/workday-jobs-api-scraper"}}}
Cursor MCP setup
Add the same mcpServers.apify.url entry in Cursor's MCP settings.
VS Code MCP setup
Add the HTTP URL to your VS Code MCP server configuration, then enable the Apify server for your workspace.
Example prompts:
- “Search NVIDIA's Workday career site for software roles and return the first 20.”
- “Collect list-level jobs from these three Workday career-site URLs.”
- “Run this Workday vacancy collection every morning and compare stable dedupe keys.”
MCP clients still use the same Actor input and pricing contract.
Reliability, retries, and limits
The Actor retries transient network failures, HTTP 429 responses, server errors, and Workday maintenance redirects up to three attempts with backoff.
Deterministic invalid URLs and client errors are not retried blindly.
Detail requests run with bounded concurrency. A failed detail request keeps the useful list-level record rather than discarding the vacancy.
A failed employer does not stop other employers in the same run. The logs identify any failed career site.
The run fails when every supplied career site fails.
Workday can change or temporarily disable its public endpoints without notice.
Responsible use and legality
This Actor accesses public employer career-site data without logging in.
You are responsible for ensuring that your collection and downstream use comply with applicable laws, the source site's terms, and contractual obligations.
Avoid collecting more frequently than your use case requires.
Do not use output to discriminate unlawfully, misrepresent an employer, spam applicants, or republish personal data without a lawful basis.
Job descriptions can contain employer trademarks and copyrighted text. Preserve attribution and use the data responsibly.
This Actor does not bypass access controls or retrieve candidate accounts, application status, or private recruiting data.
Troubleshooting
Why does my URL fail validation?
Use the career-site board URL, not a company homepage or individual job page.
The host must end in .myworkdayjobs.com and include a Workday shard such as .wd5..
Why are description fields null?
Enable includeDetails. Some employers do not expose every detail field even when detail fetching is enabled.
Why did the run return fewer records than maxItems?
The native search may have fewer matches, duplicate paths may be removed, or one employer may have failed. Review the log and dataset.
Why did the whole run fail?
Every supplied career site failed validation or its public endpoint was unavailable after retries. Check the URLs and try again after a documented Workday maintenance window.
Can it check my Workday application status?
No. Application status requires a private candidate account and is outside this Actor's public vacancy scope.
Does it need a proxy?
No proxy is configured. The Actor uses direct HTTP and does not expose an automatic paid fallback.
Related job data Actors
- LinkedIn Jobs Scraper for public LinkedIn job discovery.
- Greenhouse Jobs Scraper for employer boards hosted on Greenhouse.
- Multi-ATS Company Jobs Scraper when you need broader ATS coverage from one workflow.
Use this Actor when your targets are known public Workday career sites and you want native Workday fields with stable source paths.
FAQ
Can I supply several employers?
Yes. Add up to 50 career-site URLs. maxItems is shared across the combined run.
Can I request only remote jobs?
Use searchText if the employer's native search recognizes “remote,” then verify the returned location and remoteType fields. There is no guaranteed cross-tenant remote facet.
Can I scrape an individual job URL?
No. Supply the career-site board URL and use a restrictive search or small result limit.
Does the Actor remove closed jobs from an old dataset?
No. Every run gets its own default dataset. Compare scheduled-run datasets to detect removals.
Are job records charged when a detail request fails?
Yes, if the useful list-level vacancy is saved. Details do not have a separate charge event.
Is an empty search an error?
No. A valid career site with no matching jobs completes with zero job events. An invalid or unavailable endpoint is treated as an error instead.