Workday Careers MCP server
Registry name: io.github.johnisanerd/workday-careers. Maintained by AlphaOSINT (Apify developer johnvc, GitHub johnisanerd).
What it does
List every job on a company’s Workday careers site with title, location, posted date, full description, pay range when published, employment type, remote status and apply link.
Jobs straight from the employer’s own careers site, including roles that never reach job boards. Use it for hiring-signal research, job monitoring at target companies and job search agents.
Paid service on Apify’s hosted endpoint
This server is not self-hosted. It runs on Apify’s hosted MCP endpoint (mcp.apify.com), which starts the Apify Actor johnvc/workday-careers-api for each tool call. You need an Apify account, and every call is billed to that account at the Actor’s prices below. Apify’s own pricing and terms apply to the account.
| Charge | Price (USD) | What it covers |
|---|---|---|
| Job result | $0.0001 | Charged once per job posting returned to the dataset. Error rows are never charged. |
| Actor start | $0.001 | Charged once when a run starts. |
Prices shown are Apify’s free-plan rates; paid Apify plans get lower per-event prices. Prices change from time to time; the Actor’s page on Apify shows the current ones.
Data source and terms
Employers’ public Workday careers sites (myworkdayjobs.com and myworkdaysite.com). The server returns the data as published at the time of the call. You are responsible for using it in line with the source’s terms and the laws that apply to you. AlphaOSINT is not affiliated with the source.
Endpoint
- Transport: Streamable HTTP
- URL:
https://mcp.apify.com/?tools=johnvc/workday-careers-api - Auth: Apify OAuth, or
Authorization: Bearer <APIFY_TOKEN>
Setup
Claude Code
claude mcp add --transport http workday-careers "https://mcp.apify.com/?tools=johnvc/workday-careers-api"
VS Code (.vscode/mcp.json)
{
"servers": {
"workday-careers": {
"type": "http",
"url": "https://mcp.apify.com/?tools=johnvc/workday-careers-api"
}
}
}
Cursor (~/.cursor/mcp.json)
{
"mcpServers": {
"workday-careers": {
"url": "https://mcp.apify.com/?tools=johnvc/workday-careers-api"
}
}
}
Claude Desktop (Settings → Connectors → Add custom connector, paste the URL). Older versions without remote connectors can bridge through mcp-remote in claude_desktop_config.json:
{
"mcpServers": {
"workday-careers": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://mcp.apify.com/?tools=johnvc/workday-careers-api"
]
}
}
}
Each client opens an Apify sign-in (OAuth) on first use. To use a token instead, send Authorization: Bearer <APIFY_TOKEN> as a header; create one under Apify Console → Settings → API & Integrations.
Tools
| Tool | What it does |
|---|---|
johnvc--workday-careers-api |
Runs the Actor with the parameters below and returns the result rows. |
get-actor-run |
Status of a run started by the tool, for long runs. |
get-dataset-items |
Pages through a run’s full output by datasetId when it is larger than the inline result. |
get-key-value-store-record |
Reads a record a run stored, such as a run report. |
abort-actor-run |
Stops a run. |
Apify’s endpoint adds the four helper tools automatically whenever an Actor tool is loaded.
Parameters of johnvc--workday-careers-api
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
startUrls |
array | yes | [{"url": "https://workday.wd5.myworkdayjobs.com/Workday"}] |
REQUIRED. One or more Workday careers site URLs. Every public form works: https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite, locale variants like https://intel.wd1.myworkdayjobs.com/en-US/External, and the m… |
searchText |
string | "" |
Optional keyword query passed to the site’s own job search (matches titles and descriptions the same way the search box on the careers page does). Leave empty to return every job. | |
maxJobsPerSite |
integer | 0 |
Soft cap on jobs returned per start URL. 0 means all jobs on the site. Useful to keep test runs small and cheap. | |
includeDetails |
boolean | true |
When true (default), the actor opens each job’s detail record to add the full description, exact ISO posted and end dates, employment type, all locations, country, and apply URL. When false, only the fast list fields ar… | |
descriptionFormat |
string: both, html, text | "both" |
Format of the job description fields when details are fetched: ‘html’ keeps the original rich text, ‘text’ returns clean plain text, ‘both’ (default) returns both fields. | |
postedAfter |
string | Optional ISO date filter (YYYY-MM-DD). Only jobs posted on or after this date are returned. Requires ‘Fetch full job details’, because the list endpoint carries only relative dates (‘Posted Today’, ‘Posted 30+ Days Ago’… | ||
detailConcurrency |
integer | 5 |
How many job-detail requests run in parallel (1 to 10, default 5). The actor always paces list pages and backs off politely on rate limits; raise this only for very large sites. |
Example arguments:
{
"helloWorld": 123
}
Output
The tool returns JSON rows with these fields.
| Field | Type | Description |
|---|---|---|
resultType |
string: job, error | Row kind discriminator: ‘job’ for a job posting, ‘error’ for a start URL that could not be scraped. Filter on it to separate data from diagnostics. |
title |
string | The job posting’s title. |
company |
string | Hiring organization name from the job record, falling back to the Workday tenant name. |
tenant |
string | The Workday tenant identifier parsed from the careers URL. Use it to join rows back to a tenant-discovery dataset. |
siteId |
string | The Workday career-site slug within the tenant (one tenant can host several sites). |
sourceUrl |
string | The start URL this row came from, exactly as provided in the input. |
url |
string | Public job posting page URL. |
applyUrl |
string | Direct application URL (the job URL plus /apply). |
jobReqId |
string | The employer’s job requisition ID (for example JR1990000). Stable identifier for deduplication across runs. |
jobPostingId |
string | Workday’s posting slug identifier (detail mode only). |
workdayInternalId |
string | Workday’s internal GUID for the posting (detail mode only). |
externalPath |
string | The posting’s path fragment on the careers site, as returned by the list endpoint. |
locationsText |
string | Location summary as shown on the job card (a single location or e.g. ‘11 Locations’). |
primaryLocation |
string | The posting’s primary location (detail mode only). |
additionalLocations |
array | Every additional location on multi-location postings (detail mode only). |
country |
string | Country of the primary location (detail mode only). |
countryCode |
string | ISO alpha-2 country code of the primary location (detail mode only). |
postedOn |
string | Relative posted date exactly as the careers site shows it. |
postedDate |
string | Exact ISO posting date (detail mode only). |
endDate |
string | ISO date the posting stops accepting applications, when the employer sets one (detail mode only). |
timeLeftToApply |
string | Human-readable time remaining to apply, when the employer sets an end date (detail mode only). |
timeType |
string | Employment time type such as Full Time or Part Time (detail mode only). |
remoteType |
string | Work arrangement label when the site exposes one (for example Remote, Flex, Onsite). |
canApply |
boolean | Whether the posting currently accepts applications (detail mode only). |
descriptionHtml |
string | Full job description as rich HTML (detail mode, when descriptionFormat is html or both). |
descriptionText |
string | Full job description as clean plain text (detail mode, when descriptionFormat is text or both). |
salaryText |
string | Best-effort pay range snippet extracted from the description when the employer publishes one. Null when no range is stated. |
salaryMin |
number | Lower bound of the extracted pay range. Null when no range is stated. |
salaryMax |
number | Upper bound of the extracted pay range. Null when no range is stated. |
salaryCurrency |
string | Currency of the extracted pay range (ISO code where the symbol maps cleanly). Null when no range is stated. |
scrapedAt |
string | UTC timestamp of this run. |
totalJobsOnSite |
integer | Total number of jobs the careers site reported at scrape time (before any max cap or filters). |
errorMessage |
string | Human-readable reason a start URL failed (rows with resultType ‘error’ only). |
Links
- Actor on Apify: johnvc/workday-careers-api
- Data source page on AlphaOSINT: /sources/workday-careers-api/
- All AlphaOSINT MCP servers: /mcp/