# Workday Jobs Scraper: Any Career Site, Search by Keyword (`makerio/workday-jobs`) Actor

Get open jobs from any Workday career site (myworkdayjobs.com). Paste a career site URL, type a company name, or search one keyword across thousands of Workday employers at once. Full descriptions, posting dates, all locations, remote type and requisition IDs.

- **URL**: https://apify.com/makerio/workday-jobs.md
- **Developed by:** [Vladyslav Zahorulko](https://apify.com/makerio) (community)
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 0.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.
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

Get every open job from Workday career sites, the ones at `myworkdayjobs.com` used by thousands of large employers. Paste a career site URL, type a company name, or search one keyword across 3,300+ Workday career sites at once. Each job comes with its full description, exact posting date, every location, country, remote type, employment type and requisition ID.

No login, no cookies, no proxies and no browser. The Actor reads the same public job API that the career site itself uses, so you get exactly what candidates see, live.

### What you can do with it

- **Track hiring at specific employers.** Pull all open roles from the companies you follow, or only the new ones each day.
- **Search Workday employers by keyword.** Leave the company list empty, type "data engineer" or "registered nurse", and get matching jobs from every Workday site in the directory.
- **Find hiring signals for sales.** A company that opens ten roles in one team, or mentions a tool you integrate with, is a warm lead. Filter by title, location or keywords in the description.
- **Build a job board or alert.** Schedule the Actor and return only jobs that are new since the last run.
- **Research the market.** Compare open roles, locations and remote policies across competitors.

### How to use it

1. Add companies, one per line. Any of these work:
   - a Workday career site URL: `https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite`
   - any Workday job URL from that site
   - a company careers page that links to Workday
   - a company name, looked up in the built-in directory: `NVIDIA`
2. Optionally type a keyword, which goes to each site's own Workday search, and set filters.
3. Run the Actor and export the results as JSON, CSV or Excel, or read them through the API.

To search all Workday sites in the directory, leave the company list empty and enter a keyword.

### Large career sites

Many Workday sites show at most 2,000 jobs per search. The Actor checks each site: where paging goes on past 2,000 it reads straight through (CVS Health, 18,000+ jobs), and where it stops it splits the search into smaller slices with the site's own filters (NVIDIA, 2,600+ jobs). Either way you get every open job.

### Input

| Field | What it does |
|---|---|
| `companies` | Workday career site URLs, job URLs, careers pages or company names. Optional when `searchText` is set. |
| `searchText` | Keyword sent to Workday's own search. With no companies, searches every site in the directory. |
| `maxJobsPerCompany` | Return at most this many jobs per site, newest first. |
| `maxJobs` | Stop after this many jobs in total. |
| `titleKeywords` | Keep jobs whose title contains any of these words or phrases. |
| `excludeTitleKeywords` | Drop jobs whose title contains any of these. |
| `descriptionKeywords` | Keep jobs that mention any of these in the title or description. |
| `locations` | City, region or country names, two-letter country codes, or `Remote`. Checked against every location of a job. |
| `remoteOnly` | Keep only remote jobs. |
| `employmentTypes` | `full_time`, `part_time`, `contract`, `temporary`, `internship`. |
| `postedWithinDays` | Keep only jobs published in the last N days. Also speeds up the run. |
| `requireSalary` | Keep only jobs whose description states a pay range. |
| `descriptionFormat` | `text` (default), `html`, `both` or `none`. |
| `onlyNewJobs` | Return only jobs that earlier runs did not return. |
| `stateKey` | Name of the monitor, to track several searches separately. |

Keyword filters match whole words and their common endings, in any letter case. `engineer` finds "Engineering" and "Engineers". `intern` finds "Internship" but not "Internal".

Example: senior remote engineering jobs in the US at two companies, posted in the last week.

```json
{
    "companies": ["NVIDIA", "https://salesforce.wd12.myworkdayjobs.com/External_Career_Site"],
    "titleKeywords": ["engineer"],
    "excludeTitleKeywords": ["intern"],
    "locations": ["US"],
    "remoteOnly": true,
    "postedWithinDays": 7
}
```

Example: every "cybersecurity" job across all Workday sites in the directory.

```json
{
    "searchText": "cybersecurity",
    "descriptionFormat": "none"
}
```

### Output

Every job has the same fields. A field is `null` when the company did not publish that information.

```json
{
    "id": "workday:nvidia.wd5/NVIDIAExternalCareerSite:JR2028417-1",
    "ats": "workday",
    "companyName": "NVIDIA",
    "companySlug": "nvidia.wd5/NVIDIAExternalCareerSite",
    "title": "Senior System Software Engineer - Security",
    "location": "US, CA, Santa Clara",
    "locations": ["US, CA, Santa Clara", "US, NC, Remote", "US, TX, Remote", "US, IL, Remote", "US, CA, Remote"],
    "country": "United States of America",
    "countryCode": "US",
    "isRemote": true,
    "workplaceType": "remote",
    "employmentType": "full_time",
    "employmentTypeRaw": "Full time",
    "seniority": "senior",
    "salaryMin": 152000,
    "salaryMax": 241500,
    "salaryCurrency": "USD",
    "salaryInterval": "year",
    "salaryText": "152,000 USD – 241,500 USD",
    "salarySource": "description",
    "postedAt": "2026-11-14T00:00:00.000Z",
    "url": "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite/job/US-CA-Santa-Clara/Senior-System-Software-Engineer---Security_JR2028417-1",
    "requisitionId": "JR2028417",
    "descriptionText": "NVIDIA’s invention of the GPU in 1999 sparked the growth of the PC gaming market...",
    "scrapedAt": "2026-11-15T16:59:23.189Z"
}
```

A run summary is saved as `SUMMARY` in the default key-value store: every site with how many jobs were open, matched and returned, and a message for sites that could not be found.

### Monitoring new jobs

Turn on **Only jobs not returned before** and schedule the Actor daily. The first run returns everything that matches; later runs return only new postings. Use **Monitor name** to keep several searches apart.

### Pricing

You pay per job returned: **$1.00 per 1,000 jobs**, with lower prices on higher Apify plans. Platform usage is included. Filters run before you are charged, so you pay only for jobs you get. Set a maximum cost per run in the run options and the Actor stops exactly there.

### FAQ

**Which companies are supported?**
Any company whose careers site runs on Workday. The address of such a site contains `myworkdayjobs.com`. Many company careers pages send you there when you click a job.

**The Actor did not find my company by name. What now?**
The directory covers 3,300+ career sites found in public web crawls, but not every Workday employer. Open the company's careers page, click any job, and paste the URL you land on.

**Does the keyword search really cover every Workday employer?**
It covers every site in the directory. To add a site, list its URL in `companies`.

**Why is there no department field?**
Workday career sites do not publish the department of a job, only the title, locations and description.

**What about Greenhouse, Lever, Ashby and other job boards?**
Use [Career Site Jobs Scraper](https://apify.com/makerio/career-site-jobs), which covers Workday plus eight other applicant tracking systems in the same output format.

**How fresh is the data?**
Live. Every run reads the career site at that moment. Nothing is served from a cache.

**Is it legal?**
The Actor reads only public job postings that companies publish for anyone to see, without logging in. It collects no personal data. Check the terms that apply to your use case.

### Support

Found a site that does not work, or need a field that is missing? Open an issue on the **Issues** tab with the career site URL.

# Actor input Schema

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

One per line. Paste a Workday career site or job URL (it contains "myworkdayjobs.com"), a company careers page that links to Workday, or a company name ("NVIDIA"), which is looked up in the built-in directory of Workday career sites. Leave empty to search all sites in the directory with the keyword below.

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

Optional. Sent to each career site's own Workday search, the same as typing into its search box, for example "data engineer" or "nurse". With an empty company list, this searches every Workday career site in the directory.

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

Return at most this many jobs for each career site, newest first. Leave empty to get every open job, including sites with more than 2,000 openings.

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

Stop after this many jobs across all sites. Leave empty for no limit. You are charged only for jobs that are returned.

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

Keep jobs whose title contains at least one of these words or phrases, for example "engineer" or "product manager". Not case sensitive. Whole words are matched, with common endings: "engineer" also finds "Engineering", while "AI" does not find "Maintain".

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

Drop jobs whose title contains any of these words or phrases, for example "intern" or "director". "intern" removes "Internship" but keeps "Internal".

## `descriptionKeywords` (type: `array`):

Keep jobs that mention at least one of these terms in the title or the full description, for example "Kubernetes" or "SAP".

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

Keep jobs in any of these places, checked against every location of the job. Use a city, region or country name ("Berlin", "California", "India"), a two-letter country code ("US") or "Remote".

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

Keep only jobs the company marks as remote in Workday, or with "remote" in the location.

## `employmentTypes` (type: `array`):

Keep only these employment types (Workday's "time type").

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

Keep only jobs published in the last N days, for example 7 for the past week. Also makes runs faster, because older jobs are not paged through.

## `requireSalary` (type: `boolean`):

Keep only jobs whose description states a pay range.

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

How to return the full job description. Descriptions, exact posting dates, employment type, remote type and all locations come from one extra request per job. Choose "No description" for the fastest run with list data only.

## `onlyNewJobs` (type: `boolean`):

Remember returned jobs between runs and output only postings that are new since the last run. The first run returns everything that matches. Ideal for a daily schedule that feeds alerts or a CRM.

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

Optional. Runs with the same monitor name share their memory of returned jobs. Use different names to track different searches separately.

## Actor input object example

```json
{
  "companies": [
    "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite",
    "https://salesforce.wd12.myworkdayjobs.com/External_Career_Site"
  ],
  "maxJobsPerCompany": 20,
  "remoteOnly": false,
  "requireSalary": false,
  "descriptionFormat": "text",
  "onlyNewJobs": false
}
```

# Actor output Schema

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

One item per open job posting: title, company, all locations, country, remote type, employment type, seniority, posting date, requisition ID, job link and description.

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

JSON record listing the Workday sites that were searched, how many jobs were open, matched and returned, and a message for sites that could not be found.

# 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",
        "https://salesforce.wd12.myworkdayjobs.com/External_Career_Site"
    ],
    "maxJobsPerCompany": 20
};

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

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

```

## MCP server setup

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