# Workday Jobs Scraper (`anyxsolutions/workday-jobs-scraper`) Actor

Scrape open jobs from any company that hires on Workday (NVIDIA, Salesforce, CVS Health and thousands more): titles, locations, posting dates, full descriptions and published salary ranges. Paste a career site URL, keep its search and filters, get clean JSON. No login, no proxy.

- **URL**: https://apify.com/anyxsolutions/workday-jobs-scraper.md
- **Developed by:** [Anyx Solutions](https://apify.com/anyxsolutions) (community)
- **Categories:** Jobs
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.50 / 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

![banner](https://anyx.solutions/banners/workday-jobs-scraper.png)

## Workday Jobs Scraper

**Every open job on any company's Workday career site, with full descriptions and published salaries, as clean JSON.**

Workday runs the career sites of thousands of employers, from NVIDIA, Salesforce, Adobe and
Mastercard to CVS Health, banks, hospitals, universities and government agencies. If a company's
"Apply" button leads to a `myworkdayjobs.com` or `myworkdaysite.com` address, this Actor can read
it. Paste the career site URL, including any search or filters you set on the site, and get every
matching job: title, requisition ID, location and extra locations, country, time type, remote type,
posting date, application deadline, hiring entity, the full job description as HTML and plain
text, and the salary range the company states in the posting. There is no login, no API key, and
no proxy to configure. Built for job aggregators, recruiting and talent-intelligence teams, salary
benchmarking, and hiring-signal tracking.

### ⚡ Quick start

```json
{
  "startUrls": [
    { "url": "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite" }
  ],
  "maxItems": 5
}
```

### 🧩 Input

| Field                | Type    | Required | Default                      | Description                                                                                                                                                                                                                 |
| -------------------- | ------- | -------- | ---------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `startUrls`          | array   | yes      | —                            | Workday career site URLs (`<company>.wd<N>.myworkdayjobs.com/<site>` or `wd<N>.myworkdaysite.com/recruiting/<company>/<site>`), with or without a search and filters, or single job URLs (`…/job/<location>/<title>_<id>`). |
| `maxItems`           | integer | no       | —                            | Maximum number of jobs per start URL. The input form starts at 5; leave it empty to get every matching job.                                                                                                                 |
| `includeDetails`     | boolean | no       | `true`                       | Include full job postings: description, posting date, country, time type, remote type, extra locations and salary. Turn it off for a fast list of titles and locations from very large sites.                               |
| `proxyConfiguration` | object  | no       | `{ "useApifyProxy": false }` | Proxy settings. Workday career sites need no proxy.                                                                                                                                                                         |

**Finding a company's career site.** Open the company's careers page and click any job. If the
address bar shows `myworkdayjobs.com` or `myworkdaysite.com`, copy the part up to the site name,
for example `https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite`. To scrape a search,
type keywords and pick filters (location, job category, time type) on the site, then paste the
resulting URL: the Actor runs the same search.

### 📤 Output

Each job is one dataset row. With `includeDetails` off, the row keeps the title, IDs, URL,
location and posting age, and the posting-only fields are `null`.

#### Fields

| Field                 | Type   | Description                                                                        |
| --------------------- | ------ | ---------------------------------------------------------------------------------- |
| `jobReqId`            | string | The company's job requisition ID.                                                  |
| `jobPostingId`        | string | The posting's ID in its URL.                                                       |
| `title`               | string | Job title.                                                                         |
| `url`                 | string | The job's public page, where candidates apply.                                     |
| `tenant`              | string | The company's name in Workday URLs.                                                |
| `siteId`              | string | The career site's name in Workday URLs.                                            |
| `careerSiteUrl`       | string | The company's public career site.                                                  |
| `hiringOrganization`  | string | The legal entity that is hiring, as the company names it.                          |
| `location`            | string | Primary location.                                                                  |
| `additionalLocations` | array  | Other locations the job is open in.                                                |
| `country`             | string | Country of the primary location.                                                   |
| `countryCode`         | string | Two-letter country code, when given.                                               |
| `remoteType`          | string | Remote, hybrid or on-site, in the company's own words, when set.                   |
| `timeType`            | string | Full time or part time.                                                            |
| `postedOn`            | string | Posting age as the site shows it, such as "Posted Today" or "Posted 30+ Days Ago". |
| `postedDate`          | string | Date the job was posted (YYYY-MM-DD).                                              |
| `applicationDeadline` | string | Last day to apply (YYYY-MM-DD), when set.                                          |
| `salaryText`          | string | The sentence in the posting that states the pay range, when there is one.          |
| `salaryMin`           | number | Lower end of the first stated pay range.                                           |
| `salaryMax`           | number | Upper end of the first stated pay range.                                           |
| `salaryCurrency`      | string | Currency of the pay range (ISO code, such as USD).                                 |
| `salaryPeriod`        | string | `hour`, `day`, `week`, `month` or `year`, when the posting says.                   |
| `descriptionHtml`     | string | Full job description as HTML.                                                      |
| `descriptionText`     | string | Full job description as plain text.                                                |

<details><summary>Example output</summary>

```json
{
  "jobReqId": "JR361423",
  "jobPostingId": "Employee-Success-Business-Partner-Manager_JR361423",
  "title": "Employee Success Business Partner Manager",
  "url": "https://salesforce.wd12.myworkdayjobs.com/External_Career_Site/job/Illinois---Chicago/Employee-Success-Business-Partner-Manager_JR361423",
  "tenant": "salesforce",
  "siteId": "External_Career_Site",
  "careerSiteUrl": "https://salesforce.wd12.myworkdayjobs.com/External_Career_Site",
  "hiringOrganization": "100 Salesforce, Inc.",
  "location": "Illinois - Chicago",
  "additionalLocations": [
    "Georgia - Atlanta",
    "Washington - Seattle",
    "Indiana - Indianapolis",
    "Texas - Austin"
  ],
  "country": "United States of America",
  "countryCode": "US",
  "remoteType": "Office - Flexible",
  "timeType": "Full time",
  "postedOn": "Posted Today",
  "postedDate": "2026-10-12",
  "applicationDeadline": null,
  "salaryText": "The typical base salary range for this position is $117,400 - $177,600 annually.",
  "salaryMin": 117400,
  "salaryMax": 177600,
  "salaryCurrency": "USD",
  "salaryPeriod": "year",
  "descriptionHtml": "<p style=\"text-align:left\"><i>To get the best candidate experience, please consider applying …",
  "descriptionText": "To get the best candidate experience, please consider applying for a maximum of 3 roles within 12 months …"
}
```

</details>

### 💡 Use cases

- **Job aggregation** — feed job boards, newsletters and niche listing sites with fresh postings from the Workday employers you track, in one format across companies.
- **Salary benchmarking** — collect stated pay ranges by title, location and employer.
- **Hiring signals** — watch which teams and countries a company is hiring in, for sales prospecting or investment research.
- **Recruiting intelligence** — monitor competitors' open roles, how fast they post, and how long roles stay open.
- **Enterprise and public-sector coverage** — many large employers, hospitals, universities and agencies post only on their Workday site, not on the big job boards.

### ❓ FAQ

- **Which companies does it work with?** Any employer whose career site is hosted by Workday, at `myworkdayjobs.com` or `myworkdaysite.com`. Add one URL per company; `maxItems` applies to each URL separately.
- **The careers page is on the company's own domain.** Many companies link from their own site to Workday. Click a job: if the address changes to `myworkdayjobs.com` or `myworkdaysite.com`, use that career site URL.
- **Can I scrape only some jobs?** Yes. Search and filter on the career site, then paste that URL. The keywords and filters (location, job category, time type and the like) carry over.
- **Why does a large company return at most 2,000 jobs?** Some Workday sites show no more than 2,000 results for a single search. To get everything, add several URLs that each filter by a different location or job category.
- **Where does the salary come from?** Workday has no separate pay field, so the Actor reads the pay range the company writes in the posting, usually where pay-transparency laws require it. `salaryText` keeps the original sentence; postings with several ranges report the first one in `salaryMin` and `salaryMax`, and the full text is in the description.
- **Do I need an account, an API key or a proxy?** No. The Actor reads the same public career site any candidate sees, and runs without a proxy by default.
- **Why did a run return fewer jobs than expected?** The search or filters in the URL may match fewer jobs, or the site name may be wrong; the log says when a career site is not found. Open an issue if something looks off.

### 🔗 More scrapers by Anyx

- [Greenhouse Jobs Scraper](https://apify.com/anyxsolutions/greenhouse-jobs-scraper)
- [LinkedIn Jobs Scraper](https://apify.com/anyxsolutions/linkedin-jobs-scraper)
- [Indeed Scraper](https://apify.com/anyxsolutions/indeed-scraper)
- [Glassdoor Scraper](https://apify.com/anyxsolutions/glassdoor-scraper)

### 🤝 Anyx Solutions

We build custom scrapers and data-extraction pipelines.

- Email: tantosthor@gmail.com

### 🖼 Image credit

Image credit: [workday.com](https://www.workday.com/)

# Actor input Schema

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

Workday career site URLs, such as https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite or https://wd1.myworkdaysite.com/recruiting/cvshealth/CVS_Health_Careers. A search typed on the site (?q=…) and the filters you picked are kept. Single job URLs (…/job/<location>/<title>\_<id>) work too.

## `maxItems` (type: `integer`):

Maximum number of jobs to return per start URL. Leave empty to get every matching job on the site.

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

Fetch each job's full posting: description, posting date, country, time type, remote type, extra locations and salary. Adds one fast request per job; turn it off for a quick list of titles and locations from very large career sites.

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

Proxy settings. Workday career sites need no proxy.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite"
    }
  ],
  "maxItems": 5,
  "includeDetails": true,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `overview` (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 = {
    "startUrls": [
        {
            "url": "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite"
        }
    ],
    "maxItems": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("anyxsolutions/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" }],
    "maxItems": 5,
}

# Run the Actor and wait for it to finish
run = client.actor("anyxsolutions/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"
    }
  ],
  "maxItems": 5
}' |
apify call anyxsolutions/workday-jobs-scraper --silent --output-dataset

```

## MCP server setup

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