# Workday Jobs Scraper & API: All Open Jobs, $2 per 1,000 (`worthwhile_quinsy/workday-jobs-scraper`) Actor

Scrape Workday career sites: every open job from any company's myworkdayjobs.com careers page in seconds. Filter by role, country, remote. No login.

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

## Pricing

from $1.20 / 1,000 job rows

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: all open jobs from Workday job boards

Get **every open job from any company's Workday careers page**, and every board you add is refreshed daily in our database. One clean row per job with title, company, location, countries, remote flag, department, seniority,
tech stack, salary (when published), dates and the apply link.

![Output preview: one row per result](https://raw.githubusercontent.com/ekkysoka7-maker/job-market-data-examples/main/images/jobs-preview.png)

No browser, no proxies, no login: the Actor reads Workday's public job board feed, the same data a candidate sees on the
careers page, so runs take seconds and do not break when the page design changes. Use it as a **Workday jobs API**: one
HTTP call returns the rows as JSON.

### Why this Workday scraper

- **Cheap and predictable:** $2 per 1,000 jobs (less on paid Apify plans). Many career-site job APIs charge $4 to $12.
- **Fast and direct:** each Workday career site is read live through its public job search, about 2 minutes
  for a site with 1,000 open jobs, with no browser.
- **Clean fields you would otherwise build yourself:** seniority, tech stack,
  countries, remote flag and the date each job was first seen.

### What you can do with it

- Scrape all jobs from a Workday job board: paste `https://<company>.wd5.myworkdayjobs.com/<Site>` or just the company slug
- Monitor Workday careers pages of target companies and get only new jobs every day
- Search Workday jobs across every company we track by job title, country, remote and salary
- Build a job board, newsletter or Slack alert from Workday companies
- Export Workday job postings to CSV, Excel, JSON, Google Sheets or your database
- Feed Workday jobs to an AI agent through Apify's MCP server

### Input

- **Workday job board URLs or company slugs** (`boardUrls`): `<company>.wd5.myworkdayjobs.com/<Site>` (copy the address of the company's Workday careers page; any job link from it works too, and `wdN.myworkdaysite.com/recruiting/<company>/<Site>` is supported). Leave empty to search all Workday boards we track.
- **Job title keywords**, **exclude keywords**, **locations**, **countries**, **remote only**, **departments**,
  **seniority**, **technologies**, **posted within / new within (days)**, **include duplicate postings** and **max results**.

Example: all open engineering jobs at two Workday companies

```json
{ "boardUrls": ["https://<company>.wd5.myworkdayjobs.com/<Site>", "another-company"], "keywords": ["engineer"] }
```

Example: remote Workday jobs posted in the last 7 days

```json
{ "remoteOnly": true, "postedWithinDays": 7, "maxResults": 200 }
```

### Output

One row per job:

```json
{
  "title": "Senior Backend Engineer",
  "company": "Acme",
  "ats": "workday",
  "location": "Remote (US)",
  "countries": ["US"],
  "is_remote": true,
  "department": "Engineering",
  "seniority": "senior",
  "technologies": ["Python", "PostgreSQL", "AWS"],
  "salary_min": 170000,
  "salary_max": 210000,
  "salary_currency": "USD",
  "salary_period": "year",
  "salary_type": "base",
  "visa_sponsorship": null,
  "published_at": "2026-10-01T09:00:00+00:00",
  "first_seen": "2026-10-01",
  "url": "https://<company>.wd5.myworkdayjobs.com/<Site>/..."
}
```

Workday's public job search gives the title, location (or the number of locations), time type (full / part time), the requisition ID and how long ago the job was posted, which is converted to a date; descriptions are not included in the list view; the Actor normalises all of it into the same schema it uses for Greenhouse, Lever, Ashby, Workable,
Recruitee, SmartRecruiters, BambooHR and Personio, so you can mix sources without rewriting your code.

### Pricing

Pay per result: **$0.002 per job**, less with an Apify subscription (Bronze $0.0018, Silver $0.0015, Gold $0.0012). Fetching a Workday board that is not yet in
our database costs **$0.01 per board**; after that it is tracked daily for everyone. There is no fixed fee and no
subscription; set **Max results** or a maximum cost per run to cap spend.

### FAQ

**Do I need a Workday account or API key?** No. Only public job board data is used.

**How fresh is the data?** Boards in the database are refreshed every morning. Boards you pass in `boardUrls` that
are not in the database yet are fetched live during your run.

**Can I get only new jobs?** Yes: schedule the Actor daily with `newWithinDays: 1`.

**Is there salary data?** The public Workday job list has no pay ranges and no description text, so salary and visa fields stay empty. For pay benchmarks use [Tech Salary Data API](https://apify.com/worthwhile_quinsy/tech-salary-data-api).

**How is it different from other Workday scrapers?** Besides scraping the boards you give it, it can search every Workday
company we track at once, it can return only jobs first seen since yesterday, and every row uses the same schema as our other
job board Actors, so one pipeline handles all of them.

**Why can I get fewer rows than the careers page shows?** Large employers often post the same role several times
(same title and location). You get one row per company + title + location, and `similar_postings` says how many
identical postings it stands for. Turn on **Include duplicate postings** to get every posting.

**Does it include the full job description?** No: the public Workday job list has no description text. Each row has the title, location, team and the link to the full posting.

**What if a company is not on Workday?** Use [ATS Detector](https://apify.com/worthwhile_quinsy/ats-detector) to find
which job board a company uses, or [Company Job Alerts](https://apify.com/worthwhile_quinsy/company-job-alerts) to track any company from its website.

### Data and use

Only public job-posting data is collected, at a low request rate. No personal data about candidates. Please respect
the terms of the sites you use the data on and applicable laws.

### What it costs

| Example | Cost |
| --- | --- |
| all jobs from 1 large Workday site (~1,000 jobs) | about $2.01 |
| all jobs from 5 Workday sites (~1,500 jobs) | about $3.05 |
| 100 matching jobs from 10 Workday sites | about $0.30 |

You only pay for rows you get. Set **Max results** (or a maximum cost per run in Apify) to cap spend. Apify's free plan includes monthly credit, so you can try it at no cost. Apify subscribers get automatic Store discounts on some events.

### Use it from code, no-code tools or AI agents

**Python** (`pip install apify-client`):

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("worthwhile_quinsy/workday-jobs-scraper").call(run_input={'boardUrls': ['https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite'], 'maxResults': 1000})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

**JavaScript / Node.js** (`npm install apify-client`):

```js
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('worthwhile_quinsy/workday-jobs-scraper').call({"boardUrls": ["https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite"], "maxResults": 1000});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

**One HTTP call** (returns the rows directly):

```bash
curl -X POST 'https://api.apify.com/v2/acts/worthwhile_quinsy~workday-jobs-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{"boardUrls": ["https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite"], "maxResults": 1000}'
```

**No-code:** connect it to **Make, Zapier, n8n, Google Sheets, Slack** or a **webhook** from the Integrations tab, and run it on a **Schedule** (for example every morning).

**AI agents (MCP):** use it as a tool in Claude, ChatGPT, Cursor or any MCP client through the Apify MCP server: `https://mcp.apify.com?tools=worthwhile_quinsy/workday-jobs-scraper`. Your agent can then ask for live job data in plain language. Use this tool when the user asks for job listings from a specific company's Workday careers site (myworkdayjobs.com).

### More tools from the same job-data suite

All of these read the same daily database of jobs from company career pages, so results are consistent across tools.

| Actor | What it gives you |
| --- | --- |
| [Company Jobs Search + Hiring Signals](https://apify.com/worthwhile_quinsy/ats-jobs-search) | Search all jobs in the database, check your own list of companies, or get per-company hiring signals. |
| [Remote Jobs API](https://apify.com/worthwhile_quinsy/remote-jobs-api) | Only remote jobs, ready for job boards, newsletters and alert bots. |
| [Companies Hiring by Tech Stack](https://apify.com/worthwhile_quinsy/companies-hiring-by-tech-stack) | B2B buying signals: which companies are hiring for the tools you sell into. |
| [Tech Salary Data API](https://apify.com/worthwhile_quinsy/tech-salary-data-api) | Salary benchmarks (median, P25, P75) from fresh job postings with published pay. |
| [Company Job Alerts](https://apify.com/worthwhile_quinsy/company-job-alerts) | New jobs from any list of company career pages, every day. |
| [Company Hiring Trends](https://apify.com/worthwhile_quinsy/company-hiring-trends) | Which companies are ramping up hiring, and which are slowing down. |
| [ATS Detector](https://apify.com/worthwhile_quinsy/ats-detector) | Which applicant tracking system (Greenhouse, Lever, Ashby...) a company uses, plus its career page. |
| [Greenhouse Jobs Scraper](https://apify.com/worthwhile_quinsy/greenhouse-jobs-scraper) | All open jobs from any Greenhouse job board, or search every Greenhouse board we track. |
| [Lever Jobs Scraper](https://apify.com/worthwhile_quinsy/lever-jobs-scraper) | All open jobs from any Lever job board, or search every Lever board we track. |
| [Ashby Jobs Scraper](https://apify.com/worthwhile_quinsy/ashby-jobs-scraper) | All open jobs from any Ashby job board, or search every Ashby board we track. |
| [Workable Jobs Scraper](https://apify.com/worthwhile_quinsy/workable-jobs-scraper) | All open jobs from any Workable job board, or search every Workable board we track. |
| [New Grad & Internship Jobs Scraper](https://apify.com/worthwhile_quinsy/new-grad-internship-jobs-scraper) | Internships, co-ops, new-grad and junior roles from 1,000+ tech company career pages. |
| [AI & Machine Learning Jobs Scraper](https://apify.com/worthwhile_quinsy/ai-machine-learning-jobs-scraper) | AI, ML, LLM and data science roles from 1,000+ tech company career pages. |
| [Y Combinator Startup Jobs Scraper](https://apify.com/worthwhile_quinsy/y-combinator-startup-jobs-scraper) | Every open role at nearly 700 Y Combinator startups, with batch, industry and team size. |

### Free data, charts and code examples

- [Job Market Data website](https://ekkysoka7-maker.github.io/job-market-data-examples/): free startup salary pages for 137 roles, the companies hiring fastest and ATS market share, built from this database.
- [Free CSV snapshot and notebook on Kaggle](https://www.kaggle.com/datasets/ekkysoka/startup-hiring-and-salary-benchmarks-2026).
- [Code examples on GitHub](https://github.com/ekkysoka7-maker/job-market-data-examples): Python, JavaScript, Google Sheets, n8n, Make, Zapier and MCP setups.

### Questions and feedback

Found a bug, need another filter, field or ATS? Open an **Issue** on this Actor's page; issues are answered quickly. If it saved you time, a short **review** helps other people find it.

# Actor input Schema

## `boardUrls` (type: `array`):

Get all open jobs from these Workday boards, e.g. https://<company>.wd5.myworkdayjobs.com/<Site> or just the company slug. Boards already in our database are instant; others are fetched live (billed per board) and added to the daily database. Leave empty to search every Workday board we track. Max 100 per run.

## `keywords` (type: `array`):

Match any of these in the job title (case-insensitive), e.g. 'data engineer', 'account executive'. Empty = all jobs.

## `excludeKeywords` (type: `array`):

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

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

Keep jobs whose location contains any of these, e.g. 'London', 'Germany', 'Singapore', 'Remote'.

## `countries` (type: `array`):

Country names or 2-letter codes, e.g. 'Germany', 'US', 'Singapore'. Derived from the posting's location.

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

Only jobs marked or described as remote.

## `departments` (type: `array`):

Keep jobs whose department or team contains any of these, e.g. 'Engineering', 'Sales'.

## `seniority` (type: `array`):

Heuristic level from the job title.

## `technologies` (type: `array`):

Keep jobs that mention any of these tools in the title or description, e.g. 'Snowflake', 'Kubernetes', 'Salesforce'.

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

Limit to Workday companies in our database whose name or board slug contains any of these words.

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

Only jobs published in the last N days.

## `newWithinDays` (type: `integer`):

Only jobs that appeared in the database in the last N days (for daily alerts use 1).

## `includeDuplicates` (type: `boolean`):

Large employers often post the same role several times (same title and location). By default you get one row per company + title + location, with similar_postings telling how many identical postings it stands for. Turn this on to get every posting.

## `maxPerCompany` (type: `integer`):

Cap how many jobs one company can contribute (0 = no cap). Useful when a few large employers would otherwise fill the results.

## `onlyNewSinceLastRun` (type: `boolean`):

Remember the jobs this search already returned (in your own Apify account) and return only new ones on the next run. Ideal for scheduled alerts: you never pay twice for the same job.

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

Maximum number of jobs to return (you pay per job). 1,000 covers every open job of almost any company board.

## Actor input object example

```json
{
  "boardUrls": [
    "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite"
  ],
  "remoteOnly": false,
  "includeDuplicates": false,
  "maxPerCompany": 0,
  "onlyNewSinceLastRun": false,
  "maxResults": 1000
}
```

# Actor output Schema

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

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

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

```

## MCP server setup

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