Workday Jobs API & Scraper: All Jobs from Any Workday Site
Pricing
$1.50 / 1,000 jobs
Workday Jobs API & Scraper: All Jobs from Any Workday Site
All open jobs from any company's Workday career site (myworkdayjobs.com), with full descriptions, locations, country codes, remote flags and dates in one clean schema. Paste the careers URL; filter by keyword, country and remote; monitor mode returns only new or removed jobs.
Pricing
$1.50 / 1,000 jobs
Rating
0.0
(0)
Developer
Local Wire
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Features
Share
Workday Jobs API: every job from a Workday career site
Get every open job from any company's Workday career site as structured JSON for $1.50 per 1,000 jobs ($0.0015 per job, no start fee). Paste the careers URL (…myworkdayjobs.com/<Site>) and this Workday jobs API returns one record per posting: title, locations, ISO country code, remote flag, time type, posting date, requisition id, the full description as plain text, and the job and apply links.
It reads the same public JSON endpoints that the Workday career site itself calls in your browser, with no login, no proxies and no browser automation. Monitor mode remembers each site's jobs and returns only what is new since the last run, which is what hiring alerts, sales signals and competitor tracking need.
This is the Workday listing of our Career Site Jobs API: the same code, schema and price, so you can mix Workday sites with boards on Greenhouse, Lever, Ashby, SmartRecruiters, SAP SuccessFactors, Oracle Recruiting, Workable, Recruitee, Personio and Pinpoint in one run.
What you get
One record per Workday job posting:
- Identity: a stable
id(workday:tenant:requisitionId), the requisition id injobId, and the company. - The role:
titleand Workday's time type ("Full time", "Part time") normalised intoemploymentType. - Where: every location in
locations, the ISO country code from Workday's own country field, aremoteflag andworkplaceTypewhere the posting says remote or hybrid. - The posting: the full description as plain text (
descriptionText), optionally as HTML, plusjobUrlandapplyUrl. - Dates:
postedAt(the posting's start date) andscrapedAt. - Monitor fields:
changeType(neworremoved) andfirstSeenAtin monitor mode.
A full record looks like this:
{"id": "workday:nvidia:JR2028861","ats": "workday","atsName": "Workday","company": "Nvidia","companySlug": "nvidia","jobId": "JR2028861","title": "Senior Product Marketing Manager, AI Infrastructure","department": null,"team": null,"employmentType": "full-time","employmentTypeRaw": "Full time","location": "US, CA, Santa Clara","locations": ["US, CA, Santa Clara"],"country": "US","countries": ["US"],"remote": false,"workplaceType": null,"salaryMin": null,"salaryMax": null,"salaryCurrency": null,"salaryPeriod": null,"salaryText": null,"descriptionText": "We are looking for a Senior Product Marketing Manager focused on AI infrastructure solutions…","descriptionHtml": null,"jobUrl": "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite/job/US-CA-Santa-Clara/Senior-Product-Marketing-Manager--AI-Infrastructure_JR2028861","applyUrl": "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite/job/US-CA-Santa-Clara/Senior-Product-Marketing-Manager--AI-Infrastructure_JR2028861/apply","postedAt": "2026-11-07T00:00:00.000Z","updatedAt": null,"changeType": null,"firstSeenAt": null,"input": "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite","detectedBy": "url","scrapedAt": "2026-11-07T20:55:32.471Z"}
idis stable across runs, so you can de-duplicate or upsert.companyis the tenant name from the URL with a capital letter ("Nvidia", "Salesforce").countryandcountriescome from Workday's own country field on the posting, with extra locations read from the location text.postedAtis the posting's start date. The job list only says "Posted 30+ Days Ago" for older roles, so the date on the posting is used.department,teamand the salary fields stay empty: Workday's public postings do not carry them.- Descriptions are cut at 50,000 characters.
The dataset has three table views: Overview, Salaries and Monitor changes. The run's key-value store also gets an OUTPUT record that lists each site: how many jobs were listed, matched and returned, and any site that could not be read.
Quick start
Only companies is required. This input returns up to 50 jobs from two Workday sites and costs at most $0.075:
{"companies": ["https://adobe.wd5.myworkdayjobs.com/external_experienced","https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite"],"maxJobsPerCompany": 25,"maxResults": 50}
In Apify Console the form opens with these values already filled in, so you can press Start straight away. When you call the Actor from the API and leave the limits out, they default to 1,000 jobs per company and 5,000 jobs per run.
New remote engineering roles at three Workday employers, every day:
{"companies": ["https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite","https://salesforce.wd12.myworkdayjobs.com/External_Career_Site","https://adobe.wd5.myworkdayjobs.com/external_experienced"],"keywords": ["engineer"],"remoteOnly": true,"monitorMode": true,"monitorStoreName": "workday-remote-engineering"}
Save the input as a Task, add a daily Schedule, and each run returns only the new jobs.
Which companies use Workday?
Many large employers: NVIDIA, Salesforce and Adobe, and plenty of banks, insurers, retailers, universities and public bodies. If a company's "Careers" link lands on <company>.wd1…wd12.myworkdayjobs.com/<Site> (or myworkdaysite.com/recruiting/<company>/<Site>), it uses Workday: paste that URL.
Any page of the site works, including a link to a single job and localised pages such as /en-US/<Site>. A Workday site cannot be found from a company name alone, because the address contains a data-centre number and a site name that cannot be guessed.
Input reference
| Field | Type | Default | What it does |
|---|---|---|---|
companies | list of text | required | Workday careers URLs. Boards on the other supported platforms can be mixed in. Up to 1,000 per run. |
keywords | list of text | none | Keep jobs whose title contains ANY of these, matched at the start of a word and ignoring case and accents. Also sent to Workday's own search, so fewer postings are read. |
searchDescriptions | true/false | false | Also match keywords against the full description. |
excludeKeywords | list of text | none | Drop jobs whose title contains ANY of these. |
countries | list of text | none | Keep jobs in ANY of these countries. ISO codes or names: GB, UK, Germany, United States. |
locations | list of text | none | Keep jobs whose location text contains ANY of these, e.g. London, Remote. |
remoteOnly | true/false | false | Keep only jobs whose posting or location says remote. |
departments | list of text | none | Keep jobs whose department or team contains ANY of these. Workday postings have no department, so this is for the other platforms. |
employmentTypes | list | none | full-time, part-time, contract, temporary, internship, apprenticeship, other. Jobs with no published type are dropped when this is set. |
postedWithinDays | number 1-365 | none | Keep jobs posted in this many days. Jobs without a date are kept. |
postedSince | date | none | Keep jobs posted on or after this date, e.g. 2026-11-01. Overrides postedWithinDays. |
atsPlatforms | list | ["workday"] | Which platforms to try when a company is given by name or website. Workday sites are always read from their URL; add other platforms here to look companies up by name on them. |
monitorMode | true/false | false | Return only jobs that are new since the last run. |
emitRemoved | true/false | false | In monitor mode, also return jobs that have disappeared (changeType: "removed"). |
monitorEmitExistingOnFirstRun | true/false | true | On a monitor's first run, return the current jobs. Set to false to record them silently and pay nothing for the backlog. |
monitorStoreName | text | workday-jobs-monitor | Name of the key-value store that holds the monitor's memory. Use one name per monitor. Letters, digits and hyphens. |
includeDescriptions | true/false | true | Include the description as plain text. Workday still reads each posting when this is off, because the list has no country or date. |
includeHtml | true/false | false | Also include the description as HTML in descriptionHtml. |
maxJobsPerCompany | number 1-10,000 | 1000 | Stop reading a site after this many matching jobs. |
maxResults | number 1-100,000 | 5000 | Stop the run after this many jobs in total. |
useDetectionCache | true/false | true | Only matters for companies given by name or website on the other platforms: remembers the board found for 30 days. |
Invalid input fails at once with a message that lists every problem, so a person or an AI agent can fix it in one go.
How the Workday jobs API works
Every Workday career site is a web app that loads its postings from JSON endpoints on its own host. The Actor calls the same two endpoints:
- The job search, which returns 20 postings a page with a title, a link, a location summary ("2 Locations") and a relative date ("Posted 8 Days Ago").
- The posting, which has the real content: description, every location, the country, the time type, the start date and the requisition id.
Because the list has no country and no real date, the Actor reads each posting, at about 0.4 seconds each. Two things keep that fast:
- Your
keywordsare passed to Workday's own search, one search per keyword, so a keyword run on a 2,000-job site reads only the postings that can match. A posting found by two keywords is read once. - In monitor mode, later runs return only postings that were not there before.
A site with no filters and 2,000 open jobs takes around 15 minutes. Up to 10,000 postings are read per site and search.
Monitor mode: only new Workday jobs
With monitorMode on, the Actor remembers each site's jobs in a key-value store in your account (named by monitorStoreName). Each run returns only jobs it has not returned before, and with emitRemoved also the jobs that have gone since the last run.
- Use one monitor name per filter set. Changing the filters starts that monitor again.
- To start a monitor without paying for the existing backlog, set
monitorEmitExistingOnFirstRuntofalsefor the first run. - If a run stops early (a limit or your maximum cost), removals are not reported for that site, and jobs that were found but not returned are kept for the next run.
Use cases
- Enterprise hiring signals. Workday is where large employers post. Track which accounts are opening roles, in which countries and for which functions.
- New-job alerts. A daily monitor of a watchlist returns only the postings added since yesterday.
- Job boards and aggregators. Add direct-from-employer enterprise jobs to a niche board, in the same schema as ten other platforms.
- Competitor and market research. Count open roles by country, by keyword or over time, and with
emitRemovedsee when roles close. - AI agents. A small, predictable JSON schema that an agent can call as a tool through Apify's MCP server.
Pricing
$0.0015 per job returned, which is $1.50 per 1,000 jobs. There is no start fee and no monthly rental. It is the same price as the Career Site Jobs API.
You pay for each record the Actor returns, including removed records in monitor mode. You pay nothing for jobs that your filters drop, for jobs a monitor has already returned, or for sites that cannot be read.
| What you run | Jobs returned | Cost |
|---|---|---|
| The pre-filled first run | 50 | $0.075 |
| Every engineering job at one large employer | 400 | $0.60 |
| All 2,000 open jobs on one Workday site | 2,000 | $3.00 |
| A daily monitor of 50 Workday employers that finds 40 new jobs a day | about 1,200 a month | about $1.80 a month |
To cap spending, set Max cost per run in the run options, or lower maxResults. The Actor stops cleanly at the limit and says so in its status message.
Use it from the API
Run the Actor and get the jobs back in one request:
curl -X POST "https://api.apify.com/v2/acts/localwire~workday-jobs/run-sync-get-dataset-items" \-H "Authorization: Bearer <YOUR_APIFY_TOKEN>" \-H "Content-Type: application/json" \-d '{"companies": ["https://salesforce.wd12.myworkdayjobs.com/External_Career_Site"], "keywords": ["account executive"], "countries": ["GB"], "maxResults": 50}'
That endpoint waits up to five minutes. For a longer run, such as a whole site without keywords, start it with POST /v2/acts/localwire~workday-jobs/runs and read the run's dataset when it has finished.
With the Apify client for JavaScript:
import { ApifyClient } from "apify-client";const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor("localwire/workday-jobs").call({companies: ["https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite"],keywords: ["engineer"],maxResults: 100,});const { items } = await client.dataset(run.defaultDatasetId).listItems();
With the Apify client for Python:
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("localwire/workday-jobs").call(run_input={"companies": ["https://adobe.wd5.myworkdayjobs.com/external_experienced"],"countries": ["DE", "GB"],"maxResults": 100,})jobs = list(client.dataset(run["defaultDatasetId"]).iterate_items())
Results can be downloaded from the dataset as JSON, CSV, Excel, XML or JSON Lines.
Use it from an AI agent (MCP)
Apify's hosted MCP server is at https://mcp.apify.com. Add it to any MCP client that supports remote servers and sign in with your Apify account when the browser opens (or send an Authorization: Bearer <APIFY_TOKEN> header).
To give the agent only this Actor as a tool, use this server URL:
https://mcp.apify.com?tools=localwire/workday-jobs
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=localwire/workday-jobs"}}}
The agent then sees the Actor's input fields with their descriptions and defaults. Only companies is required, and for Workday it has to be the careers URL, not a company name. Tell the agent to set maxResults (for example 50), because the default is 5,000 jobs. Questions that work well:
- "List the remote roles NVIDIA posted on its Workday site this week."
- "How many open jobs does Salesforce have in the UK, and in which cities?"
- "Which of these five Workday employers are hiring data engineers?"
Integrations
Runs can be started on a schedule or by another system, and results can be sent on:
- Make, n8n and Zapier have Apify integrations that run an Actor and pass its dataset to the next step, for example to a spreadsheet, a CRM, email or a chat channel.
- Webhooks call your endpoint when a run succeeds or fails.
- LangChain and other agent frameworks can use Apify Actors as tools.
- The Apify API and the JavaScript and Python clients cover everything else.
FAQ
Is there a Workday jobs API?
Workday does not publish a documented public API for third parties to read job postings. Every Workday career site does load its postings from JSON endpoints on its own host, without a login, and this Actor reads those. You give it the careers URL and get every posting as structured data, without writing or maintaining that code yourself.
How do I scrape jobs from myworkdayjobs.com?
Copy the address of the company's Workday careers page, for example https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite, put it in companies and start the run. Add keywords, countries or remoteOnly to narrow it down.
How do I find a company's Workday careers URL?
Open the company's website, follow its "Careers" or "Jobs" link and click through to the job search. If the address bar shows myworkdayjobs.com or myworkdaysite.com, that address is the one to use.
Can I get all jobs from several Workday sites in one run?
Yes. List up to 1,000 URLs in companies. Each job's input field says which entry it came from, and the OUTPUT record summarises every site.
How do I get only new Workday jobs each day?
Turn on monitorMode and schedule the Actor daily. Each run returns, and charges for, only postings it has not returned before.
Does the Workday jobs API return salaries?
No. Workday's public postings have no structured pay field, so the salary fields are empty. Where an employer writes a pay range into the description, it is in descriptionText.
Does it return the department or job family?
No. Workday's public postings do not carry a department, so department and team are empty. Use keywords on the title instead.
How long does a run take?
About 0.4 seconds per posting, plus one request per 20 postings for the list. Fifty jobs take well under a minute; a 2,000-job site with no filters takes around 15 minutes.
How much does it cost to get every job from a Workday site?
$1.50 per 1,000 jobs. A site with 2,000 open jobs costs $3.00; a keyword run that returns 150 of them costs about $0.23.
Does it need proxies, a browser or a login?
No. It makes plain HTTPS requests to the site's public endpoints, identifies itself with its own User-Agent, and never logs in.
Is it legal to collect Workday job postings?
This is not legal advice. Job postings are published by employers for anyone to read, and the Actor reads only public endpoints. You are responsible for how you use the data, including Workday's and the employers' terms and any rules that apply to you.
Limitations
- URL needed. A Workday site cannot be found from a company name.
- One site per URL. A company can have several sites (external, campus, internal). The Actor reads the one in the URL. Internal sites that need a login are not supported.
- No department and no salary. Workday does not publish them in public postings.
- Company name.
companyis derived from the tenant name in the URL, so its capitalisation may differ from the brand's ("Nvidia"). - Speed. About 0.4 seconds per posting. Use keywords,
maxJobsPerCompanyor monitor mode for very large sites. - No bot-protection evasion. The Actor does not use proxies, solve challenges or disguise itself. A request that is refused with HTTP 403 is not retried. A rate limit (HTTP 429) or server error is retried a few times with increasing waits, honouring
Retry-After, and then the Actor gives up on that site, records the error inOUTPUTand moves on to the next. If every site fails, the run fails. - Other platforms. The same input accepts Greenhouse, Lever, Ashby, SmartRecruiters, SuccessFactors, Oracle, Workable, Recruitee, Personio and Pinpoint boards. Their details are in the Career Site Jobs API README.
Data, privacy and terms
Job postings are published by employers for anyone to read. This Actor reads the career site's public endpoints only, never logs in, and does not try to get around any access control or rate limit.
Personal data is kept out of the output. There are no fields for recruiters, hiring managers or contacts. In descriptions, email addresses are replaced with [email removed] and phone numbers in UK, North American and +country code formats with [phone removed], and full UK postcodes are shortened to their district. A number written in an unusual local format, and names that an employer wrote into its own description, can remain.
You are responsible for how you use the data, including the platforms' and employers' terms.
This Actor is not affiliated with or endorsed by Workday, Inc.
More from this developer
Jobs:
- Career Site Jobs API: Workday plus ten more platforms, with lookup by company name.
- Reed.co.uk Jobs Scraper: UK job-board search in the same schema.
- Wellfound Jobs Scraper: startup jobs in the same schema, with pay and equity.
- Hacker News API: stories, comments and structured "Who is hiring?" jobs.
Other data:
- Public Tenders API: UK and EU tenders and contract awards.
- Google Trends Trending Now: trending searches for 125 countries.
- App Store Reviews: reviews, app details and top charts.
- Telegram Channel Scraper: posts from public channels.
- ESPN Sports Data and Flashscore Results & Fixtures: scores, standings and fixtures.
- Eventbrite Scraper and Meetup Scraper: events by place and topic.
- Gumtree Scraper: UK classified listings.
Feedback
Found a Workday site that does not work, or need a field we do not return? Open an issue on the Actor's Issues tab and we will reply within a few days.