# Workday Jobs Scraper: Unlimited API & Salaries (`data-goose/workday-job-scraper`) Actor

Fast 128MB HTTP scraper for Workday (myworkdayjobs.com) career sites. Extracts full job descriptions, salary ranges, locations, requisition IDs, recruiter emails, and company domains across 50+ built-in Fortune 500 boards with automatic >2,000 pagination bypass and change monitoring.

- **URL**: https://apify.com/data-goose/workday-job-scraper.md
- **Developed by:** [Data Goose](https://apify.com/data-goose) (community)
- **Categories:** Jobs, Lead generation
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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: Unlimited API & Salaries

Pull open jobs directly from any **Workday** (`*.myworkdayjobs.com`) career portal in seconds: full HTML and plain-text descriptions, extracted salary ranges, primary and secondary locations, requisition IDs, recruiter emails, root corporate domains, and only the **new** jobs (plus closed/expired job tracking) since your last scheduled run.

Runs as pure HTTP against the Workday CXS JSON API with an async detail worker pool (`Semaphore(12)`), needing just **128 MB** of memory and zero headless browser overhead.

***

### Which companies can I scrape?

**Any company that posts its jobs on Workday**, not just the ones in our built-in list.

| You paste | Example | Works for |
|---|---|---|
| The company's Workday careers URL | `https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite` | **Every** Workday company |
| A single job URL | `https://nvidia.wd5.myworkdayjobs.com/…/job/…` | **Every** Workday company |
| Just the company name | `nvidia`, `pfizer`, `intel` | The 100+ employers we've already mapped |

**Why does Workday usually need the URL?** Unlike other ATS platforms, a Workday address includes a server number (`wd1`–`wd12`) and a site name chosen by each company. These can't be guessed from the company name. To get the URL, open the company's careers page, click **Search jobs**, and copy the address once it contains `myworkdayjobs.com`.

**What's the built-in directory?** An optional shortcut. Turn on `includeBuiltInTechDirectory` to also scan 100+ verified Fortune 500 employers without typing anything. It's off by default and never limits what you can scrape.

#### Optional Starter Directory (Any Workday Company URL Works in `urls`)

You can scrape **any company in the world that uses Workday** by pasting its `*.myworkdayjobs.com` URL into `urls`. The 103 companies below are **only** our pre-mapped convenience shortcuts (allowing bare names like `"nvidia"` or `"includeBuiltInTechDirectory": true`)—they **never** limit which Workday portals you can scrape:

`3m` (3M — `3m.com`), `abbvie` (Abbvie — `abbvie.com`), `accenture` (Accenture — `accenture.com`), `adobe` (Adobe — `adobe.com`), `agilent` (Agilent — `agilent.com`), `aig` (Aig — `aig.com`), `allstate` (Allstate — `allstate.com`), `amgen` (Amgen — `amgen.com`), `analogdevices` (Analogdevices — `analog.com`), `astrazeneca` (Astrazeneca — `astrazeneca.com`), `autodesk` (Autodesk — `autodesk.com`), `bankofamerica` (Bankofamerica — `bankofamerica.com`), `blackrock` (Blackrock — `blackrock.com`), `bms` (Bms — `bms.com`), `boeing` (Boeing — `boeing.com`), `bostonscientific` (Bostonscientific — `bostonscientific.com`), `broadcom` (Broadcom — `broadcom.com`), `capitalone` (Capitalone — `capitalone.com`), `cardinalhealth` (Cardinalhealth — `cardinalhealth.com`), `caterpillar` (Caterpillar — `caterpillar.com`), `centene` (Centene — `centene.com`), `chevron` (Chevron — `chevron.com`), `cigna` (Cigna — `cigna.com`), `citi` (Citi — `citi.com`), `cmegroup` (Cmegroup — `cmegroup.com`), `cognizant` (Cognizant — `cognizant.com`), `comcast` (Comcast — `comcast.com`), `corning` (Corning — `corning.com`), `cummins` (Cummins — `cummins.com`), `cvshealth` (Cvshealth — `cvshealth.com`), `danaher` (Danaher — `danaher.com`), `deere` (Deere — `deere.com`), `dell` (Dell — `dell.com`), `dupont` (Dupont — `dupont.com`), `eaton` (Eaton — `eaton.com`), `fedex` (Fedex — `fedex.com`), `fis` (Fis — `fisglobal.com`), `generalmotors` (Generalmotors — `gm.com`), `gsk` (Gsk — `gsk.com`), `hp` (Hp — `hp.com`), `hpe` (Hpe — `hpe.com`), `humana` (Humana — `humana.com`), `illumina` (Illumina — `illumina.com`), `intel` (Intel — `intel.com`), `iqvia` (Iqvia — `iqvia.com`), `jll` (Jll — `jll.com`), `johnsoncontrols` (Johnsoncontrols — `johnsoncontrols.com`), `kla` (Kla — `kla.com`), `lamresearch` (Lamresearch — `lamresearch.com`), `leidos` (Leidos — `leidos.com`), `lowes` (Lowes — `lowes.com`), `marriott` (Marriott — `marriott.com`), `mastercard` (Mastercard — `mastercard.com`), `mckesson` (Mckesson — `mckesson.com`), `medtronic` (Medtronic — `medtronic.com`), `merck` (Merck — `merck.com`), `micron` (Micron — `micron.com`), `moderna` (Moderna — `modernatx.com`), `morganstanley` (Morganstanley — `morganstanley.com`), `motorolasolutions` (Motorolasolutions — `motorolasolutions.com`), `nasdaq` (Nasdaq — `nasdaq.com`), `netflix` (Netflix — `netflix.com`), `nike` (Nike — `nike.com`), `nvidia` (Nvidia — `nvidia.com`), `paypal` (Paypal — `paypal.com`), `pfizer` (Pfizer — `pfizer.com`), `pg` (Pg — `pg.com`), `philips` (Philips — `philips.com`), `pnc` (Pnc — `pnc.com`), `prudential` (Prudential — `prudential.com`), `pwc` (Pwc — `pwc.com`), `qualcomm` (Qualcomm — `qualcomm.com`), `raytheon` (Raytheon — `rtx.com`), `regeneron` (Regeneron — `regeneron.com`), `relx` (Relx — `relx.com`), `roche` (Roche — `roche.com`), `salesforce` (Salesforce — `salesforce.com`), `sanofi` (Sanofi — `sanofi.com`), `sony` (Sony — `sony.com`), `spglobal` (Spglobal — `spglobal.com`), `stryker` (Stryker — `stryker.com`), `synopsys` (Synopsys — `synopsys.com`), `target` (Target — `target.com`), `thermofisher` (Thermofisher — `thermofisher.com`), `tmobile` (Tmobile — `t-mobile.com`), `travelers` (Travelers — `travelers.com`), `truist` (Truist — `truist.com`), `tyson` (Tyson — `tysonfoods.com`), `unilever` (Unilever — `unilever.com`), `ups` (Ups — `ups.com`), `usbank` (Usbank — `usbank.com`), `vanguard` (Vanguard — `vanguard.com`), `verizon` (Verizon — `verizon.com`), `vertex` (Vertex — `vrtx.com`), `walgreens` (Walgreens — `walgreens.com`), `walmart` (Walmart — `walmart.com`), `wellsfargo` (Wellsfargo — `wellsfargo.com`), `westerndigital` (Westerndigital — `westerndigital.com`), `whirlpool` (Whirlpool — `whirlpool.com`), `workday` (Workday — `workday.com`), `yum` (Yum — `yum.com`), `zimmerbiomet` (Zimmerbiomet — `zimmerbiomet.com`), `zoetis` (Zoetis — `zoetis.com`)

> **Scraping companies across multiple ATS platforms?** Combine this Actor with our other live 31-field job scrapers ([All-in-One ATS Job Scraper](https://apify.com/data-goose/career-site-job-scraper), [Greenhouse Jobs Scraper](https://apify.com/data-goose/greenhouse-job-scraper), [Lever Jobs Scraper](https://apify.com/data-goose/lever-job-scraper), [Ashby Job Scraper](https://apify.com/data-goose/ashby-job-scraper), [SmartRecruiters Jobs Scraper](https://apify.com/data-goose/smartrecruiters-job-scraper), [Rippling Jobs Scraper](https://apify.com/data-goose/rippling-job-scraper), [Workable Jobs Scraper](https://apify.com/data-goose/workable-job-scraper), [Recruitee Jobs Scraper](https://apify.com/data-goose/recruitee-job-scraper), [Breezy HR Jobs Scraper](https://apify.com/data-goose/breezyhr-job-scraper))—all sharing the **exact same 31-field output schema** (`companyDomain`, `salaryMin`, `salaryMax`, `recruiterEmails`, `isNew`) so they plug into a single n8n, Make, Clay, or Python pipeline with zero field-mapping changes.

***

### Quick Start — 3 Common Workflows

Click **Save & Start** in Apify Console to run the prefilled sample immediately, or copy one of these ready-to-run JSON inputs:

#### 1. Targeted Keyword & Remote Job Search

```json
{
  "urls": ["nvidia", "salesforce", "mastercard"],
  "keywordFilter": "engineer, ai, -intern",
  "remoteOnly": true,
  "maxJobsPerCompany": 25
}
```

#### 2. Scheduled Daily Change Monitor (Emit Only Net-New Jobs)

Run on an hourly or daily schedule—the first run establishes your baseline, and every subsequent run outputs **only newly posted jobs** (while logging closed/expired job IDs to `RUN_SUMMARY`):

```json
{
  "urls": ["nvidia", "salesforce", "mastercard"],
  "onlyNewJobs": true,
  "monitorName": "daily-watchlist",
  "maxJobsPerCompany": 50
}
```

#### 3. Zero-Input Built-In Directory Scan (B2B Hiring Signals & Clay / CRM Enrichment)

Scan our built-in directory of verified companies without hunting down board URLs—every output record includes `companyDomain`, `salaryFormatted`, and `recruiterEmails`:

```json
{
  "urls": [],
  "includeBuiltInTechDirectory": true,
  "deduplicateMultiLocationJobs": true,
  "maxJobsPerCompany": 15,
  "maxTotalJobs": 300
}
```

***

### Why developers switch to this Actor

| | This Actor (`data-goose`) | Cached index / browser Workday scrapers (`fantastic-jobs`, `parseforge`, etc.) |
|---|---|---|
| **Architecture** | Pure HTTP + CXS JSON API, **128 MB** RAM | Headless Chrome / Playwright (1–4 GB RAM) or stale 24h cached feeds |
| **>2,000 Job Cap Bypass** | ✅ Automatically splits boards >2,000 jobs across `appliedFacets` (`locationMainGroup` / `jobFamilyGroup`) and deduplicates by `externalPath` | ❌ Hard-stops at Workday's `offset + limit = 2,000` ceiling |
| **Built-In Fortune 500 Directory** | ✅ Pass bare company names (`nvidia`, `salesforce`, `mastercard`, `adobe`, `citi`, `boeing`, `pfizer`…) or turn on `includeBuiltInTechDirectory` for 100+ Fortune 500 boards | ❌ Requires manually hunting down exact `{tenant}.{wd}.myworkdayjobs.com/{site}` URLs |
| **B2B Enrichment (`companyDomain` & `recruiterEmails`)** | ✅ Every job includes root `companyDomain` (`nvidia.com`) and regex-extracted `recruiterEmails` for instant Clay / Apollo / CRM joins | ❌ Missing domain & contact extraction |
| **Change Monitor + Closed Job Tracking** | ✅ `onlyNewJobs` emits only net-new postings AND records `closedJobCount` + `closedJobKeys` in `RUN_SUMMARY` at no extra cost | ❌ Charges $20+/mo extra for expired job tracking or lacks state |
| **Multi-Location Deduplication** | ✅ `deduplicateMultiLocationJobs` merges identical `(companyToken, title, department)` postings across cities into one item | ❌ Bills you 10x for the same role posted in 10 cities |

***

### Drop-in migration from other job scrapers

Switching from `fantastic-jobs`, `bytepulselabs`, or `parseforge` requires **zero changes to your downstream pipeline**:

- **Input:** accepts `urls` as plain strings, bare company slugs (`"nvidia"`), full Workday URLs (`https://nvidia.wd5.myworkdayjobs.com/en-US/NVIDIAExternalCareerSite`), single job URLs (`.../job/...`), or legacy request-list objects (`[{"url": "..."}]`). Aliases `boards`, `boardUrls`, and `companies` are merged automatically.
- **Output:** every item preserves the 9 legacy base fields (`id`, `type`, `title`, `description`, `locations`, `department`, `postingUrl`, `applyUrl`, `publishedAt`) plus 22 enriched fields (`ats`, `companyToken`, `companyName`, `companyDomain`, `requisitionId`, `salaryMin`, `salaryMax`, `salaryFormatted`, `recruiterEmails`, `workplaceType`, `isNew`, etc.)—31 fields total across all 10 `data-goose` ATS scrapers.

***

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `urls` | array | `["nvidia", "salesforce", "mastercard"]` | Workday board URLs (`*.myworkdayjobs.com`), single job URLs, or bare Fortune 500 company names |
| `includeBuiltInTechDirectory` | boolean | `false` | Also scan 100+ verified Fortune 500 & enterprise Workday boards |
| `keywordFilter` | string | – | Case-insensitive regex, comma/pipe OR terms, and `-exclude` tokens (e.g. `"ai, cuda, -intern"`) |
| `excludeKeywordFilter` | string | – | Comma-separated keywords or regex excluded from job titles (e.g. `"Senior, Staff, Director"`) |
| `departmentFilter` | string | – | Case-insensitive substring match on department |
| `locationFilter` | string | – | Case-insensitive substring match on primary and additional locations |
| `remoteOnly` | boolean | `false` | Only return jobs classified as `Remote` |
| `publishedAfter` | string | – | `YYYY-MM-DD`. Keeps jobs published on or after this date |
| `deduplicateMultiLocationJobs` | boolean | `false` | Merge identical `(companyToken, title, department)` postings across cities into one item |
| `onlyNewJobs` | boolean | `false` | Change monitor: emit only net-new jobs and track closed/expired job IDs in `RUN_SUMMARY` |
| `monitorName` | string | `"default"` | Separate state key for each watchlist or scheduled task |
| `maxJobsPerCompany` | integer | `20` | Cap per company board (`0` = automatic fair share across boards) |
| `maxTotalJobs` | integer | `60` | Maximum total jobs to output across the run |

***

### Output (Unified 31-Field Schema)

```json
{
  "id": "JR1988123",
  "type": "Full-time",
  "title": "Senior Deep Learning Systems Engineer",
  "description": "NVIDIA is searching for a Senior Deep Learning Systems Engineer...",
  "locations": ["US, CA, Santa Clara", "US, CA, Remote"],
  "department": "Engineering",
  "postingUrl": "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite/job/US-CA-Santa-Clara/Senior-Deep-Learning-Systems-Engineer_JR1988123",
  "applyUrl": "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite/job/US-CA-Santa-Clara/Senior-Deep-Learning-Systems-Engineer_JR1988123/apply",
  "publishedAt": "2026-11-04",
  "ats": "workday",
  "companyToken": "nvidia",
  "companyName": "NVIDIA",
  "companyDomain": "nvidia.com",
  "internalJobId": "a1b2c3d4e5f6",
  "requisitionId": "JR1988123",
  "updatedAt": "2026-11-04",
  "isRemote": true,
  "workplaceType": "Remote",
  "departments": ["Engineering"],
  "offices": ["US, CA, Santa Clara", "US, CA, Remote"],
  "salaryMin": 184000.0,
  "salaryMax": 287500.0,
  "salaryCurrency": "USD",
  "salaryInterval": "year",
  "salaryFormatted": "USD 184,000 - 287,500 / year",
  "salaryRanges": [
    {
      "min": 184000.0,
      "max": 287500.0,
      "currency": "USD",
      "interval": "year",
      "title": null,
      "blurb": "The base salary range is 184,000 USD - 287,500 USD.",
      "formatted": "USD 184,000 - 287,500 / year",
      "source": "description"
    }
  ],
  "recruiterEmails": [],
  "metadata": {
    "tenant": "nvidia",
    "wdCluster": "wd5",
    "siteId": "NVIDIAExternalCareerSite",
    "timeType": "Full time",
    "remoteType": "Remote"
  },
  "isNew": true,
  "descriptionHtml": "<p>NVIDIA is searching for a Senior Deep Learning Systems Engineer...</p>",
  "questions": null
}
```

***

### Pricing (Pay-Per-Event — No Monthly Subscription)

This Actor uses transparent **Pay-Per-Event** pricing. You only pay for jobs actually written to your dataset—**filtered-out records and already-seen records (`onlyNewJobs: true`) cost $0**.

| Plan Tier | Per Job (`apify-default-dataset-item`) | Cost per **1,000 Jobs** | Actor Start Fee (`apify-actor-start`) | Proxy Cost |
|---|---|---|---|---|
| **Free** | `$0.00175` | **$1.75** | `$0.005` | **$0** (no proxy needed) |
| **Bronze** | `$0.00150` | **$1.50** | `$0.005` | **$0** |
| **Silver** | `$0.00125` | **$1.25** | `$0.005` | **$0** |
| **Gold / Platinum / Diamond** | `$0.00100` | **$1.00** | `$0.005` | **$0** |

- **128 MB Memory Footprint:** Runs in pure async HTTP (`128 MB` RAM instead of `1–4 GB` headless browsers), reducing Apify compute usage by **8x–32x**.
- **Built-in Spend Cap Protection:** Use `maxTotalJobs` / `maxJobsPerCompany` or Apify's **Maximum cost per run** setting to cap spend to the exact cent.

***

### API Usage

#### Python (`apify-client`)

```python
import os
from apify_client import ApifyClient

client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("data-goose/workday-job-scraper").call(run_input={
    "urls": ["nvidia", "salesforce", "mastercard"],
    "keywordFilter": "engineer, ai, -intern",
    "excludeKeywordFilter": "Director, VP",
    "deduplicateMultiLocationJobs": True,
    "maxJobsPerCompany": 25,
})

for job in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(job["companyName"], "|", job["companyDomain"], "|", job["title"], "|", job["salaryFormatted"])
```

#### n8n / Make (HTTP Request)

- **Method:** `POST`
- **URL:** `https://api.apify.com/v2/acts/data-goose~workday-job-scraper/run-sync-get-dataset-items`
- **Headers:** `Authorization: Bearer {{APIFY_TOKEN}}`, `Content-Type: application/json`
- **Body:**

```json
{
  "urls": ["nvidia", "salesforce", "adobe"],
  "remoteOnly": true,
  "onlyNewJobs": true,
  "monitorName": "workday-daily"
}
```

#### cURL

```bash
curl -X POST "https://api.apify.com/v2/acts/data-goose~workday-job-scraper/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"urls": ["nvidia", "salesforce", "mastercard"], "maxJobsPerCompany": 20}'
```

***

### Explore the Data Goose Scraper Suite (128 MB Pure-HTTP)

All published Actors below run in **128 MB RAM** with zero browser overhead and deterministic schemas (all ATS & Job scrapers share the **exact same 31-field output schema**):

| Actor | Target Platform & Primary Use Case |
| :--- | :--- |
| [All-in-One ATS Job Scraper (9 Platforms) (`data-goose/career-site-job-scraper`)](https://apify.com/data-goose/career-site-job-scraper) | **All-in-One Router**: auto-detects & scrapes all 9 ATS platforms from any company domain or URL |
| [Workday Jobs Scraper: Unlimited API & Salaries (`data-goose/workday-job-scraper`)](https://apify.com/data-goose/workday-job-scraper) | **Workday**: Fortune 500 & global enterprises (`>2,000` facet bypass + 100+ built-in boards) |
| [Greenhouse Jobs Scraper (Fast API & Salaries) (`data-goose/greenhouse-job-scraper`)](https://apify.com/data-goose/greenhouse-job-scraper) | **Greenhouse**: High-growth tech & unicorns (US + EU API, `pay_transparency` salaries) |
| [Lever Jobs Scraper (US & EU Postings API) (`data-goose/lever-job-scraper`)](https://apify.com/data-goose/lever-job-scraper) | **Lever**: Tech & scaleups (US + EU fallback, native `salaryRange` + combined lists) |
| [Ashby Job Scraper (YC Startups & Salaries) (`data-goose/ashby-job-scraper`)](https://apify.com/data-goose/ashby-job-scraper) | **Ashby**: AI startups & YC companies (`includeCompensation=true` structured salary tiers) |
| [SmartRecruiters Jobs Scraper (Enterprise API & Salaries) (`data-goose/smartrecruiters-job-scraper`)](https://apify.com/data-goose/smartrecruiters-job-scraper) | **SmartRecruiters**: Global enterprises (ServiceNow, Bosch, Experian, Eurofins) |
| [Rippling Jobs Scraper (ATS Boards & Salaries) (`data-goose/rippling-job-scraper`)](https://apify.com/data-goose/rippling-job-scraper) | **Rippling ATS**: Modern startups & scaleups (`/api/v1/board/{slug}/jobs` + pay ranges) |
| [Workable Jobs Scraper: Direct API & Salaries (`data-goose/workable-job-scraper`)](https://apify.com/data-goose/workable-job-scraper) | **Workable**: Mid-market & European tech (v3 list + v2 detail orchestration) |
| [Recruitee Jobs Scraper (Bulk API, Salaries & Emails) (`data-goose/recruitee-job-scraper`)](https://apify.com/data-goose/recruitee-job-scraper) | **Recruitee**: European & remote-first companies (single-call `/api/offers` JSON) |
| [Breezy HR Jobs Scraper (Salaries & Hiring Emails) (`data-goose/breezyhr-job-scraper`)](https://apify.com/data-goose/breezyhr-job-scraper) | **Breezy HR**: SMB & agencies (live `/json` feeds + full descriptions, no 100-item cap) |

> **Looking for our E-Commerce, Lead Enrichment, Financial & Trend Scrapers?** Browse all published 128 MB pure-HTTP scrapers on the [Data Goose Apify Store Profile](https://apify.com/data-goose).

***

### Support & Custom Contracting

- 🐛 **Bugs & feature requests:** open an issue on the Actor's **Issues** tab or email us.
- 📧 **datagoosedev@gmail.com** — we reply within one business day.

# Actor input Schema

## `urls` (type: `array`):

Paste any \*.myworkdayjobs.com URL, root Workday domain, single job URL, or bare company name/domain from our built-in Fortune 500 directory (e.g. nvidia, salesforce, mastercard, adobe, citi, boeing, target, pwc, pfizer, intel, workday).

## `includeBuiltInTechDirectory` (type: `boolean`):

Automatically scan 100+ verified Fortune 500 and enterprise Workday boards (NVIDIA, Salesforce, Mastercard, Adobe, Citi, Boeing, Target, PwC, AstraZeneca, Pfizer, Intel, Workday, CVS Health, etc.) in addition to your input list. Optional: any Workday company works if you paste its myworkdayjobs.com URL above.

## `keywordFilter` (type: `string`):

Optional case-insensitive regex, comma/pipe-separated OR terms, and -exclude tokens matched against job title and description (e.g. 'python, machine learning, -intern' or 'engineer|developer').

## `excludeKeywordFilter` (type: `string`):

Case-insensitive regex or comma-separated keywords to exclude from job titles (e.g. 'Senior, Staff, Director, Principal').

## `departmentFilter` (type: `string`):

Optional case-insensitive substring matched against department or job family names.

## `locationFilter` (type: `string`):

Optional case-insensitive substring matched against job locations (e.g. Santa Clara, San Francisco, New York, Remote, India, UK).

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

Only return jobs classified as Remote.

## `publishedAfter` (type: `string`):

Only return jobs published on or after this ISO date (YYYY-MM-DD).

## `deduplicateMultiLocationJobs` (type: `boolean`):

Collapses identical (companyToken, title, department) postings across multiple cities into a single dataset item with all locations merged.

## `onlyNewJobs` (type: `boolean`):

Persists seen job IDs in a named Key-Value Store ('workday-job-monitor-state'), outputs only net-new jobs since your previous run, and records closed/expired jobs in RUN_SUMMARY.

## `monitorName` (type: `string`):

Identifier for the change-monitor state key so multiple scheduled tasks can track separate watchlists.

## `maxJobsPerCompany` (type: `integer`):

Cap the number of jobs extracted per company board. Set 0 for automatic fair-share distribution across boards.

## `maxTotalJobs` (type: `integer`):

Maximum total jobs to output across the entire run.

## Actor input object example

```json
{
  "urls": [
    "nvidia",
    "salesforce",
    "mastercard"
  ],
  "monitorName": "default",
  "maxJobsPerCompany": 20,
  "maxTotalJobs": 60
}
```

# Actor output Schema

## `jobs` (type: `string`):

No description

## `runSummary` (type: `string`):

No description

# 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 = {
    "urls": [
        "nvidia",
        "salesforce",
        "mastercard"
    ],
    "maxJobsPerCompany": 20,
    "maxTotalJobs": 60
};

// Run the Actor and wait for it to finish
const run = await client.actor("data-goose/workday-job-scraper").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 = {
    "urls": [
        "nvidia",
        "salesforce",
        "mastercard",
    ],
    "maxJobsPerCompany": 20,
    "maxTotalJobs": 60,
}

# Run the Actor and wait for it to finish
run = client.actor("data-goose/workday-job-scraper").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 '{
  "urls": [
    "nvidia",
    "salesforce",
    "mastercard"
  ],
  "maxJobsPerCompany": 20,
  "maxTotalJobs": 60
}' |
apify call data-goose/workday-job-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,data-goose/workday-job-scraper"
        }
    }
}
```

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/aVsWurtJbt6cKXwsG/builds/jVb4WuLSSW4nLKZY4/openapi.json
