# Workday Jobs Scraper: All Jobs from Any myworkdayjobs.com Site (`swillz/workday-jobs-scraper`) Actor

Get every open job from any company's Workday career site (myworkdayjobs.com) as JSON, past Workday's 2,000-job cap. Input: the Workday jobs URL. Output: one row per job with title, locations, country, remote, pay range, posted date, description and apply URL. No login. From $1 per 1,000 jobs.

- **URL**: https://apify.com/swillz/workday-jobs-scraper.md
- **Developed by:** [William Jin](https://apify.com/swillz) (community)
- **Categories:** Jobs, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 job scrapeds

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

Get **every job** from any company's Workday career site (`*.myworkdayjobs.com` / `myworkdaysite.com`): title, locations, remote type, full-time/part-time, posted date, requisition ID, salary range (when it's in the posting), full description and the apply link. You get clean JSON, CSV or Excel. No login, no browser, no cookies.

**$1.00-1.50 per 1,000 jobs**, depending on your Apify plan. You pay only for jobs saved after your filters.

**When to use:** you need the open jobs of a company whose careers site runs on Workday (myworkdayjobs.com), including sites with more than 2,000 jobs.
**Input:** the Workday jobs URL, e.g. `{"startUrls":[{"url":"https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite"}]}`.
**Output:** one row per job with title, locations, country, remote, pay range, posted date, description and apply URL. From $1 per 1,000 jobs.

### Why this one

- **No 2,000-job ceiling.** Workday's search stops paging at 2,000 results, and big employers like NVIDIA, Salesforce and Walmart have more than that. The scraper detects this and splits the search by location, job family or other facets, so you get the full list (for example, 2,718 of 2,718 NVIDIA jobs in our tests).
- **Many companies in one run.** Paste as many career-site URLs as you like.
- **Search-URL aware.** Filter a Workday page in your browser, then paste that URL; `q=` and facet filters are applied.
- **Filters before you pay:** title include/exclude keywords, location keywords, posted within N days, remote only, max jobs per site.
- **Fast mode.** Set `includeDetails: false` to list jobs without opening each posting (title, location, posted text, URL).
- **Per-site summary** in the `OUTPUT` record: ok / invalid_url / not_found / robots_disallowed / error, with job counts.

### What data can you extract from Workday?

| Field | Example |
|---|---|
| Company and hiring entity | Adobe / Adobe Inc. |
| Job title, requisition ID | Senior Software Engineer, R160000 |
| Locations (all of them), remote type | San Jose, Seattle; remote: false |
| Time type | Full time |
| Posted date (absolute) and days ago | 2026-10-21, 2 |
| Salary min / max / currency / period | 139000 / 257550 / USD / year |
| Full description (text) | ... |
| Job URL and apply URL | links to the original posting |

### How to scrape Workday jobs (step by step)

1. Open the company's careers page and copy its Workday job-search URL (see below).
2. Paste one or many URLs into **Start URLs**.
3. Optionally add title keywords, location keywords, *posted within N days* or *remote only*.
4. Click **Start**, then download the jobs as **CSV, Excel or JSON**, or read them through the API.

### How to find a Workday URL

Open the company's careers page and click through to the job search. If the address bar shows something like
`https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite` or `https://wd3.myworkdaysite.com/recruiting/acme/Careers`, that's the URL to paste. Language prefixes like `/en-US/` are fine.

### Input example

```json
{
  "startUrls": [
    { "url": "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite" },
    { "url": "https://adobe.wd5.myworkdayjobs.com/external_experienced" }
  ],
  "titleKeywords": ["engineer"],
  "postedWithinDays": 7
}
```

### Output example

```json
{
  "company": "Adobe",
  "hiringEntity": "Adobe Inc.",
  "title": "Senior Software Engineer",
  "jobId": "R160000",
  "location": "San Jose",
  "allLocations": ["San Jose", "Seattle"],
  "remote": false,
  "timeType": "Full time",
  "postedDate": "2026-10-21",
  "postedDaysAgo": 2,
  "jobUrl": "https://adobe.wd5.myworkdayjobs.com/en-US/external_experienced/job/San-Jose/Senior-Software-Engineer_R160000",
  "applyUrl": "https://adobe.wd5.myworkdayjobs.com/en-US/external_experienced/job/San-Jose/Senior-Software-Engineer_R160000/apply",
  "salaryMin": 139000,
  "salaryMax": 257550,
  "salaryCurrency": "USD",
  "salaryPeriod": "year",
  "descriptionText": "…",
  "ats": "workday"
}
```

### Use cases

- **Job boards and aggregators:** keep enterprise employers' jobs (banks, healthcare, retail, tech) in sync. Most large employers use Workday rather than Greenhouse or Lever.
- **Sales and recruiting intelligence:** spot companies hiring for the roles you sell to, then enrich them.
- **Labor-market and salary research:** collect pay ranges from pay-transparency postings across many employers.
- **Job seekers and career coaches:** a daily list of new roles at target companies.

### How to monitor new Workday jobs

1. Save your input with *Posted within days* = `1` and save it as a task.
2. In **Schedules**, run the task daily.
3. Add an integration (Slack, email, Google Sheets or a webhook) to get each day's new jobs.

### Use with AI agents (MCP, ChatGPT, Claude, Cursor, n8n)

AI agents can find and run this Actor through the [Apify MCP server](https://mcp.apify.com). Add it to Claude Desktop, Cursor, VS Code or any MCP client:

```json
{"mcpServers":{"apify":{"url":"https://mcp.apify.com?tools=swillz/workday-jobs-scraper"}}}
```

Or run it locally: `npx -y @apify/actors-mcp-server --tools swillz/workday-jobs-scraper` with `APIFY_TOKEN` set. In n8n or Make, use the Apify node with Actor `swillz/workday-jobs-scraper`.

Example prompts:

- "How many open roles does NVIDIA have in Germany?"
- "List Adobe's remote design jobs posted in the last 7 days"
- "Export every Salesforce opening in London to a sheet"

Minimal input:

```json
{"startUrls": [{"url": "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite"}], "maxJobs": 100, "includeDetails": false}
```

**Keep it fast:** Set `maxJobs` to 50–200 and `includeDetails` to `false` for answers in under 45 seconds. Sites with no matching jobs return a free status row with the reason.

**Cap the cost:** pass `maxTotalChargeUsd` ("Maximum cost per run") when you call the Actor. The run stops cleanly at the cap, keeps the results so far, and says why in the status message and the OUTPUT record.

### Send results to Google Sheets automatically

Every run saves the exact next step in its `OUTPUT` record (`nextSteps`). To make it automatic, open your saved Task → *Integrations* tab → *Add integration*, pick [Google Sheets Import & Export](https://apify.com/swillz/google-sheets-import-export), set your `spreadsheet` URL, set `datasetId` to `{{resource.defaultDatasetId}}` and trigger it when the run succeeds. The new jobs land in your sheet after every scheduled run, for $0.01 per 1,000 rows.

### Integrations and API

- **Make, n8n and Zapier:** use the official Apify app or node, choose *Run Actor* and pick `swillz/workday-jobs-scraper`.
- **API:** `POST https://api.apify.com/v2/acts/swillz~workday-jobs-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN` with the input JSON returns the jobs directly. JavaScript and Python clients are available.
- **AI agents (MCP):** add `https://mcp.apify.com?tools=swillz/workday-jobs-scraper` to Claude, Cursor or any MCP client and ask "list NVIDIA's open data engineering jobs posted this week".

### Workday Jobs Scraper vs alternatives

| | This Actor | Generic browser scrapers | Copying by hand |
|---|---|---|---|
| Boards over 2,000 jobs | ✅ auto-split, full list | Usually stop at 2,000 | ❌ |
| Salary, all locations, absolute posted date | ✅ | Partial | 😐 |
| Login, cookies or browser | ❌ none | Often a browser | – |
| Many companies per run | ✅ | Varies | ❌ |
| Price | $1.00-1.50 per 1,000 jobs by plan, filtered-out jobs free | Varies | Your time |

### Pricing

Pay per event, per 1,000 jobs saved:

| Apify plan | Per 1,000 jobs |
|---|---|
| Free | $1.50 |
| Starter | $1.50 |
| Scale | $1.10 |
| Business and up | $1.00 |

Prices drop on bigger Apify plans (Starter = Bronze tier, Scale = Silver, Business and up = Gold). Jobs you filter out are free. Set a max cost per run in Apify and the run stops when it's reached.

### FAQ

**Does Workday have a public jobs API?**
Not a documented one. Every Workday career site loads its job list from a JSON endpoint in the visitor's browser; this Actor reads that same public data politely, pages through it and fetches each posting's details.

**Why do other tools stop at 2,000 jobs?**
Workday's search reports at most 2,000 results per query. This Actor detects the cap and splits the search by location, job family or other facets, then de-duplicates, so you get every job.

**Can I get only new jobs?**
Yes. Set *Posted within days* to 1 and schedule the run daily.

**Do I need a proxy?**
No. The Actor needs no login and paces its requests.

**Found a bug or a site that doesn't work?**
Open an issue on the **Issues** tab with the career-site URL. We usually reply within 24 hours.

### Notes

- The scraper only reads the public job listings that Workday serves to any visitor. It respects each site's robots.txt and skips sites that disallow crawling. It collects no candidate or personal data.
- Salary is taken from the posting text when the employer publishes a pay range (common in US states with pay-transparency laws).
- Greenhouse, Lever, Ashby, Workable or Recruitee boards? Use our Career Site Jobs Scraper.

### Related tools

More tools from the same developer, built to work together:

- [Career Site Jobs Scraper](https://apify.com/swillz/career-site-jobs-scraper): jobs from Greenhouse, Lever, Ashby, Workable and Recruitee boards, with salary fields, as a jobs API or CSV.
- [Company Website Enrichment](https://apify.com/swillz/company-website-enrichment): turn a list of domains into company name, emails, phones, social links and tech stack.
- [Google Sheets Import & Export](https://apify.com/swillz/google-sheets-import-export): send any Apify dataset to a Google Sheet (append, replace or dedupe) or read a sheet as JSON.
- [XML Sitemap URL Extractor & Sitemap to CSV](https://apify.com/swillz/sitemap-url-extractor): every URL from a website's sitemap, with lastmod, HTTP status and new-page monitoring.

**Popular workflows**

- **Enterprise hiring tracker:** pull Workday jobs with this Actor, add company contacts with [Company Website Enrichment](https://apify.com/swillz/company-website-enrichment), and keep a live sheet with [Google Sheets Import & Export](https://apify.com/swillz/google-sheets-import-export).

Source: https://github.com/williamjin02/apify-actors/tree/main/actors/workday-jobs-scraper

# Actor input Schema

## `startUrls` (type: `array`):

Required. Array of objects, one per company: its Workday jobs page, e.g. \[{"url":"https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite"}]. A filtered search URL (with ?q= or location filters) keeps its filters. Find it via the company's Careers page: the address contains myworkdayjobs.com.

## `searchText` (type: `string`):

Same as the search box on the career site, e.g. "data engineer". Leave empty for all jobs.

## `titleKeywords` (type: `array`):

Keep jobs whose title contains any of these words (case-insensitive).

## `excludeTitleKeywords` (type: `array`):

Array of strings. Drop jobs whose title contains any of these, e.g. \["intern","senior"].

## `locationKeywords` (type: `array`):

Array of strings. Keep jobs where any location or the country contains one of these, e.g. \["Remote","Germany","CA"].

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

Only jobs posted in the last N days. Leave empty for all.

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

Only jobs marked remote (by Workday's remote type, or 'Remote' in a location).

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

Fetch each job's page for the description, all locations, country, ISO posted date, time type and pay range. Turn off for a fast title/location/link list.

## `includeDescription` (type: `boolean`):

Plain-text job description (needs full details).

## `includeDescriptionHtml` (type: `boolean`):

Original HTML description as well.

## `maxJobsPerSite` (type: `integer`):

Stop after this many jobs from each career site (0 = no limit).

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

Stop after this many jobs in total. 0 = no limit (default). Agents: set 50–200 and includeDetails=false for answers in under 45 seconds. Aliases maxItems/limit/maxResults also work.

## `splitLargeSites` (type: `boolean`):

Workday only pages through 2,000 jobs per search. When a site has more, split the search by category/location so every job is collected.

## `detailConcurrency` (type: `integer`):

Per site. Requests to each Workday host are also paced (about 8 per second).

## `proxyConfiguration` (type: `object`):

Not needed for most sites. Enable only if a site blocks requests.

## `maxRetries` (type: `integer`):

How many times to retry a failed request (network error, 429 or 5xx) before giving up on it.

## `emitStatusRows` (type: `boolean`):

Add one free row (status "no_results", "not_found" or "error" plus a reason) for each career site that returned no jobs, e.g. "N jobs listed, 0 matched your filters". Not charged. Turn off for jobs only.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite"
    },
    {
      "url": "https://adobe.wd5.myworkdayjobs.com/external_experienced"
    }
  ],
  "remoteOnly": false,
  "includeDetails": true,
  "includeDescription": true,
  "includeDescriptionHtml": false,
  "maxJobsPerSite": 50,
  "maxJobs": 0,
  "splitLargeSites": true,
  "detailConcurrency": 4,
  "proxyConfiguration": {
    "useApifyProxy": false
  },
  "maxRetries": 3,
  "emitStatusRows": true
}
```

# Actor output Schema

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

One row per job. Example: {"company":"NVIDIA","title":"Senior Software Engineer","location":"US, CA, Santa Clara","country":"United States","remote":false,"timeType":"Full time","postedDate":"2026-10-20","salaryMin":184000,"salaryMax":356500,"salaryCurrency":"USD","jobUrl":"https://nvidia.wd5.myworkdayjobs.com/…"}. Status rows: {"status":"no_results","input":"…","jobsListed":800,"jobsMatched":0,"reason":"…"}.

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

JSON: sites (status, jobsListed, jobsMatched, jobsSaved), jobsSaved, maxJobs, stoppedReason and zeroResultsReason.

# 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 = {
    "startUrls": [
        {
            "url": "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite"
        },
        {
            "url": "https://adobe.wd5.myworkdayjobs.com/external_experienced"
        }
    ],
    "maxJobsPerSite": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("swillz/workday-jobs-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 = {
    "startUrls": [
        { "url": "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite" },
        { "url": "https://adobe.wd5.myworkdayjobs.com/external_experienced" },
    ],
    "maxJobsPerSite": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("swillz/workday-jobs-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 '{
  "startUrls": [
    {
      "url": "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite"
    },
    {
      "url": "https://adobe.wd5.myworkdayjobs.com/external_experienced"
    }
  ],
  "maxJobsPerSite": 50
}' |
apify call swillz/workday-jobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,swillz/workday-jobs-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/qBt8Xd1Zi0Fk3ieD8/builds/e7wJJxjNcHYP9T0Rm/openapi.json
