Workday Jobs Scraper
Under maintenancePricing
from $1.50 / 1,000 results
Workday Jobs Scraper
Under maintenanceScrape 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
from $1.50 / 1,000 results
Rating
0.0
(0)
Developer
DevilScrapes
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days 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 impersonation —
curl-cffipresents 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-Afterhonoured — 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 withcompany,dc, andsite. - 📝 Optional full descriptions — flip
includeDescriptionon 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
- Click Try for free at the top of the Store listing.
- Add one or more Career sites — a bare URL like
nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite, or a{tenant, dc, site}object. - Optionally set Search text, a Location filter, Max results per site (
0= all), and toggle Include description. - Click Start. Rows stream into the dataset as each site paginates.
- Export from Storage → Dataset as JSON, CSV, or Excel — or pull via the Apify API.
📥 Input
| Field | Type | Required | Default | Notes |
|---|---|---|---|---|
careerSites | array | ✅ | — | 1–1000 Workday career-site URLs or {tenant, dc, site} objects. Mix freely. |
searchText | string | no | null | Free-text keyword passed verbatim to Workday's own search. |
locationFilter | string | no | null | Human-readable location, matched against each tenant's live facet tree. |
maxResultsPerSite | integer | no | 0 | Cap rows emitted per site; 0 = all. |
includeDescription | boolean | no | false | Fetch each posting's full description + start date + time type + req ID (one extra call per job). |
proxyConfiguration | object | no | {"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.
| Field | Type | Notes |
|---|---|---|
job_id | string | Workday externalPath; unique within one company / dc / site. |
title | string | Job title. |
location | string | null | Primary listed location. |
additional_locations | array | Extra locations (detail). |
posted_on_text | string | null | Workday's relative "Posted On" label, e.g. Posted Today. |
start_date | string | null | ISO YYYY-MM-DD (detail). |
time_type | string | null | e.g. Full time (detail). |
job_req_id | string | null | Employer requisition ID (detail). |
url | string | Canonical public posting URL. |
company | string | Tenant, lowercased. |
dc | string | Workday data-center shard, e.g. wd5. |
site | string | Career-site path segment. |
description_html | string | null | Full posting body (detail). |
scraped_at | string | UTC 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:
| Event | USD | What it covers |
|---|---|---|
actor-start | $0.005 | One-off warm-up per run |
result | $0.0015 | Per 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 fetch —
includeDescriptionadds 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.