Workday Jobs Scraper — Company Careers, No API Key avatar

Workday Jobs Scraper — Company Careers, No API Key

Pricing

from $1.00 / 1,000 job results

Go to Apify Store
Workday Jobs Scraper — Company Careers, No API Key

Workday Jobs Scraper — Company Careers, No API Key

Workday jobs scraper: live openings from any company hiring through Workday. Paste a myworkdayjobs.com careers URL or just a company name - get title, location, salary (parsed, annualized), exact posting date, requisition ID and full description. Only-new-jobs mode turns a schedule into a job alert.

Pricing

from $1.00 / 1,000 job results

Rating

0.0

(0)

Developer

Flash Scrape

Flash Scrape

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 hours ago

Last modified

Categories

Share

Live job openings from any company that hires through Workday — NVIDIA, Salesforce, Adobe and tens of thousands of others. Paste the company's myworkdayjobs.com careers URL (always works) or just type a company name like nvidia (auto-discovered), and get every live posting as a clean row: title, location, remote, employment type, salary range parsed from the posting and annualized, exact posting date, requisition ID and the full description.

No API key, no login, no proxy, no headless browser — the actor calls the same public JSON endpoint the company's own careers page uses, so the data is exactly what a candidate sees, at the moment you run it.

Also hiring on Greenhouse, Lever or Ashby? → ATS Job Scraper. Need LinkedIn, Indeed and Glassdoor too — merged and deduplicated across 12 boards with only-new-jobs monitoring? → Multi Job Board Scraper

What you get

One row per live opening. Measured on the default run (NVIDIA + Salesforce + Adobe, 100 rows, 2026-08-15):

columnfillnotes
company, tenant, site100%which careers site the row came from
title, location, url100%canonical public posting URL
employment_type100%"Full time" / "Part time" (from the posting detail)
job_req_id100%the requisition ID recruiters use (e.g. R171155)
posted_at100%exact date from the posting detail (e.g. 2026-08-14)
posted_text100%Workday's own wording ("Posted Yesterday")
description, description_snippet100%full text + first 300 chars
salary_min / salary_max / salary_currency / salary_interval33%only when the posting itself states a range — parsed from the text, hourly/monthly figures annualized, never guessed
remote34%true when the posting says remote; null when there is no evidence — never guessed

Example row (real, from the default run):

{
"company": "adobe",
"tenant": "adobe",
"site": "external_experienced",
"title": "Senior Product Manager",
"location": "San Jose",
"remote": null,
"employment_type": "Full time",
"job_req_id": "R171155",
"salary_min": 165600,
"salary_max": 239725,
"salary_currency": "USD",
"salary_interval": "yearly",
"url": "https://adobe.wd5.myworkdayjobs.com/en-US/external_experienced/job/San-Jose/Senior-Product-Manager_R171155",
"source": "workday",
"posted_at": "2026-08-14",
"posted_text": "Posted Yesterday",
"description_snippet": "About the role – Adobe.com reaches millions of customers…",
"description": "…full posting text…"
}

Quick start

Run it with no input at all — you get up to 100 live jobs from the three sample companies. Then put your own targets in:

{
"companies": ["nvidia", "coinbase"],
"workdayUrls": ["https://adobe.wd5.myworkdayjobs.com/en-US/external_experienced"],
"searchText": "machine learning",
"maxItems": 200
}

URL or name? A pasted myworkdayjobs.com URL always works — it names the tenant and site exactly. A bare company name is auto-discovered (the actor probes Workday's hosts and the site slugs customers actually use, and caches the answer for future runs); discovery is best-effort — when it can't find the site, the run tells you exactly which company to paste a URL for, and never bills you for it.

Input reference

fielddefaultwhat it does
companies2-company sampleCompany names, auto-discovered. Your list replaces the sample entirely.
workdayUrls1-URL sampleAny myworkdayjobs.com URL of the careers site — the reliable path.
searchText""Searched server-side by Workday itself, like the careers page's own search box.
locationContains""Keep only jobs whose location contains this text. Applied before billing.
remoteOnlyfalseKeep only jobs with remote evidence (location/title/posting flag). Never guessed.
postedWithinDays0 (off)Keep only jobs posted in the last N days ("30+ Days Ago" counts as 31; undated jobs are kept, never guessed away).
onlyNewJobsfalseJob-alert mode — see below.
maxItems100Total cap across ALL companies, split round-robin so one giant tenant can't eat the budget. Your cost ceiling.
fetchDescriptionstrueFetch each delivered job's detail: full description, exact date, employment type, req ID, salary. One extra request per delivered row — same price per row.

Every filter runs before billing — a filtered job is never charged.

🔔 Job alerts: onlyNewJobs + a schedule

Schedule the actor (daily or hourly) with onlyNewJobs: true and the same companies + filters:

  • the first run is the baseline — it delivers everything and says so;
  • every later run delivers only postings not seen before;
  • a run where nothing is new delivers nothing, bills nothing, and says "Nothing new" plainly.

Watch memory lives in a named key-value store (workday-jobs-monitor) in your own account, pruned automatically (90 days / 50k keys). Point the run at Slack/email with a webhook and you have a hiring-signal feed for sales, recruiting or job hunting — companies posting new roles are companies with budget.

Use it from your code

// JavaScript — apify-client
const { ApifyClient } = require('apify-client');
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('flash_scraper/workday-jobs-scraper').call({
companies: ['nvidia'], searchText: 'engineer', maxItems: 100,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
# Python — apify-client
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("flash_scraper/workday-jobs-scraper").call(run_input={
"companies": ["nvidia"], "searchText": "engineer", "maxItems": 100})
items = client.dataset(run["defaultDatasetId"]).list_items().items
# curl — run synchronously and get the dataset back
curl -X POST "https://api.apify.com/v2/acts/flash_scraper~workday-jobs-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"companies": ["nvidia"], "maxItems": 50}'

n8n / Make / Zapier

All three have a native Apify node/module: pick Run actorflash_scraper/workday-jobs-scraper, pass the JSON input above, and read the default dataset when the run finishes. The onlyNewJobs mode pairs perfectly with a schedule trigger — new postings flow straight into a Slack message, a Google Sheet or your CRM, and quiet days cost you nothing.

Honest limits

  • Workday customers only. If a company hires through Greenhouse/Lever/Ashby, use ATS Job Scraper; for LinkedIn/Indeed/Glassdoor use Multi Job Board Scraper.
  • Bare-name discovery is best-effort. It resolves common setups (measured: nvidia, salesforce, spotify-style slugs); unusual site names need the careers URL pasted once — the run names exactly which company needs it.
  • Custom career domains (careers.company.com) hide the tenant — paste the myworkdayjobs.com address that page actually loads.
  • Salary only when stated. ~1 in 3 postings on the sample companies state a range (mostly US postings, where it's legally required); rows without one carry null, never a guess.
  • remote is evidence-based: true only when the posting says so, null otherwise.
  • Workday reports posting age coarsely past 30 days ("Posted 30+ Days Ago"); with fetchDescriptions on (the default) posted_at is the exact date from the posting detail.