Workday Jobs Scraper icon

Jobs

Workday Jobs Scraper

Scrape job postings from any Workday-powered career site via Workday's own keyless JSON API — titles, locations, req IDs, and full descriptions. One scraper, every tenant.

Free Apify credit covers a first run. No credit card to try.

What this Actor scrapes

A huge share of enterprise career sites run on Workday, and every one of them is backed by the same internal JSON endpoint (/wday/cxs/{tenant}/{site}/jobs) that the page's own search box calls. This Actor talks to that endpoint directly: point it at one or more Workday career sites — as a URL like https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite, or as an explicit {tenant, dc, site} object — and it paginates the full board, optionally fetches each posting's detail, and normalizes everything into one row schema. One scraper, every Workday tenant.

What we handle for you

  • 🛡️ Browser fingerprint impersonationcurl-cffi presents a real Chrome TLS/H2 handshake, so the endpoint sees a browser, not a bare Python client. Workday sits behind Cloudflare; a convincing fingerprint is what keeps requests flowing.
  • 🔁 Retries with exponential backoff on 408 / 429 / 5xx, up to 5 attempts, Retry-After honoured — a batch that hits a blip recovers instead of crashing mid-run.
  • 🌐 Proxy session rotation via Apify Proxy — a fresh exit IP when you're pulling many tenants or deep boards.
  • 🏢 One schema across every tenant — mix career-site URLs and {tenant, dc, site} objects in a single run (up to 1 000); rows come back identically shaped, tagged with company, dc, and site.
  • 📝 Optional full descriptions — flip includeDescription on for the complete posting body plus start date, time type, and req ID; leave it off for a fast titles-and-locations pull.
  • 🧊 Clean, typed rows — Pydantic-validated, ISO-8601 timestamps, stable IDs. Export JSON / CSV / Excel straight from the Apify Console.

Use cases

  • Recruiting & talent intelligence — track what a target employer is hiring for, where, and how fast their reqs turn over.
  • Job-board aggregation — add Workday coverage alongside Greenhouse / Lever / Ashby, pulling fresh postings from dozens of employers in one run.
  • Labor-market research — sample hiring demand across an industry by role, location, or time type.
  • Competitive hiring intel — watch a competitor's open reqs to infer team growth and roadmap direction.
  • ATS data pipelines — wire structured job rows into your own CRM, dashboard, or n8n / Make workflow on a schedule.

Input

Paste this into the Apify Console, or send it as the run input over the API. Proxy settings are on by default; you rarely need to touch them.

FieldTypeRequiredWhat it does
careerSites array yes List of Workday career sites to scrape. Each entry may be a URL, e.g. "nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite" (tenant/dc/site are parsed from the host and path), or an explicit object {"tenant":…
searchText string no Free-text query, passed verbatim as Workday's own searchText on every page. Leave empty to return every posting.
locationFilter string no Human-readable location, e.g. "Austria" or "Remote". Resolved per-site against that site's own live facet tree (case-insensitive substring match). Leave empty to skip.
maxResultsPerSite integer no Cap job postings collected per careerSites entry, applied after locationFilter/searchText narrowing. Defaults to 100. Set to 0 to collect every available posting — large career sites can run to thousands of rows, so…
includeDescription boolean no When enabled, fetch the full job description (HTML) plus start date, time type, requisition ID, and additional locations for every emitted job. Doubles HTTP calls per job.
{
  "careerSites": [
    "nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite"
  ],
  "maxResultsPerSite": 25,
  "includeDescription": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}

Output

One row per result, schema-validated before it is written. Export JSON, CSV, Excel or XML from the run, or read it over the API.

job_idtitlelocationposted_on_texttime_typejob_req_idurlcompanydescription_html

{
  "job_id": "/job/US-CA-Santa-Clara/Senior-Factory-Support-Firmware-Engineer_JR1998421",
  "title": "Senior Factory Support Firmware Engineer",
  "location": "US, CA, Santa Clara",
  "additional_locations": [],
  "posted_on_text": "Posted 5 Days Ago",
  "start_date": null,
  "time_type": "Full time",
  "job_req_id": "JR1998421",
  "url": "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite/job/US-CA-Santa-Clara/Senior-Factory-Support-Firmware-Engineer_JR1998421",
  "company": "nvidia",
  "dc": "wd5",
  "site": "NVIDIAExternalCareerSite",
  "description_html": "NVIDIA is seeking a Senior Factory Support Firmware Engineer...",
  "scraped_at": "2026-07-21T11:40:00Z"
}

Pricing

EventPriceWhen
Actor start$0.20Once per run, covers warm-up and proxy session setup.
Result emitted$0.0015Per result written to the dataset.

You pay only for results that land. Cap any run with maxTotalChargeUsd. See pricing & billing for worked examples.

Limitations

  • Public career sites only — external Workday career sites, not SSO/authenticated internal portals.
  • No salary/compensation field — Workday doesn't expose structured comp data, so we don't invent it.
  • Descriptions cost an extra fetchincludeDescription adds one detail request per posting (it changes speed, not the per-result price). Leave it off for the fastest pull.
  • Point-in-time snapshot — returns the board as it stands now; schedule recurring runs to track changes over time.

Ready to run it?

Open the listing on Apify, paste the input above, and watch rows land. If it ever breaks, it is our problem before it is yours.

Read more

Articles about this Actor

Related Actors

Teams that run this also run