# Workday Jobs Scraper · Any Career Site, Salary, Only New (`thequietstack/workday-jobs`) Actor

Scrape jobs from any Workday career site (myworkdayjobs.com): title, location, posted date, full description, time type, req ID and the salary range when the posting states one. Keyword, location and category filters, posted-within-days, only-new mode for job alerts. No login.

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

## Pricing

from $1.26 / 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.
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 · Any Career Site, Salary, Only New

**Scrape jobs from any Workday career site** (`*.myworkdayjobs.com`) — NVIDIA, Salesforce, Adobe, Intel and thousands of other employers run their careers page on Workday. One flat row per job with **title, location, posted date, full description, time type, req ID and the salary range** when the posting states one. Keyword, location and category filters, *posted within N days*, and an **only-new mode for job alerts**. No login, no browser.

### What does Workday Jobs Scraper do?

Paste the URL of an employer's Workday career site. The Actor reads the same public JSON the careers page uses and returns every matching job:

- **Salary as numbers:** US pay-transparency ranges like *"The base salary range is 232,000 USD - 368,000 USD"* become `salaryMin`, `salaryMax`, `salaryCurrency`, `salaryPeriod` (yearly or hourly). No range in the text → `null`, never guessed.
- **Filters that use the site's own facets:** words like `Germany`, `Remote` or `Engineering` are matched against the filters of each employer's site, so the site itself does the filtering.
- **Job alerts:** *Only new jobs* remembers what was delivered and returns only new postings on the next scheduled run.

### Who is it for?

Job seekers and recruiters who watch specific employers, HR and comp analysts collecting salary ranges, job boards and talent-intelligence tools that need a reliable feed from Workday employers.

### Input example

```json
{
    "careerSites": [
        "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite",
        "https://salesforce.wd12.myworkdayjobs.com/External_Career_Site",
        "https://intel.wd1.myworkdayjobs.com/External"
    ],
    "searchText": "engineer",
    "locations": ["United States", "Germany"],
    "postedWithinDays": 7,
    "maxJobsPerSite": 100
}
```

Any URL from the career site works (with locale like `/en-US/` or a job link). Find an employer's site by opening their careers page — the address contains `myworkdayjobs.com`.

### Output example

Real row (NVIDIA, 30 Oct 2026; description shortened):

```json
{
    "company": "2100 NVIDIA USA",
    "title": "Senior Manager, Engineering - Data Center Firmware",
    "location": "US, CA, Santa Clara",
    "additionalLocations": ["US, CA, Remote"],
    "country": "United States of America",
    "postedOn": "Posted Yesterday",
    "postedDaysAgo": 1,
    "startDate": "2026-10-29",
    "timeType": "Full time",
    "jobReqId": "JR2019986",
    "salaryMin": 272000,
    "salaryMax": 431250,
    "salaryCurrency": "USD",
    "salaryPeriod": "YEAR",
    "salaryText": "272,000 USD - 431,250 USD",
    "description": "NVIDIA's invention of the GPU in 1999 sparked the growth of the PC gaming market, … ",
    "url": "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite/job/US-CA-Santa-Clara/Senior-Manager--Engineering---Data-Center-Firmware_JR2019986",
    "careerSite": "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite",
    "scrapedAt": "2026-10-30T11:37:21.562Z"
}
```

`company` is the hiring legal entity as Workday names it. `postedDaysAgo` comes from Workday's "Posted Today / Yesterday / N Days Ago"; "30+ Days Ago" gives `30` with `postedDaysAgoIsMinimum: true`. In the first test run 18 of 20 NVIDIA jobs had a parsed salary range (all US postings).

The `SUMMARY` record shows per site: jobs on the site, matching jobs, which site filters were applied (e.g. `Country: Germany`), jobs written, skipped as older or already delivered.

### How much does it cost?

Pay per event: **$0.0018 per job row** on the Free plan (lower on paid Apify plans), plus a tiny start fee. **100 jobs = $0.18, 1,000 jobs = $1.80.**
Never charged: the free status row of an empty run, jobs older than *postedWithinDays*, jobs already delivered in only-new mode, invalid URLs and sites that do not answer. `maxJobs` caps every run.

### Job alerts in three steps

1. Add the career sites (and optional keyword/locations).
2. Switch on **Only new jobs**; use one *Memory name* per watch list.
3. Schedule the Actor (e.g. every morning). The first run is the baseline, later runs return only new postings; a run without new jobs returns one free status row.

### Honest limits

- Only Workday sites (`*.myworkdayjobs.com`). Employers on other systems (Greenhouse, Lever, SuccessFactors …) are not covered; a non-Workday URL is reported in `SUMMARY.invalid`.
- Salary is read from the posting text. Postings without a stated range (most outside the US) have `salaryMin: null`.
- A location word that matches none of the site's filters is reported as a failed filter instead of silently returning all jobs.
- Workday shows posting age in days, not exact timestamps; `startDate` is the posting start date the employer set.
- Sites can have thousands of jobs; *Full description* opens every job (one extra request each). Switch it off for fast title-only lists.

### Is it legal?

The Actor reads the public job board that each employer publishes for applicants, with polite delays. The career sites' robots.txt does not restrict these endpoints. Job postings describe positions, not private persons. Respect the employers' terms when you republish postings.

### Feedback

Missing an employer that uses Workday but fails? Open an issue on the **Issues** tab with the URL. A short review on the Store page helps others find the Actor.

# Actor input Schema

## `careerSites` (type: `array`):

Career site URLs on myworkdayjobs.com, e.g. https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite (a job URL from the site works too).

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

Search words as in the site's search box (title, skills, ...). Empty = all jobs.

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

Words matched against the site's own location filters (country, city, site, Remote). Example: "United States", "Berlin", "Remote".

## `jobCategories` (type: `array`):

Words matched against the site's other filters (job family, job type, time type). Example: "Engineering", "Intern".

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

Keep only jobs posted at most this many days ago (Workday shows Today, Yesterday, N Days Ago, 30+ Days Ago).

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

Maximum number of jobs to collect from each career site.

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

Hard cap for the whole run (and therefore the bill).

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

Open every job: full description text, time type, country, start date and the salary range if stated. One extra request per job.

## `onlyNew` (type: `boolean`):

Remember delivered jobs and return only jobs not delivered before. Run it on a schedule for job alerts.

## `stateStoreName` (type: `string`):

Name of the key-value store that remembers already seen items for only-new mode. Use a different name per alert.

## `resetMemory` (type: `boolean`):

Forget previously seen items and return everything again on this run.

## `delayMs` (type: `integer`):

Pause between requests in milliseconds. Raise it if you see rate-limit errors.

## Actor input object example

```json
{
  "careerSites": [
    "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite"
  ],
  "maxJobsPerSite": 20,
  "maxJobs": 1000,
  "includeDescription": true,
  "onlyNew": false,
  "stateStoreName": "workday-jobs-state",
  "resetMemory": false,
  "delayMs": 250
}
```

# Actor output Schema

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

No description

## `summary` (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 = {
    "careerSites": [
        "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite"
    ],
    "maxJobsPerSite": 20
};

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

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

```

## MCP server setup

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

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/cLVmdZzWzHQ2rOHXd/builds/WMyZvhBABbsxAI5mq/openapi.json
