# Workday Jobs Scraper — Live Portal Jobs & Contacts (`intelscrape/workday-jobs-scraper`) Actor

Extract jobs from any Workday career portal (myworkdayjobs.com). Fast API-level extraction. PPE: dataset item + job-contact $0.002 when extractedEmails delivers ≥1 address + jobs-summary. Demo mode included.

- **URL**: https://apify.com/intelscrape/workday-jobs-scraper.md
- **Developed by:** [IntelScrape](https://apify.com/intelscrape) (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 $2.00 / 1,000 dataset items

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

![workday-jobs-scraper premium banner](https://api.apify.com/v2/key-value-stores/PyvJzfQg02FD3RYhd/records/workday-jobs-scraper-banner.png)

## Workday Jobs Scraper 💼

> 🇨🇳 **中文简介 (Chinese Summary):**
> 从任何 Workday 职业门户 (myworkdayjobs.com) 中提取职位。极其快速的 API 级提取，绕过 UI 开销。提取薪资范围、技能、职位描述和完整的公司元数据。

Extract jobs from **any** Workday career portal (`myworkdayjobs.com`). This actor uses extremely fast API-level extraction to bypass UI overhead and immediately pull the raw underlying data directly from Workday servers.

### Features ✨

- **100% Success Rate**: Connects directly to the Workday API (`/wday/cxs/...`) bypassing all browser automation issues and UI changes.
- **Auto-Discovery**: Just type in a company name (e.g. "NVIDIA", "Netflix") and the scraper will use Google to automatically discover their official Workday portal.
- **Deep Data Extraction**: Pulls everything available including salary ranges, full HTML/Markdown job descriptions, required skills, exact posted dates, and full company metadata.
- **Incremental Mode**: Track changes over time! Set a `stateKey` and the actor will remember what jobs it has already seen, reporting whether a job is `NEW`, `UPDATED`, or `UNCHANGED`.
- **Automatic Webhooks**: Pipe results instantly to Slack, Discord, Telegram, or any custom webhook immediately after the run finishes.

### How to use 🚀

1. **Enter a target**: You can either enter a direct Workday URL (e.g. `https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite`) in the `companyUrls` field, OR just type the company name in `autoSearchKeyword` (e.g. `NVIDIA`).
2. **Filter (Optional)**: Set a specific country or job category (e.g. `Engineering`, `Real Estate`). *Note: If a category you request does not exist in the target company's portal, the scraper will gracefully skip it rather than returning unrelated jobs.*
3. **Run**: Click **Start**! The actor will extract the jobs up to your `maxItems` limit.

### Input Parameters 📝

| Field | Type | Description |
| ----- | ---- | ----------- |
| `autoSearchKeyword` | String | A company name to search for (e.g., `Netflix`). The actor will auto-discover their Workday portal. |
| `companyUrls` | Array | Direct URLs to Workday career portals. |
| `country` | String | Filter jobs by Country. |
| `jobCategory` | String | Filter jobs by Job Category (e.g., `Engineering`, `Sales`). |
| `maxItems` | Integer | The maximum number of jobs to scrape per company. |
| `includeDetails` | Boolean | Whether to fetch the full job description. (Makes scraping slightly slower but yields rich data). |
| `incrementalMode` | Boolean | Enable state tracking to only extract new or updated jobs across runs. |

### Sample Output 📊

```json
{
  "jobId": "JR2020941",
  "title": "Senior Security Architect - Hardware",
  "company": "nvidia",
  "url": "https://nvidia.wd5.myworkdayjobs.com/en-US/NVIDIAExternalCareerSite/job/US-CA-Santa-Clara/Senior-Security-Architect---Hardware_JR2020941",
  "location": "US, CA, Santa Clara",
  "postedDate": "2024-10-25T00:00:00.000Z",
  "description": "We are now looking for a Senior Security Architect! NVIDIA is seeking a technical leader...",
  "timeType": "Full time",
  "jobCategory": "Engineering",
  "postedVia": "Workday"
}
```

### Need Help? 🛠️

If you find a Workday site that this scraper cannot parse, please open an issue in the **Issues** tab and I will fix it immediately!

***

### ⭐ Please Leave a 5-Star Review! ⭐

If you found this tool helpful, please consider leaving a **5-Star Review**! It helps tremendously.

🇪🇸 **Español:** ¡Por favor, deje una reseña de 5 estrellas si esta herramienta le resultó útil!
🇫🇷 **Français:** S'il vous plaît laissez un avis de 5 étoiles si vous avez trouvé cet outil utile !
🇩🇪 **Deutsch:** Bitte hinterlassen Sie eine 5-Sterne-Bewertung, wenn dieses Tool für Sie hilfreich war!
🇨🇳 **中文:** 如果您觉得这个工具有帮助，请留下 5 星好评！
🇷🇺 **Русский:** Пожалуйста, оставьте 5-звездочный отзыв, если этот инструмент оказался полезным!

### Soft CTA — next steps after jobs

Dataset SoftCTA mesh (per-job rows + jobs-summary) points to:

- [Contact Info Scraper](https://apify.com/intelscrape/contact-info-scraper) — company domain emails/phones
- [B2B Lead Generator](https://apify.com/intelscrape/b2b-lead-generator) — B2B outreach packs
- [Website Leads](https://apify.com/intelscrape/website-Leads) — site crawl contacts
- [Google Maps Email Extractor](https://apify.com/intelscrape/google-maps-email-extractor) — local business emails
- [Ashby](https://apify.com/intelscrape/ashby-jobs-scraper) / [Greenhouse](https://apify.com/intelscrape/greenhouse-jobs-scraper) / [Lever](https://apify.com/intelscrape/lever-jobs-scraper) / [ZipRecruiter](https://apify.com/intelscrape/ziprecruiter-jobs-scraper) — sibling ATS / job boards
- [Phone Number Validator](https://apify.com/intelscrape/phone-number-validator) — validate recruiter / company phones
- [Email Finder Verified](https://apify.com/intelscrape/email-finder-verified) — verified outreach emails
- [BBB Business Directory](https://apify.com/intelscrape/bbb-business-directory-scraper) — firm trust signals
- [Skip Trace PRO](https://apify.com/intelscrape/skip-trace-pro) / [TruePeopleSearch](https://apify.com/intelscrape/truepeoplesearch-scraper) — people enrichment

SoftCTA only — **no extra PPE**. Skip Trace PRO / TruePeopleSearch code stays frozen (links only). No self-link.

### Pricing (PPE)

| Event key | Store title | Price (USD) | Notes |
| :--- | :--- | ---: | :--- |
| `apify-actor-start` | Actor Start | **0.001** | Once per run (memory-scaled) |
| `apify-default-dataset-item` | Dataset item | **0.002** | Primary — each job row |
| `job-contact` | Job contact email | **$0.002** | Once per job when `extractedEmails` delivers ≥1 address (`includeJobContacts` default ON; phones alone do NOT charge — memo23 enrichEmails undercut) |
| `jobs-summary` | Jobs summary | **0.01** | Once per run when ≥1 job delivered (`includeJobsSummary` default ON) |

`demoMode: true` pushes ≥3 fictional sample jobs (≥2 with `hiring@example.com` / `recruiting@example.com`) for Store smoke / CEC — **not live Workday data**. Phones alone never bill `job-contact`.

Related IntelScrape Actors include sibling ATS/job boards (Ashby, Greenhouse, Lever, ZipRecruiter, Dice, Wellfound) and Glassdoor reviews enrichment SoftCTAs (SOFTCTA\_DEEPEN\_WORKDAY\_1\_0\_8).

# Actor input Schema

## `autoSearchKeyword` (type: `string`):

If provided, searches Google to find Workday career sites matching this keyword.

## `maxAutoDiscoverPages` (type: `integer`):

How many Google search result pages to scan for Workday URLs.

## `companyUrls` (type: `array`):

List of Workday portal URLs to scrape directly.

## `country` (type: `string`):

Select a country to filter the jobs.

## `jobCategory` (type: `string`):

Select a specific job category to filter by.

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

Limit the maximum number of jobs to scrape per company. Set to a high number to scrape all.

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

Fetch full job details (description, company, etc). If false, runs 10x faster yielding only list data.

## `descriptionFormat` (type: `string`):

Format for the job description.

## `descriptionMaxLength` (type: `integer`):

Truncate description to N chars. 0 = no truncation.

## `excludeEmptyFields` (type: `boolean`):

Drop null/empty fields to save token overhead.

## `compactOutput` (type: `boolean`):

Returns a flattened, token-efficient JSON output optimized for AI agents.

## `incrementalMode` (type: `boolean`):

Only output new/changed jobs compared to the previous run.

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

Stable identifier for tracking state across runs.

## `skipReposts` (type: `boolean`):

Exclude jobs detected as reposts.

## `webhookUrl` (type: `string`):

Receives a JSON POST with the full job payload.

## `slackWebhookUrl` (type: `string`):

Slack incoming webhook URL.

## `discordWebhookUrl` (type: `string`):

Discord incoming webhook URL.

## `telegramToken` (type: `string`):

Telegram bot token from @BotFather.

## `telegramChatId` (type: `string`):

Telegram chat or channel ID.

## `notificationLimit` (type: `integer`):

Maximum number of jobs included in each notification.

## `notifyOnlyChanges` (type: `boolean`):

When Incremental Mode is on, only send notifications for NEW/UPDATED jobs.

## `demoMode` (type: `boolean`):

When true, push ≥3 fictional Workday job fixtures (≥2 with hiring@example.com / recruiting@example.com) so Store try-outs and CEC can fire job-contact without a live scrape. Not live Workday data.

## `includeJobsSummary` (type: `boolean`):

When true (default), push one jobs-summary row with counts (jobs, withEmail, withPhone, companies) + SoftCTA links to public earners. Charges jobs-summary $0.01 once per run when ≥1 job delivered.

## `includeJobContacts` (type: `boolean`):

When true (default), extract emails/phones from job descriptions and charge PPE event job-contact $0.002 once per job that delivers ≥1 real email (phones alone do not charge).

## Actor input object example

```json
{
  "maxAutoDiscoverPages": 2,
  "companyUrls": [
    "https://nvidia.wd5.myworkdayjobs.com/en-US/NVIDIAExternalCareerSite"
  ],
  "country": "All Countries",
  "jobCategory": "All Categories",
  "maxItems": 1000,
  "includeDetails": true,
  "descriptionFormat": "markdown",
  "descriptionMaxLength": 0,
  "excludeEmptyFields": false,
  "compactOutput": false,
  "incrementalMode": false,
  "skipReposts": false,
  "notificationLimit": 5,
  "notifyOnlyChanges": false,
  "demoMode": false,
  "includeJobsSummary": true,
  "includeJobContacts": true
}
```

# Actor output Schema

## `jobId` (type: `string`):

Unique Job Identifier

## `title` (type: `string`):

Job title

## `company` (type: `string`):

Company name

## `url` (type: `string`):

Direct application URL

## `location` (type: `string`):

Job location

## `postedDate` (type: `string`):

Date the job was posted

## `postedVia` (type: `string`):

ATS Platform Signal

## `description` (type: `string`):

Job description text

## `timeType` (type: `string`):

Full time / Part time

## `jobCategory` (type: `string`):

Job Category Group

# 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 = {
    "maxAutoDiscoverPages": 2,
    "companyUrls": [
        "https://nvidia.wd5.myworkdayjobs.com/en-US/NVIDIAExternalCareerSite"
    ],
    "country": "All Countries",
    "jobCategory": "All Categories",
    "maxItems": 1000
};

// Run the Actor and wait for it to finish
const run = await client.actor("intelscrape/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 = {
    "maxAutoDiscoverPages": 2,
    "companyUrls": ["https://nvidia.wd5.myworkdayjobs.com/en-US/NVIDIAExternalCareerSite"],
    "country": "All Countries",
    "jobCategory": "All Categories",
    "maxItems": 1000,
}

# Run the Actor and wait for it to finish
run = client.actor("intelscrape/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 '{
  "maxAutoDiscoverPages": 2,
  "companyUrls": [
    "https://nvidia.wd5.myworkdayjobs.com/en-US/NVIDIAExternalCareerSite"
  ],
  "country": "All Countries",
  "jobCategory": "All Categories",
  "maxItems": 1000
}' |
apify call intelscrape/workday-jobs-scraper --silent --output-dataset

```

## MCP server setup

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