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

Scrape every open job from any Workday careers site (myworkdayjobs.com): title, locations, date, link and full description. $0.80 per 1,000 jobs.

- **URL**: https://apify.com/outscope/workday-jobs-scraper.md
- **Developed by:** [Outscope](https://apify.com/outscope) (community)
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.80 / 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.

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** extracts every open job from any **Workday career site** (`*.myworkdayjobs.com`): title, locations, posting date, job ID, link and the **full job description** as clean text. Paste a company's careers URL, press Start, and download the jobs as JSON, CSV or Excel, or read them through the Apify API. No login, no API key, no browser.

It is the Workday reader [Outscope](https://outscope.co) runs every day to find companies whose job postings show they need what you sell, published as an Actor at **$0.80 per 1,000 jobs**.

### What does Workday Jobs Scraper do?

- **Scrapes any Workday careers site**: give it `https://company.wd5.myworkdayjobs.com/Careers`, or a single job's link, and it reads the whole site.
- **Full descriptions as plain text**: HTML removed, with **emails and phone numbers stripped** from the text.
- **Exact posting dates** from each job's page, not Workday's "Posted 30+ Days Ago" (with Full descriptions on).
- **Filters before you pay**: keywords (Workday's own search), posted in the last N days, and a cap per company.
- **Many companies in one run**: three career sites at a time, each read politely at one request a second.
- **Stable job IDs**, so a scheduled run can tell new postings from ones you already have.

### What data can you scrape from Workday?

| Field | What it is |
| --- | --- |
| `title` | The job title as posted |
| `url` | The job's page on the career site |
| `jobId` | Workday's ID for the posting, stable across runs |
| `tenant` | The company's Workday name, such as `nvidia` |
| `boardUrl` | The career site the job came from |
| `locations` | Every location the posting lists |
| `remote` | `true` when a location says remote, `null` when none does |
| `postedAt` | The posting date (ISO 8601), `null` when Workday gives none |
| `description` | The full job description as plain text, contact details removed |
| `scrapedAt` | When the row was read |

### How to scrape Workday jobs

1. Open the company's careers page and copy its address. Workday sites look like `https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite`.
2. Paste it into **Workday career sites**. Add as many companies as you like, one URL each.
3. Optionally add **Keywords**, **Posted in the last N days** or **Most jobs per career site**.
4. Press **Start**. Each company's jobs land in the dataset as they're read.
5. Export the dataset as JSON, CSV, Excel or XML, or fetch it with the API.

Turn off **Full descriptions** if you only need titles, locations and links: the run then reads Workday's lists and skips each job's page, which is much faster.

#### Input example

```json
{
  "startUrls": [{ "url": "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite" }],
  "searchText": "sales",
  "postedWithinDays": 30,
  "includeDescription": true,
  "maxJobsPerBoard": 200
}
```

#### Output example

```json
{
  "title": "DFT ATPG Engineer",
  "url": "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite/job/Israel-Yokneam/DFT-ATPG-Engineer_JR2029798",
  "jobId": "JR2029798",
  "tenant": "nvidia",
  "boardUrl": "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite",
  "locations": ["Israel, Yokneam", "Israel, Tel Aviv"],
  "remote": null,
  "postedAt": "2026-11-09T00:00:00.000Z",
  "description": "Are you passionate about working on a team that is at the cutting and bleeding edge of hardware technology? ...",
  "source": "workday",
  "scrapedAt": "2026-11-09T19:59:54.000Z"
}
```

Each run also writes a `SUMMARY` record to its key-value store: per career site, how many jobs it returned and whether it read the whole list.

### How much does it cost to scrape Workday?

**$0.80 per 1,000 jobs**, charged per row in the dataset (pay per event). Apify's platform usage is included in that price.

- 1,000 jobs: $0.80
- 10,000 jobs: $8
- A career site that fails or has no open jobs: nothing

Set a spending limit on the run and it stops there. Filters (keywords, recent jobs, a cap per company) cut what you pay, since only the jobs that reach the dataset are charged.

### Use cases

- **Sales prospecting from hiring signals**: a company hiring its first SDRs, a data team or a security lead is about to buy. [Outscope](https://outscope.co) does this end to end: it scores each company against what you sell, quotes the line from the posting that shows why, and finds who to email.
- **Job boards and aggregators**: keep listings from enterprise employers on Workday up to date with a daily schedule.
- **Labor market and competitor research**: track which roles, teams and locations a company is hiring for over time.
- **Recruiting and talent intelligence**: watch target employers for new openings.

### Workday jobs API and integrations

Run it from your own code with the [Apify API](https://docs.apify.com/api/v2) or the JavaScript and Python clients, on a schedule, or from Make, Zapier, n8n and other tools Apify connects to. Webhooks can call your endpoint when a run finishes. AI agents can call it through Apify's MCP server.

### FAQ

#### Which Workday sites does it support?

Career sites on `*.myworkdayjobs.com`, the address most companies on Workday use. Sites on `myworkdaysite.com` aren't supported yet.

#### How do I find a company's Workday careers URL?

Open the company's careers page and click any job. If the address contains `myworkdayjobs.com`, copy it: a job's link works as input too.

#### Why did I get fewer jobs than the site shows?

Filters leave jobs out, and each career site stops at **Most jobs per career site** (up to 5,000). With **Posted in the last N days** set, jobs without a date are left out. The run's `SUMMARY` record says whether the whole list was read.

#### Do I need a proxy?

Usually not. If a career site blocks the run, turn on a proxy in the input and run it again.

#### Is it legal to scrape Workday job postings?

The Actor reads public job pages only, without logging in, at a low rate, and removes emails and phone numbers from descriptions. Whether your use is allowed depends on what you do with the data and where you are, so check with your own counsel. This isn't legal advice.

#### Can I get new jobs every day?

Yes. Schedule the Actor daily and compare `jobId` with your last run to find new postings.

### Find the companies that need what you sell

Job postings say what a company is about to spend on. [Outscope](https://outscope.co) reads them from Workday, Greenhouse, Lever, Ashby and Workable, ranks the companies that need what you sell right now, shows the line from each posting that explains why, and finds who to email. Try it on your own website at [outscope.co](https://outscope.co).

Questions or a site that doesn't work? Open an issue on the Actor's **Issues** tab.

# Actor input Schema

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

One URL per company, as it opens in the browser, such as https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite. A job's link works too: the Actor reads its whole career site.

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

Only jobs matching these words, searched by Workday itself, such as "sales" or "data engineer". Leave empty for every job.

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

Only jobs posted in this many days. Leave empty for every job. Jobs whose date Workday doesn't give are left out when this is set.

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

Open each job for its description and exact date. Turn off for titles, locations and links only, which is much faster.

## `maxJobsPerBoard` (type: `integer`):

Stops each career site at this many jobs.

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

Most career sites answer without one. Use a proxy for a site that blocks the run.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite"
    }
  ],
  "includeDescription": true,
  "maxJobsPerBoard": 20
}
```

# Actor output Schema

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

Dataset containing scraped open job postings with titles, locations, dates, and full descriptions.

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

Status and count of jobs scraped per career site.

# 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"
        }
    ],
    "maxJobsPerBoard": 20
};

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

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

```

## MCP server setup

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