# Workday Jobs Scraper & Search API (1,300+ Employers) (`saadhazz/workday-jobs-search`) Actor

Search 500,000+ open jobs on 1,300+ Workday career sites (myworkdayjobs.com) by keyword, company, country and date, or scrape any Workday URL. Full descriptions, new-job alerts. $1.50 per 1,000 jobs.

- **URL**: https://apify.com/saadhazz/workday-jobs-search.md
- **Developed by:** [saad hazz](https://apify.com/saadhazz) (community)
- **Categories:** Jobs, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$1.50 / 1,000 jobs

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Workday Jobs Scraper & Search API: 500,000+ jobs from 1,300+ employers

Search open jobs on **1,300+ Workday career sites** (`*.myworkdayjobs.com`) in one run, by job title, company, country and posting date. Or paste any Workday career-site URL and get every open job from it. Employers on Workday include Fortune 500 companies such as NVIDIA, CVS Health, Salesforce, Visa, Novartis, GE HealthCare, 3M and Dollar Tree.

No proxies, no logins, no CAPTCHAs: the Actor uses the same public JSON endpoints each career site loads in your browser.

### What you can do with it

- **Job search across big employers:** "data scientist" jobs posted in the last 7 days at every Workday employer, in Germany or India.
- **Scrape one company's Workday site:** paste `https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite` and list every open job.
- **Daily job alerts:** turn on **Only new jobs since last run**, schedule it every morning and get only new postings.
- **Job boards, recruiting and sales intelligence:** feed a niche job board, track which companies are hiring for a skill, or spot hiring spikes.
- **Full descriptions:** turn on **Include full description and details** for the plain-text description, exact posting date, full/part time, every location and the hiring entity.

### Input examples

Default (no input needed): software engineer jobs posted in the last 7 days at the 300 largest built-in employers (about 30 seconds). Set **Max employers to search** to `0` to cover all 1,300+ (about 8 to 10 minutes).

```json
{ "keywords": ["data scientist", "machine learning"], "locations": ["Germany", "India"], "postedWithinDays": 14, "includeDetails": true, "maxJobs": 200 }
```

```json
{ "workdayUrls": ["https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite"], "keywords": [], "postedWithinDays": 0, "maxJobs": 1000 }
```

```json
{ "keywords": ["registered nurse"], "companies": ["cvs", "hca", "kaiser"], "remoteOnly": false, "onlyNewSinceLastRun": true, "alertId": "nurse-alert" }
```

#### Filter rules

- **Keywords** are searched on each career site, then a job is kept only if its title contains all words of any keyword (turn off `strictTitleMatch` in the JSON input to keep Workday's looser matches).
- **Countries or places:** ISO codes or country names match the detected country; other text (a city, a state, "Remote") matches the location. Jobs listed as "3 Locations" are opened to check every location.
- **Posted within:** Workday shows "Posted N Days Ago"; `postedAt` is the date that implies (exact start date when details are on). Workday shows everything older as "30+ Days Ago", so 30 is the maximum filter; `0` keeps all jobs.

### Output example

```json
{
  "jobId": "JR2015832",
  "title": "Senior Software Engineer, Platform Engineering",
  "companyName": "nvidia",
  "workdayTenant": "nvidia",
  "careerSite": "NVIDIAExternalCareerSite",
  "location": "US, CA, Santa Clara",
  "locations": ["US, CA, Santa Clara"],
  "country": "US",
  "countryName": "United States",
  "isRemote": false,
  "employmentType": "Full time",
  "postedOnText": "Posted 6 Days Ago",
  "postedDaysAgo": 6,
  "postedAt": "2026-10-05",
  "jobUrl": "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite/job/US-CA-Santa-Clara/Senior-Software-Engineer--Platform-Engineering_JR2015832",
  "boardUrl": "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite",
  "descriptionText": "NVIDIA has been transforming computer graphics, PC gaming, and accelerated computing ...",
  "hiringOrganization": "2100 NVIDIA USA",
  "dataSource": "live",
  "isNew": null,
  "scrapedAt": "2026-10-11T08:00:00Z"
}
```

`companyName` is the employer's Workday name (usually a short company name such as `nvidia` or `cvshealth`). Download the dataset as JSON, CSV, Excel or XML, or read it from the API. A `SEARCH_SUMMARY` record lists how many career sites were searched and matched.

### How it compares

| | This Actor | Single-site Workday scrapers | Premium Workday job APIs |
|---|---|---|---|
| Search 1,300+ Workday employers in one run | ✅ | ❌ (one URL at a time) | ✅ |
| Any Workday URL you paste | ✅ | ✅ | varies |
| Country, remote, date and exclude filters | ✅ | partial | ✅ |
| Only-new-jobs alert mode | ✅ | rarely | varies |
| Proxies or logins | none | none | none |
| Price per 1,000 jobs | **$1.50** | $1–$3 | $2+ |

### Run it from code: API, Python, JavaScript or cURL

Every Apify Actor is also a REST API. Get your token in Apify Console under **Settings → API & Integrations**, then:

**cURL** (runs the Actor and returns the matching jobs in one call):

```bash
curl -X POST "https://api.apify.com/v2/acts/saadhazz~workday-jobs-search/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"keywords": ["data engineer"], "locations": ["US"], "postedWithinDays": 3, "maxJobs": 100}'
```

**Python** (`pip install apify-client`):

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("saadhazz/workday-jobs-search").call(run_input={"keywords": ["data engineer"], "locations": ["US"], "postedWithinDays": 3, "maxJobs": 100})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

**JavaScript / Node.js** (`npm i apify-client`):

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('saadhazz/workday-jobs-search').call({"keywords": ["data engineer"], "locations": ["US"], "postedWithinDays": 3, "maxJobs": 100});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

### Use it with AI agents (MCP), Make, Zapier, n8n and Google Sheets

- **AI agents and LLM apps:** connect Claude, Cursor, ChatGPT or any MCP client to `https://mcp.apify.com/?tools=saadhazz/workday-jobs-search` and the agent can call this Actor as a tool.
- **No-code:** use the official Apify integrations for Make, Zapier and n8n, or export the dataset straight to Google Sheets, CSV, Excel or JSON.
- **Scheduling and webhooks:** create a Schedule in Apify Console (e.g. every morning) and add a webhook or Slack/email integration to get notified when new data is ready.

### Pricing

**$1.50 per 1,000 jobs** returned ($0.0015 per job), descriptions included. Filtered-out jobs, failed sites and runs with zero results cost nothing beyond Apify platform usage. Set **Max jobs** or a maximum charge per run to control spend; the Actor stops cleanly at your limit.

### FAQ

**Is this legal?** The Actor reads public job postings from employers' own Workday career sites through the JSON endpoints those pages use, on paths their robots.txt allows. No login, no personal data, no anti-bot workarounds. Results contain job postings only; recruiter names or emails are never collected.

**How do I scrape all jobs from a Workday career site?** Paste the URL in **Workday career-site URLs**, leave keywords empty, set `postedWithinDays` to `0`, and raise **Max jobs** (pasted URLs are read up to 1,000 jobs each; raise **Max pages** above 50 for more).

**Is there a Workday jobs API?** Workday has no public multi-company job search API. This Actor gives you one: a single REST call searches 1,300+ Workday employers and returns clean JSON.

**My company isn't in the built-in list.** Paste its `myworkdayjobs.com` URL in **Workday career-site URLs**; any Workday career site works.

**How fast is it?** The default search of the 300 largest employers takes about 30 seconds; all 1,300+ employers take about 8 to 10 minutes, because Workday slows down bulk requests and the Actor respects that instead of using proxies. Use **Companies** to search only the employers you care about in seconds.

**How much do 10,000 jobs cost?** $15 at $1.50 per 1,000 jobs, plus a few cents of Apify platform usage.

**Do you include LinkedIn or Indeed jobs?** No. Only jobs that employers publish on their own Workday career sites, so no reposts and no expired copies.

### Credits

The built-in employer list is seeded from the open dataset [job-board-directory](https://github.com/kalebconfer-sys/job-board-directory) (CC0) and re-checked live.

### More data APIs from the same developer

- [Job Search API: Career Site Jobs](https://apify.com/saadhazz/career-site-job-search): search 400k+ jobs from 13,000+ company career sites (Greenhouse, Lever, Ashby, Workable…) by title, country and remote, with new-job alerts. $2 / 1,000 jobs.
- [ATS Jobs API](https://apify.com/saadhazz/ats-jobs-api): every open job from a list of companies on Greenhouse, Lever, Ashby, SmartRecruiters or Recruitee, in one schema. $1 / 1,000 jobs.
- [Remote Jobs API](https://apify.com/saadhazz/remote-jobs-aggregator): remote and work-from-home jobs from Remote OK, Himalayas, Jobicy and Arbeitnow, deduplicated. $1 / 1,000 jobs.
- [Bulk WHOIS & RDAP Lookup](https://apify.com/saadhazz/domain-whois-rdap): domain expiry dates, registrar, age, status, nameservers, MX/SPF/DMARC for thousands of domains. $1 / 1,000 domains.
- [Sitemap URL Extractor](https://apify.com/saadhazz/sitemap-url-extractor): every URL a website lists in its XML sitemaps, with lastmod, hreflang and optional HTTP status. $0.40 / 1,000 URLs.
- [PDF Text Extractor](https://apify.com/saadhazz/pdf-text-extractor): PDF URLs to clean page-by-page text, Markdown tables and metadata for RAG/LLM pipelines.
- [SEC EDGAR Filings Monitor](https://apify.com/saadhazz/sec-filings-monitor): new 8-K, 10-Q, 10-K and Form 4 filings for a list of tickers from the official SEC API.

Found a bug or need a field? Open an issue on the Issues tab; Issues are checked daily.

# Actor input Schema

## `keywords` (type: `array`):

Searched on every Workday career site. A job is kept if its title contains ALL words of ANY keyword (e.g. 'data engineer' matches 'Senior Data Engineer II'). Leave empty to list all jobs.

## `excludeKeywords` (type: `array`):

Drop jobs whose title contains any of these, e.g. 'intern', 'principal'.

## `strictTitleMatch` (type: `boolean`):

Keep a job only if its title contains all words of a keyword. Off = keep every job Workday's own search returns for the keyword.

## `companies` (type: `array`):

Only search employers whose Workday name contains one of these, e.g. 'nvidia', 'salesforce', 'cvs'. Empty = all 1,300+ employers in the built-in list.

## `workdayUrls` (type: `array`):

Any Workday career site, e.g. https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite. When set, only these sites are searched (plus any 'companies' matches).

## `locations` (type: `array`):

Country names or ISO codes (e.g. 'US', 'Germany', 'India') match the detected country; anything else matches the location text (e.g. 'Austin', 'Remote'). Empty = anywhere.

## `remoteOnly` (type: `boolean`):

Keep only jobs whose location mentions remote / virtual / home.

## `postedWithinDays` (type: `integer`):

Only jobs posted in the last N days (Workday shows 'Posted N Days Ago'; 30 means up to 30 days). 0 = any date, including 30+ days.

## `includeDetails` (type: `boolean`):

Opens each returned job for the plain-text description, exact posting date, employment type (full/part time), all locations and the hiring entity. Slower.

## `onlyNewSinceLastRun` (type: `boolean`):

Remembers jobs already returned for this search (in a named key-value store in your account) and returns only new ones. Schedule the Actor for daily job alerts.

## `alertId` (type: `string`):

Name for this alert's memory. If empty, a hash of the search filters is used.

## `maxJobs` (type: `integer`):

Maximum jobs to return (you pay per job returned). Newest first.

## `maxPagesPerCompany` (type: `integer`):

Each page is 20 jobs, ranked by Workday's own relevance for the keyword. 1 page (top 20 matches per employer) is fast and covers most searches; raise it for broad keywords. Pasted Workday URLs, and companies when 20 or fewer match, are always read up to 50 pages (1,000 jobs) or this value if higher.

## `maxCompanies` (type: `integer`):

How many built-in employers to search, largest first. 300 (default) finishes in about 30 seconds; 0 = all 1,300+ (about 8 to 10 minutes, because Workday sites slow down bulk requests). Ignored when you paste Workday URLs.

## `concurrency` (type: `integer`):

Advanced. Requests in flight at once.

## Actor input object example

```json
{
  "keywords": [
    "software engineer"
  ],
  "excludeKeywords": [],
  "strictTitleMatch": true,
  "companies": [],
  "workdayUrls": [],
  "locations": [],
  "remoteOnly": false,
  "postedWithinDays": 7,
  "includeDetails": false,
  "onlyNewSinceLastRun": false,
  "alertId": "",
  "maxJobs": 100,
  "maxPagesPerCompany": 1,
  "maxCompanies": 300,
  "concurrency": 32
}
```

# Actor output Schema

## `results` (type: `string`):

One job posting per item, newest first.

## `summary` (type: `string`):

Career sites searched, matches and jobs returned.

## `runStats` (type: `string`):

Counters for HTTP outcomes and errors in this run.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "keywords": [
        "software engineer"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("saadhazz/workday-jobs-search").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "keywords": ["software engineer"] }

# Run the Actor and wait for it to finish
run = client.actor("saadhazz/workday-jobs-search").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "keywords": [
    "software engineer"
  ]
}' |
apify call saadhazz/workday-jobs-search --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,saadhazz/workday-jobs-search"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/fXGwXUEnMPrHsJH9y/builds/4xHhAqdwFyD8XhWTI/openapi.json
