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.

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

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).