Workday Jobs API & Scraper: All Jobs from Any Workday Site avatar

Workday Jobs API & Scraper: All Jobs from Any Workday Site

Pricing

$1.50 / 1,000 jobs

Go to Apify Store
Workday Jobs API & Scraper: All Jobs from Any Workday Site

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

Local Wire

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Features

Limited permissions

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 in jobId, and the company.
  • The role: title and Workday's time type ("Full time", "Part time") normalised into employmentType.
  • Where: every location in locations, the ISO country code from Workday's own country field, a remote flag and workplaceType where the posting says remote or hybrid.
  • The posting: the full description as plain text (descriptionText), optionally as HTML, plus jobUrl and applyUrl.
  • Dates: postedAt (the posting's start date) and scrapedAt.
  • Monitor fields: changeType (new or removed) and firstSeenAt in 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"
}
  • id is stable across runs, so you can de-duplicate or upsert.
  • company is the tenant name from the URL with a capital letter ("Nvidia", "Salesforce").
  • country and countries come from Workday's own country field on the posting, with extra locations read from the location text.
  • postedAt is 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, team and 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

FieldTypeDefaultWhat it does
companieslist of textrequiredWorkday careers URLs. Boards on the other supported platforms can be mixed in. Up to 1,000 per run.
keywordslist of textnoneKeep 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.
searchDescriptionstrue/falsefalseAlso match keywords against the full description.
excludeKeywordslist of textnoneDrop jobs whose title contains ANY of these.
countrieslist of textnoneKeep jobs in ANY of these countries. ISO codes or names: GB, UK, Germany, United States.
locationslist of textnoneKeep jobs whose location text contains ANY of these, e.g. London, Remote.
remoteOnlytrue/falsefalseKeep only jobs whose posting or location says remote.
departmentslist of textnoneKeep jobs whose department or team contains ANY of these. Workday postings have no department, so this is for the other platforms.
employmentTypeslistnonefull-time, part-time, contract, temporary, internship, apprenticeship, other. Jobs with no published type are dropped when this is set.
postedWithinDaysnumber 1-365noneKeep jobs posted in this many days. Jobs without a date are kept.
postedSincedatenoneKeep jobs posted on or after this date, e.g. 2026-11-01. Overrides postedWithinDays.
atsPlatformslist["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.
monitorModetrue/falsefalseReturn only jobs that are new since the last run.
emitRemovedtrue/falsefalseIn monitor mode, also return jobs that have disappeared (changeType: "removed").
monitorEmitExistingOnFirstRuntrue/falsetrueOn a monitor's first run, return the current jobs. Set to false to record them silently and pay nothing for the backlog.
monitorStoreNametextworkday-jobs-monitorName of the key-value store that holds the monitor's memory. Use one name per monitor. Letters, digits and hyphens.
includeDescriptionstrue/falsetrueInclude the description as plain text. Workday still reads each posting when this is off, because the list has no country or date.
includeHtmltrue/falsefalseAlso include the description as HTML in descriptionHtml.
maxJobsPerCompanynumber 1-10,0001000Stop reading a site after this many matching jobs.
maxResultsnumber 1-100,0005000Stop the run after this many jobs in total.
useDetectionCachetrue/falsetrueOnly 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:

  1. 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").
  2. 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 keywords are 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 monitorEmitExistingOnFirstRun to false for 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 emitRemoved see 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 runJobs returnedCost
The pre-filled first run50$0.075
Every engineering job at one large employer400$0.60
All 2,000 open jobs on one Workday site2,000$3.00
A daily monitor of 50 Workday employers that finds 40 new jobs a dayabout 1,200 a monthabout $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 ApifyClient
client = 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.

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. company is 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, maxJobsPerCompany or 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 in OUTPUT and 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:

Other data:

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.