Workday Jobs Scraper avatar

Workday Jobs Scraper

Under maintenance

Pricing

Pay per event

Go to Apify Store
Workday Jobs Scraper

Workday Jobs Scraper

Under maintenance

Scrape job postings from any Workday-powered career site (*.myworkdayjobs.com) via Workday's own internal JSON API — no login, no browser required. Supply career-site URLs or explicit tenant/dc/site objects; get titles, locations, req IDs, and optional full descriptions.

Pricing

Pay per event

Rating

0.0

(0)

Developer

DevilScrapes

DevilScrapes

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

5 hours ago

Last modified

Categories

Share


🎯 What this 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.

🔥 Features

  • 🛡️ 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.

⚙️ How to use it

  1. Click Try for free at the top of the Store listing.
  2. Add one or more Career sites — a bare URL like nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite, or a {tenant, dc, site} object.
  3. Optionally set Search text, a Location filter, Max results per site (0 = all), and toggle Include description.
  4. Click Start. Rows stream into the dataset as each site paginates.
  5. Export from Storage → Dataset as JSON, CSV, or Excel — or pull via the Apify API.

📥 Input

FieldTypeRequiredDefaultNotes
careerSitesarray1–1000 Workday career-site URLs or {tenant, dc, site} objects. Mix freely.
searchTextstringnonullFree-text keyword passed verbatim to Workday's own search.
locationFilterstringnonullHuman-readable location, matched against each tenant's live facet tree.
maxResultsPerSiteintegerno0Cap rows emitted per site; 0 = all.
includeDescriptionbooleannofalseFetch each posting's full description + start date + time type + req ID (one extra call per job).
proxyConfigurationobjectno{"useApifyProxy": true}Apify Proxy configuration.

Example input

{
"careerSites": [
"nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite"
],
"maxResultsPerSite": 25,
"includeDescription": true,
"proxyConfiguration": { "useApifyProxy": true }
}

📤 Output

One dataset item per job posting. Fields marked (detail) are populated only when includeDescription is on.

FieldTypeNotes
job_idstringWorkday externalPath; unique within one company / dc / site.
titlestringJob title.
locationstring | nullPrimary listed location.
additional_locationsarrayExtra locations (detail).
posted_on_textstring | nullWorkday's relative "Posted On" label, e.g. Posted Today.
start_datestring | nullISO YYYY-MM-DD (detail).
time_typestring | nulle.g. Full time (detail).
job_req_idstring | nullEmployer requisition ID (detail).
urlstringCanonical public posting URL.
companystringTenant, lowercased.
dcstringWorkday data-center shard, e.g. wd5.
sitestringCareer-site path segment.
description_htmlstring | nullFull posting body (detail).
scraped_atstringUTC ISO-8601 fetch timestamp.

Example output

{
"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

Pay-Per-Event — you're charged only when these fire:

EventUSDWhat it covers
actor-start$0.005One-off warm-up per run
result$0.0015Per job posting written to the dataset

Example: 1 000 postings ≈ $1.51. No subscription, no minimum, no card to start — Apify gives every new account $5 of free credit.

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

❓ FAQ

Do I need a Workday account or API key? No — every field comes from the same public JSON endpoint the career-site search box already calls.

Does one run handle several companies? Yes. Put multiple career sites in careerSites (URLs and {tenant, dc, site} objects can be mixed) and every row comes back identically shaped, tagged with company / dc / site.

How do I find a company's tenant and data center? They're in the career-site URL: https://{tenant}.{dc}.myworkdayjobs.com/{site}. Paste that URL directly — no need to split it yourself.

Why doesn't maxResultsPerSite change the price? You're charged per row written, not per HTTP call — so turning on descriptions (extra calls) or capping results doesn't change the per-result rate.

Is this legal? We fetch public, unauthenticated job-posting data that employers publish for candidates to browse. No login, no private endpoints.

💬 Your feedback

Spotted a bug, hit a tenant that behaves differently, or need an extra field? Open an issue on the Actor's Issues tab in Apify Console — we ship fixes weekly and read every report.


Hiring intel across the whole ATS landscape? These siblings cover the other major job-board platforms — same keyless, pay-per-result approach:

Browse the full fleet at apify.com/DevilScrapes.