# Workday Jobs Scraper: Any Careers Site, Salary & Job Alerts (`datadesk-io/workday-jobs-scraper`) Actor

Scrape jobs from any Workday careers site (myworkdayjobs.com) or 33 built-in companies: title, locations, country, remote, date, full description, salary range, seniority. Keyword and location filters, only-new mode for job alerts. No login.

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

## Pricing

from $1.20 / 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 Careers Site, Salary & Job Alerts

Scrape **job postings from any Workday careers site** (`*.myworkdayjobs.com`) or from **33 built-in companies** (NVIDIA, Salesforce, Cisco, Intel, Adobe, Accenture, Bank of America, Capital One, Pfizer, Boeing, Disney, Target...) as clean JSON/CSV/Excel: title, all locations, country, remote/hybrid/onsite, exact posting date, full description, **salary range parsed from the description**, seniority, hiring entity and apply URL. **Only-new-jobs mode** for daily job alerts. Uses Workday's own public careers JSON (the one the careers page loads). **No login, no API key, no proxy.**

🇪🇸 **Español:** extrae ofertas de empleo de cualquier portal de carreras de Workday (`*.myworkdayjobs.com`) o de 33 empresas ya incluidas (NVIDIA, Salesforce, Cisco, Intel, Accenture, Bank of America...): título, ubicaciones, país, remoto/híbrido/presencial, fecha de publicación, descripción completa, **rango salarial** detectado en la descripción y URL para postular. Modo **solo ofertas nuevas** para alertas diarias. Sin cuenta ni API key.
🇧🇷 **Português:** extrai vagas de qualquer site de carreiras Workday (`*.myworkdayjobs.com`) ou de 33 empresas já incluídas (NVIDIA, Salesforce, Cisco, Intel, Accenture, Bank of America...): título, locais, país, remoto/híbrido/presencial, data de publicação, descrição completa, **faixa salarial** extraída da descrição e link de candidatura. Modo **somente vagas novas** para alertas diários. Sem login nem API key.

### What you get

- 🏢 **Any Workday careers site**: paste the careers URL (any page of it works) or use a company name from the built-in list. Thousands of large employers use Workday.
- 🔎 **Workday's own keyword search** and **location filter** (when the site has a country/location filter with your term, Workday applies it server-side).
- 📄 **Full job details** (default on): description text + HTML, exact posting date, all locations, country + ISO code, full/part time, hiring legal entity, remote/hybrid/onsite.
- 💰 **Salary range** parsed from the description (min, max, currency, year/month/hour, original text). In our 1,980-job test across 33 companies, **44% of jobs had a salary range** (mostly US pay-transparency ranges).
- 🔔 **Only new jobs** (`onlyNew`, `onlyNewSince`): every row has `isNew` and `firstSeen`. Schedule it daily and pay only for jobs you haven't seen.
- 📈 **More than 2,000 jobs per company**: Workday's search stops at 2,000 results; the Actor splits the search by job category automatically (Micron: 3,105 open jobs).
- 💸 **$1.50 per 1,000 jobs**, plus $0.005 per run. Runs with no results cost nothing.

### Pricing

Pay-per-event: **$0.0015 per job** (Store discounts for Silver/Gold/Platinum/Diamond plans) + $0.005 once per run, charged only if at least one job is saved. Duplicates and jobs filtered out are free. A spending limit is respected: the run stops cleanly at it.

### Input (all optional)

```json
{
  "companies": ["https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite", "salesforce.wd12/External_Career_Site"],
  "companyNames": ["Cisco", "Bank of America"],
  "searchText": "data engineer",
  "locations": ["United States"],
  "remoteOnly": false,
  "postedWithinDays": 14,
  "includeDescription": true,
  "maxJobsPerCompany": 200,
  "maxResults": 1000,
  "onlyNew": true
}
```

**Empty input** reads NVIDIA, Salesforce and Cisco (50 newest jobs each, with descriptions) and returns 150 jobs in about 25 s.

- `companies`: careers URLs like `https://<company>.wd5.myworkdayjobs.com/<Site>` (also `/en-US/` and job links) or the short form `tenant.wdN/Site`. A bare domain without the site name is rejected with a hint.
- `companyNames`: 3M, Accenture, Adobe, Amgen, AstraZeneca, Autodesk, Bank of America, Boeing, Broadcom, Capital One, Chevron, Cisco, CrowdStrike, Disney, General Motors, Gilead, HP, Intel, KLA, Mastercard, Micron, Moderna, Nike, NVIDIA, PayPal, Pfizer, Red Hat, Salesforce, Sanofi, Snap, Target, Workday, Zoom, or `all`.
- `titleKeywords` / `excludeTitleKeywords`: keep or drop by words in the title.
- `onlyNew`: return only jobs that earlier runs with the same input (or the same `stateKey`) didn't return. `onlyNewSince`: a date (`2026-10-01`) or a period (`7 days`).
- Turn `includeDescription` off for a fast list (title, location, relative date, URL): 2,188 Micron jobs in 59 s.

### Output example (real run, 2026-10-28)

```json
{
  "company": "NVIDIA",
  "workdaySite": "NVIDIAExternalCareerSite",
  "jobId": "JR2028784",
  "title": "Senior Account Manager – Medtech",
  "url": "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite/job/US-CA-Santa-Clara/Senior-Account-Manager---Medtech_JR2028784-1",
  "locations": ["US, CA, Santa Clara", "US, TX, Remote", "US, CA, Remote"],
  "country": "United States of America", "countryCode": "US",
  "remote": true, "workplaceType": "remote", "timeType": "Full time",
  "postedAt": "2026-10-28", "postedOnText": "Posted Today",
  "hiringEntity": "2100 NVIDIA USA",
  "seniority": "senior",
  "salaryMin": 224000, "salaryMax": 356500, "salaryCurrency": "USD", "salaryPeriod": "year",
  "salaryText": "224,000 USD - 356,500 USD",
  "descriptionText": "...",
  "isNew": true, "firstSeen": "2026-10-28T15:26:18+00:00",
  "postingKey": "nvidia.wd5/nvidiaexternalcareersite/senior-account-manager---medtech_jr2028784-1"
}
```

### Tested (Oct 28, 2026, on Apify, no proxy)

- All 33 built-in companies × 60 jobs with details: **1,980 jobs in 139 s**, 0 blocks, 100% with description and country, 44% with salary.
- Micron (3,105 open jobs, above Workday's 2,000 search cap): 2,188 unique jobs in 59 s via the automatic category split.
- Only-new: second run on the same board returned 0 jobs and cost nothing.

### Honest limits

- **Salary** comes from the description text: when the company doesn't publish a range there is none (common outside the US). `salaryText` shows exactly what was parsed.
- **Seniority** is a guess from the title (`null` when unclear).
- `remote: true` means at least one location or the remote type says remote/virtual/home; many such jobs also list offices.
- Without details, `postedAt` is derived from Workday's "Posted N days ago" text (30+ days is approximate).
- Some companies run several Workday sites (e.g. one for students). Add each site URL you need.
- Job postings are public, but check the terms that apply to your use before republishing them.

### Use cases

Job alerts and job boards for specific employers · recruiting and sourcing (who is hiring for what, where) · salary benchmarking from pay-transparency ranges · market and competitor intelligence (hiring trends by team, country, seniority) · sales triggers (companies hiring for a role you sell to) · feeding AI agents and dashboards.

### Scheduling and integrations

Schedule a task daily with `onlyNew: true` and send new jobs to Slack, email, Google Sheets, Make, Zapier or n8n with webhooks/integrations. REST: `POST https://api.apify.com/v2/acts/datadesk-io~workday-jobs-scraper/run-sync-get-dataset-items?token=...`.

### Use with AI agents (MCP)

This Actor works as a tool for AI agents through the [Apify MCP server](https://mcp.apify.com). Add it to Claude, ChatGPT, Cursor, VS Code or any MCP client:

`https://mcp.apify.com/?tools=datadesk-io/workday-jobs-scraper`

Sign in with OAuth or `Authorization: Bearer <APIFY_TOKEN>`. Local stdio config:

```json
{"mcpServers": {"workday-jobs": {"command": "npx", "args": ["-y", "@apify/actors-mcp-server", "--tools", "datadesk-io/workday-jobs-scraper"], "env": {"APIFY_TOKEN": "<token>"}}}}
```

**What goes in → what comes out:** Input: Workday careers URLs or company names, optional keyword, location, date and title filters, caps. Output: one JSON row per job with title, locations, country, remote type, posting date, description, salary range, seniority and URLs. Every input is optional and every output field is documented.

**Example prompt:** "Which remote data engineering jobs did NVIDIA, Salesforce and Cisco post on Workday in the last 7 days, and what salary ranges do they show?" Use `maxJobsPerCompany` or `maxResults` to cap the cost of one call.

### FAQ

**Do I need a Workday account or API key?** No. The Actor reads the public JSON behind each careers page.
**My company isn't in the list.** Open its careers page; if the URL contains `myworkdayjobs.com`, paste it in `companies`.
**Related:** need Greenhouse, Lever, Ashby, SmartRecruiters and 12 more ATS in one run? See [ATS Jobs Scraper](https://apify.com/datadesk-io/ats-jobs-scraper). LatAm job boards: [Computrabajo & Bumeran Jobs Scraper](https://apify.com/datadesk-io/latam-jobs-scraper).
**Issues?** Report them on the Issues tab. We usually reply within 48 h.

# Actor input Schema

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

Careers site URLs on \*.myworkdayjobs.com, e.g. https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite (any page of the site works, also job links and /en-US/ paths) or the short form tenant.wdN/Site (nvidia.wd5/NVIDIAExternalCareerSite). Company names from the built-in list also work here. If this and 'Company names' are empty, the Actor reads NVIDIA, Salesforce and Cisco.

## `companyNames` (type: `array`):

Companies whose Workday site is already known, so you don't need the URL: 3M, Accenture, Adobe, Amgen, AstraZeneca, Autodesk, Bank of America, Boeing, Broadcom, Capital One, Chevron, Cisco, CrowdStrike, Disney, General Motors, Gilead, HP, Intel, KLA, Mastercard, Micron, Moderna, Nike, NVIDIA, PayPal, Pfizer, Red Hat, Salesforce, Sanofi, Snap, Target, Workday, Zoom. Use 'all' for all 33.

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

Searched by Workday itself on every site (same as the search box on the careers page), e.g. 'data engineer'. Empty = all open jobs.

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

Country, state or city names, e.g. 'United States', 'Germany', 'Austin'. When the site has a Workday location filter with that name it is applied by Workday (fast, and it gets past the 2,000-job search limit); otherwise jobs are filtered by their location text.

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

Keep only jobs whose location or remote type says remote / virtual / work from home.

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

Keep only jobs posted in the last N days (Workday posting date).

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

Keep only jobs whose title contains at least one of these words (case-insensitive).

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

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

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

Open every job to get the full description (text + HTML), exact posting date, all locations, country, time type, hiring entity and the salary range parsed from the description. Turn off for a faster list (title, location, relative date, URL).

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

Cap per site. Workday serves at most 2,000 jobs per search; above that the Actor splits the search by job category automatically.

## `maxResults` (type: `integer`):

Hard cap on jobs for the whole run (all sites). Never exceeded.

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

Return only jobs that earlier runs with the same input (or the same 'State key') did not return. The first run returns everything and remembers it. Schedule the Actor daily for job alerts: you pay only for new jobs.

## `onlyNewSince` (type: `string`):

Date (2026-10-01) or period (7 days, 24 hours). Keeps jobs first seen by this Actor since then; jobs never seen before are judged by their Workday posting date.

## `stateKey` (type: `string`):

Name of the memory used by the only-new modes (stored in your key-value store 'workday-jobs-scraper-state'). Default: derived from the sites, keyword, locations and title keywords. Use the same key in several tasks to share one memory.

## Actor input object example

```json
{
  "companies": [
    "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite"
  ],
  "remoteOnly": false,
  "includeDescription": true,
  "maxJobsPerCompany": 50,
  "onlyNew": false
}
```

# Actor output Schema

## `overview` (type: `string`):

One row per job posting (see dataset schema for field descriptions).

# 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 = {
    "companies": [
        "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("datadesk-io/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 = { "companies": ["https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite"] }

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

```

## MCP server setup

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