# Workday Jobs Scraper: Any Career Site, Past the 2,000 Limit (`themineworks/workday-jobs-scraper`) Actor

Scrape open jobs from any company's Workday career site (myworkdayjobs.com and myworkdaysite.com): title, job category, every location, country, posted date, time type, requisition id, pay range, apply link and description. Reads big sites past Workday's 2,000 job limit. No login.

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

## Pricing

from $0.10 / 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 Career Site, Past the 2,000 Limit

[![2,701 NVIDIA jobs from one Workday site in 32 minutes, past the 2,000 limit](https://api.apify.com/v2/key-value-stores/cUXz95yxflDho41nn/records/workday-jobs-scraper-hero.png)](https://console.apify.com/actors/Y16C3dC30qRXVgSvj/input?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

From **The Mine Works**, makers of [Threads Scraper](https://apify.com/themineworks/threads-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral) and [B2B Leads Finder](https://apify.com/themineworks/b2b-leads-finder?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), with over 140,000 runs across 170+ public actors.

### Why choose this actor?

- **Big career sites in full, past Workday's 2,000 job limit.** A Workday job search never lists more than 2,000 jobs, and asking for more wraps back to the first page. The actor splits each site by its own job category filter and reads every category separately, and NVIDIA's site, which held about 2,700 open jobs on 5 Oct 2026, came back whole: **2,701 jobs from that one site in 32 minutes**, every job page read.
- **Every job's own page, not just the list.** Workday's job list shows a title, "6 Locations" and "Posted 3 Days Ago". The actor opens each job and returns the exact posting date, every location, country, time type, requisition id, hiring entity and the description, and reads the pay range written in it. Our proof run returned **893 jobs from 3 career sites in under 7 minutes, with the job category on every row and a pay range on 69%**. No extra charge for any of it.
- **Only new jobs on a schedule, cheaply.** Switch on "Only jobs not delivered before" and each run returns, and charges, only jobs no earlier run in your account delivered. Jobs already delivered are skipped from the list itself, before their pages are read: in our test the second run read 40 job pages, not 80. Jobs removed by your filters are never charged.

[![Run it on Apify](https://api.apify.com/v2/key-value-stores/cUXz95yxflDho41nn/records/button-run.png)](https://console.apify.com/actors/Y16C3dC30qRXVgSvj/input?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Part of The Mine Works Jobs and hiring family:** [Foundit Monster India Jobs](https://apify.com/themineworks/foundit-jobs-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), [Hirist Jobs Scraper](https://apify.com/themineworks/hirist-jobs-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), [India Jobs MCP](https://apify.com/themineworks/india-jobs-mcp?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), [Naukri Jobs Scraper](https://apify.com/themineworks/naukri-jobs?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), [Shine.com Jobs Scraper](https://apify.com/themineworks/shine-jobs-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), [Internshala Scraper](https://apify.com/themineworks/internshala-jobs-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral).

### Try it in one minute

Paste this input and press Start. It returns the 20 newest open jobs at Workday itself in under a minute:

```json
{
  "companies": ["https://workday.wd5.myworkdayjobs.com/Workday"],
  "maxJobsPerCompany": 20
}
```

Workday has no company directory, so each company is given by its career site. Three forms are accepted, and you can mix them:

- **Career site link**, as you see it in the browser: `https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite`. A language part (`/en-US/`), a single job link or a search link on the same site all work; the site is what counts.
- **The myworkdaysite.com form**: `https://wd1.myworkdaysite.com/en-US/recruiting/paypal/jobs`.
- **Your company's own careers page** that links to its Workday site: the page is read once and searched for the link. In our test the careers pages of workday.com and mastercard.com led to their Workday sites. A page that loads its links later with JavaScript (nvidia.com is one) is reported as "no board on page" and never charged.

A bare company name such as `NVIDIA` is refused with a hint, because the site address (wd5, the site name) cannot be guessed reliably.

On Apify's free plan every run returns the first 10 results as a preview, so you can check the data and the fields before you pay. A paid Apify plan returns every result: https://apify.com/pricing?fpr=ymnoit

#### Copy to your AI assistant

```text
themineworks/workday-jobs-scraper on Apify. Returns open jobs from companies' Workday career sites (myworkdayjobs.com and myworkdaysite.com), one row per job with company, title, job category, every location, country, posting date, time type, requisition id, hiring entity, pay range read from the description (min, max, currency, period), job and apply links, and a 500 character description (full text on request). Reads sites past Workday's 2,000 job limit by job category. Call ApifyClient("TOKEN").actor("themineworks/workday-jobs-scraper").call(run_input={"companies": ["https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite"], "keywords": ["engineer"], "maxJobsPerCompany": 100}), then client.dataset(run["defaultDatasetId"]).list_items().items. Required: companies (Workday career site links, or careers pages that link to one). Optional: keywords (title words), excludeKeywords, locations, departments (Workday job categories), remoteOnly (default false), postedWithinDays, maxJobsPerCompany (default 500, 20 to 10,000), includeDescription (default false), onlyNewJobs (default false). Skip rows that have "_type": "info". Full spec: GET https://api.apify.com/v2/acts/themineworks~workday-jobs-scraper/builds/default (Bearer TOKEN), which returns inputSchema and readme. Token: https://console.apify.com/account/integrations?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral
```

### Key features

- **30 fields per job**: company, site, Workday's posting id, requisition id, title, job category, primary and every location, country and country code, workplace type, remote flag, employment type and Workday's time type, exact posting date and the age Workday shows, pay range from the description, job and apply links, hiring entity, a short description and, on request, the whole description as plain text.
- **Past 2,000 jobs per site**: each job category is read as its own listing of up to 2,000, and the listings are merged newest first.
- **Job categories as a filter that saves requests**: with Job categories set, only the matching categories of each site are read at all.
- **Filters that run before you pay**: title keywords and exclusions, locations (every location of a job, and United States matches "US, CA, Santa Clara" and "USA, GA, Atlanta"), job categories, remote only, and posted within N days. Title and date filters are checked on the list, before any job page is read.
- **Newest first, with a cap per site** from 20 to 10,000, and **only new jobs on repeat runs**, kept in a named key value store in your account.
- **Plain HTTP, no browser, no login.** 256 MB of memory, three sites at a time and six job pages at a time per site. A run report (status per site, read mode, categories, listing pages, job pages, filtered counts, charges) is saved as the `OUTPUT` record.

### How to use it

#### Basic: one company's newest jobs

```json
{
  "companies": ["https://wd1.myworkdaysite.com/en-US/recruiting/paypal/jobs"],
  "maxJobsPerCompany": 500
}
```

PayPal's site held 293 open jobs on 5 Oct 2026, so this returns all of them, newest first, each with its job category.

#### Several career sites at once

```json
{
  "companies": [
    "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite",
    "https://wd1.myworkdaysite.com/en-US/recruiting/paypal/jobs",
    "https://workday.wd5.myworkdayjobs.com/Workday"
  ],
  "maxJobsPerCompany": 300,
  "includeDescription": true
}
```

This is the input of our proof run: 893 jobs in 6 minutes 40 seconds, every job page read (4 minutes 11 seconds on an earlier run of the same input; sites and the proxy answer faster at some times than others). Up to 1,000 sites per run; a site given twice (for example as its search link and as a job link) is read once.

#### Job: daily alert on new jobs at large employers

```json
{
  "companies": [
    "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite",
    "https://workday.wd5.myworkdayjobs.com/Workday"
  ],
  "keywords": ["engineer", "scientist"],
  "locations": ["United States"],
  "onlyNewJobs": true,
  "maxJobsPerCompany": 3000
}
```

Schedule it daily (Console, Schedules, Add schedule). The first run delivers every matching open job; each later run skips jobs already delivered before reading their pages, so a daily run on a large site stays quick and charges only new postings.

#### Job: one department across companies

```json
{
  "companies": [
    "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite",
    "https://wd1.myworkdaysite.com/en-US/recruiting/paypal/jobs",
    "https://workday.wd5.myworkdayjobs.com/Workday"
  ],
  "departments": ["sales"],
  "maxJobsPerCompany": 200
}
```

`departments` is matched against each site's own job categories ("Sales" at NVIDIA, "Sales Job Family Group" at PayPal, "Field Sales" at Workday), and only those categories are read. When nothing matches, the run report lists the site's categories so you can pick the right word.

#### Job: remote roles posted this week

```json
{
  "companies": [
    "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite",
    "https://workday.wd5.myworkdayjobs.com/Workday"
  ],
  "remoteOnly": true,
  "postedWithinDays": 7
}
```

Remote means Workday marks the job remote, or one of its locations says remote ("US, CA, Remote"). The date filter stops reading a site as soon as its newest remaining jobs are past the window.

#### Job: pay benchmarking from descriptions

```json
{
  "companies": [
    "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite",
    "https://workday.wd5.myworkdayjobs.com/Workday"
  ],
  "keywords": ["software engineer", "data scientist"],
  "locations": ["United States"],
  "maxJobsPerCompany": 500
}
```

Workday has no pay field, but employers in US pay transparency states write the range into the description ("The base salary range is ..."). The actor reads it into `salary_min`, `salary_max`, `salary_currency` and `salary_period`; when a posting lists one range per level, the lowest minimum and highest maximum are kept.

### Input parameters

| Parameter | Type | Default | What it does |
|---|---|---|---|
| `companies` | array of strings | `["https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite", "https://wd1.myworkdaysite.com/en-US/recruiting/paypal/jobs", "https://workday.wd5.myworkdayjobs.com/Workday"]` | Required. Workday career site links (myworkdayjobs.com or myworkdaysite.com), or careers pages that link to one, one per line. Up to 1,000 per run; repeats are read once. |
| `keywords` | array of strings | none | Keep jobs whose title has a word starting with one of these (`engineer` also matches Engineering Manager). Not case sensitive. Checked on the list, before job pages are read. |
| `excludeKeywords` | array of strings | none | Drop jobs whose title has a word starting with one of these, for example `senior`, `intern`. |
| `locations` | array of strings | none | Keep jobs with a location containing one of these, for example `India`, `London`, `Remote`. Every location of a job is checked, and the country. United States, USA and US match each other and US state codes; United Kingdom and UK match each other. |
| `departments` | array of strings | none | Keep jobs in a job category of the site that contains one of these, for example `Engineering`, `Sales`. Only those categories are read. A site without a category filter returns nothing for this filter. |
| `remoteOnly` | boolean | `false` | Keep only jobs that are remote or offer a remote location. |
| `postedWithinDays` | integer | none | Keep only jobs posted in the last N days, 1 to 365. |
| `maxJobsPerCompany` | integer | `500` (the form starts at 20) | Most jobs delivered per site after the filters, newest first, 20 to 10,000. Also the most you pay for per site. |
| `includeDescription` | boolean | `false` | Add the whole description as plain text in `description`. Every job's page is read either way, so this costs nothing extra. |
| `onlyNewJobs` | boolean | `false` | Skip, and never charge, jobs an earlier run of this actor in your account already delivered. They are skipped before their pages are read. |

### What data do you get?

One row per open job. A field with no value (for example no pay in the description) is left out of the row rather than filled with an empty value.

**The company and site**: `company` (read from the site address, for example "NVIDIA" from NVIDIAExternalCareerSite, or "Paypal" from the paypal tenant; Workday publishes no display name), `company_slug` (tenant and site, such as `nvidia/NVIDIAExternalCareerSite`), `hiring_entity` (the legal entity Workday lists, such as "Workday, Inc."), `platform` (always `workday`).

**The job**: `job_id` (Workday's posting id, the last part of the job link, stable for the life of the posting), `requisition_id` (such as JR2026957), `title`, `department` (the job category from the site's own category filter, such as "Engineering" or "Technology Job Family Group"), `employment_type` (`full-time`, `part-time`, `contract`, `intern` or `temporary`), `time_type` (Workday's own wording, such as "Full time").

**Where**: `location` (primary location), `locations` (every location: Workday's list only says "6 Locations", the job page names them), `country` and `country_code` (of the primary location), `workplace_type` (`remote`, `hybrid` or `onsite` when Workday or the locations say so), `is_remote`.

**When**: `posted_at` (posting date, ISO date such as 2026-10-05, from the job page), `posted_text` (the age the site shows, such as "Posted Today").

**Pay**: `salary_min`, `salary_max`, `salary_currency` (USD, EUR, JPY and others as written), `salary_period` (`year`, `month`, `week`, `day` or `hour`), `salary_text` (one readable line, for example "USD 184,000 to 287,500 per year"), `salary_source` (always `description`: Workday has no pay field).

**Links and text**: `job_url` (the job on the career site), `apply_url` (Workday's apply page for it), `description_short` (the start of the description, one line, at most 500 characters), `description` (the whole description as plain text, only with `includeDescription` on).

**How it was read**: `input` (the site as you typed it), `scraped_at`.

At the end of a run with results, one extra row with `"_type": "info"` carries scheduling tips. It is never charged; filter it out with `_type`. A full run report (status per site, read mode, job categories, listing pages, job pages, filtered counts, charges) is saved as the `OUTPUT` record of the run's key value store.

#### Stable fields for automations

These fields were present in every one of the 893 rows of our proof run:

| Field | Meaning |
|---|---|
| `company` | Company name read from the site address |
| `company_slug` | Workday tenant and site |
| `platform` | Always `workday` |
| `job_id` | Workday posting id; use it to deduplicate |
| `requisition_id` | Employer's requisition id |
| `title` | Job title |
| `location` | Primary location |
| `locations` | Every location, as a list |
| `country_code` | Two letter country code of the primary location |
| `is_remote` | True when the job is remote or offers a remote location |
| `posted_at` | Posting date, ISO date |
| `posted_text` | Posting age as the site shows it |
| `job_url` | Link to the job |
| `apply_url` | Link to apply |
| `description_short` | Start of the description, at most 500 characters |

`department` is on every row of sites that have a job category filter, which all three proof sites had. These names will not change. New fields may be added, never renamed.

#### Output examples

A remote job with six locations and a pay range from its description (NVIDIA):

```json
{
  "company": "NVIDIA",
  "company_slug": "nvidia/NVIDIAExternalCareerSite",
  "platform": "workday",
  "job_id": "Senior-Systems-Software-Engineer--Containers--Kubernetes--and-Confidential-Computing_JR2026957",
  "requisition_id": "JR2026957",
  "title": "Senior Systems Software Engineer, Containers, Kubernetes, and Confidential Computing",
  "department": "Engineering",
  "location": "US, CA, Remote",
  "locations": ["US, CA, Remote", "US, NC, Remote", "US, TX, Remote", "US, WA, Remote", "US, NY, New York", "US, MA, Remote"],
  "country": "United States of America",
  "country_code": "US",
  "workplace_type": "remote",
  "is_remote": true,
  "employment_type": "full-time",
  "time_type": "Full time",
  "posted_at": "2026-10-05",
  "posted_text": "Posted Today",
  "salary_min": 184000,
  "salary_max": 287500,
  "salary_currency": "USD",
  "salary_period": "year",
  "salary_text": "USD 184,000 to 287,500 per year",
  "salary_source": "description",
  "job_url": "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite/job/US-CA-Remote/Senior-Systems-Software-Engineer--Containers--Kubernetes--and-Confidential-Computing_JR2026957",
  "apply_url": "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite/job/US-CA-Remote/Senior-Systems-Software-Engineer--Containers--Kubernetes--and-Confidential-Computing_JR2026957/apply",
  "hiring_entity": "2100 NVIDIA USA",
  "description_short": "NVIDIA is looking for a hardworking Sr. Systems Software Engineer to work on platform software based on open-source container runtimes and Kubernetes…",
  "input": "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite",
  "scraped_at": "2026-10-05T20:05:13.893Z"
}
```

A job on the myworkdaysite.com form, pay in yen (PayPal, Tokyo):

```json
{
  "company": "Paypal",
  "company_slug": "paypal/jobs",
  "platform": "workday",
  "job_id": "Partner-Alliance-Specialist_R0137003",
  "requisition_id": "R0137003",
  "title": "Partner Alliance Specialist",
  "department": "Sales Job Family Group",
  "location": "Tokyo, Tokyo Prefecture, Japan",
  "country": "Japan",
  "country_code": "JP",
  "is_remote": false,
  "employment_type": "full-time",
  "posted_at": "2026-10-06",
  "posted_text": "Posted Today",
  "salary_min": 6215000,
  "salary_max": 8888000,
  "salary_currency": "JPY",
  "salary_period": "year",
  "salary_text": "JPY 6,215,000 to 8,888,000 per year",
  "salary_source": "description",
  "job_url": "https://wd1.myworkdaysite.com/recruiting/paypal/jobs/job/Tokyo-Tokyo-Prefecture-Japan/Partner-Alliance-Specialist_R0137003",
  "hiring_entity": "0578 Paidy Inc.",
  "input": "https://wd1.myworkdaysite.com/en-US/recruiting/paypal/jobs"
}
```

A job with no pay in its description (PayPal, Bangalore):

```json
{
  "company": "Paypal",
  "company_slug": "paypal/jobs",
  "job_id": "Software-Engineer_R0137893",
  "requisition_id": "R0137893",
  "title": "Cloud Platform Software Engineer",
  "department": "Technology Job Family Group",
  "location": "Bangalore, Karnataka, India",
  "country": "India",
  "country_code": "IN",
  "is_remote": false,
  "employment_type": "full-time",
  "time_type": "Full time",
  "posted_at": "2026-10-05",
  "posted_text": "Posted Today",
  "job_url": "https://wd1.myworkdaysite.com/recruiting/paypal/jobs/job/Bangalore-Karnataka-India/Software-Engineer_R0137893",
  "hiring_entity": "0682 PayPal India Private Limited"
}
```

### Pricing

Pay per event: you pay for the job rows you receive, plus a flat $0.005 per run, whatever memory you choose.

| Event | When it is charged | Free plan | Bronze (Starter) | Silver (Scale) | Gold (Business) |
|---|---|---|---|---|---|
| `job-scraped` | Once per job row saved to your dataset | $0.10 per 1,000 | $0.10 per 1,000 | $0.10 per 1,000 | $0.10 per 1,000 |
| `run-start` | Once per run, when it starts | $0.005 | $0.005 | $0.005 | $0.005 |

Free plan runs return up to 10 results each; paid plans have no cap.

The price per single job is the price per 1,000 divided by 1,000. 300 jobs from one site are 300 events.

Never charged:

- sites that are not found, careers pages with no Workday link, and sites with no open jobs;
- jobs removed by your filters, including jobs whose page was read only to check a location or remote filter;
- jobs above your `maxJobsPerCompany` cap;
- a job already delivered in the same run, including a job listed in two categories;
- with `onlyNewJobs` on, jobs an earlier run in your account already delivered;
- the job pages, listing pages and category splits the actor reads (only delivered jobs are charged);
- retries the actor makes on other IP addresses;
- the information row at the end of the run and the `OUTPUT` run report.

If you set a maximum charge for the run in Apify, the actor stops when it is reached and keeps everything delivered so far.

### FAQ

#### What do I get on the free plan?

On Apify's free plan every run returns the first 10 results as a preview, so you can check the data and the fields before you pay. A paid Apify plan returns every result with no cap, at the prices in the table above.

#### What exactly does this actor read?

The two public JSON calls a Workday career site makes in your browser: the job search (20 jobs at a time, with the site's filters and their counts) and each job's own page (description, exact date, locations, time type, requisition id, hiring entity). No login and no signed requests are involved. Everything is read live when you run it; there is no cached index in between.

#### How does it get past Workday's 2,000 job limit?

A Workday job search lists at most 2,000 jobs, and asking for the next page after 2,000 returns the first page again. Many career sites have a job category filter (Workday calls it the job family group; all three sites in our proof run had one). The actor reads every category as its own search, each with its own 2,000 limit, and merges them newest first, so the whole site comes back as long as no single category holds more than 2,000 open jobs. In our test NVIDIA's site came back whole: 2,701 jobs across its 14 job categories, where its own search stops at 2,000. A site without a category filter is read as one search, up to its newest 2,000 jobs, and the run report says so.

#### How many jobs can I get?

Up to 10,000 per site per run (`maxJobsPerCompany`), and up to 1,000 sites per run.

#### Why does it read every job's page?

Because the list alone is thin: no description, no exact date ("Posted 30+ Days Ago"), no employment type, and "6 Locations" instead of the six places. Reading each job's page fills all of that, and it is where the pay range is written. Title, date and only new jobs checks happen on the list first, so jobs you do not want cost no page read.

#### Where does the pay range come from, and why do some jobs have none?

Workday has no pay field, so the range is read from the description, where employers in US pay transparency states write it ("The base salary range is ..."). The actor only takes it when a currency, two amounts and a pay word appear together, so revenue figures are ignored, and keeps the lowest minimum and highest maximum when a posting lists one range per level. Jobs outside such states often have no range; in our proof run 68% had one.

#### Why is the company name sometimes in lower case?

Workday publishes no display name for a site. The actor reads it from the site name when the site name holds one ("NVIDIAExternalCareerSite" gives NVIDIA) and otherwise from the tenant in the address ("paypal" gives Paypal, and the site "CorporateCareers" on the mastercard tenant gives Mastercard). `hiring_entity` carries the legal entity Workday lists on each job.

#### How fresh is the data?

As fresh as the site: every run asks Workday at run time. `posted_at` is the posting date from the job page and `posted_text` the age the site shows.

#### How long does a run take?

Workday answers each site's job pages at roughly one a second (0.7 to 1.4 on our runs, whatever the number of pages asked at once), and three sites are read at a time, because each job's page is read. Our proof run (3 sites, 893 jobs) took between 4 minutes 11 seconds and 6 minutes 40 seconds on two runs; NVIDIA's whole site (2,701 jobs) took 32 minutes. Title, date and only new jobs filters make runs much shorter, because skipped jobs are never opened. The default run timeout is one hour; for very large runs, raise it under Run options. A run that reaches its timeout stops cleanly and keeps every job already delivered.

#### What if a site is not found?

The run goes on with the others. The site gets a status in the `OUTPUT` record (`not_found` for a wrong site name, `no_board_on_page` or `page_unreadable` for careers pages) with the reason, and nothing is charged for it. If no job at all is delivered, the info row in the dataset says why.

#### Do I need a Workday account, cookies or an API key?

No. Career sites are public, and the actor reads them without logging in. Requests go through Apify's datacenter proxy; a job page that is refused is asked again on another IP, and if it still fails the job is delivered from its list entry (title, location, age, link) rather than lost.

#### Can I monitor new jobs over time?

Yes. Switch on `onlyNewJobs` and schedule the actor. The ids of delivered jobs are kept in a named key value store in your Apify account. Each run skips jobs a previous run delivered while reading the list, before opening their pages, so they cost neither a charge nor a page read. In our test the second run read 40 job pages, not 80.

#### Can I get Greenhouse, Lever or Ashby jobs too?

This actor reads Workday only, so its input and output are built around Workday's data. For several platforms in one run, our [Career Site Jobs Scraper](https://apify.com/themineworks/ats-jobs?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral) reads Greenhouse, Lever, Ashby and Workday together.

#### Can I use it from Claude, ChatGPT or Cursor (MCP)?

- Connector URL: https://mcp.apify.com/?tools=themineworks/workday-jobs-scraper
- Claude: Settings > Connectors > Add custom connector, paste the URL, sign in with Apify.
- ChatGPT: developer mode, add an MCP connector with the URL, sign in with Apify.
- Cursor or VS Code: add it as an HTTP MCP server with that URL.
- Claude Code: `claude mcp add -t http workday-jobs-scraper "https://mcp.apify.com/?tools=themineworks/workday-jobs-scraper"`

#### Is it legal to scrape Workday career sites?

The actor only reads job postings that employers publish for anyone to see, without signing in, and returns no personal contact details. You are responsible for how you use the data, for the terms of the sites involved, and for data protection law such as GDPR and CCPA. If in doubt, ask a lawyer about your use case.

### Integrations

- **Google Sheets**: send each run's rows to a sheet with Apify's Google Sheets integration, or import the CSV link of the dataset.
- **Make, Zapier and n8n**: start the actor and read its dataset with the Apify apps and nodes, for example "new US engineering jobs at our target accounts to Slack every morning".
- **Webhooks**: have Apify call your URL when a run succeeds, then fetch the dataset.
- **API and SDKs**: run it from Python or JavaScript with the Apify client, or with a plain HTTP call (see "Copy to your AI assistant" above). Export as JSON, CSV, Excel, XML, RSS or an HTML table.
- **MCP clients**: Claude, ChatGPT, Cursor and VS Code can run it as a tool through the connector URL in the FAQ.

### More from The Mine Works

**Jobs and hiring**

- [Foundit Monster India Jobs](https://apify.com/themineworks/foundit-jobs-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Hirist Jobs Scraper](https://apify.com/themineworks/hirist-jobs-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [India Jobs MCP](https://apify.com/themineworks/india-jobs-mcp?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Naukri Jobs Scraper](https://apify.com/themineworks/naukri-jobs?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Shine.com Jobs Scraper](https://apify.com/themineworks/shine-jobs-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Internshala Scraper](https://apify.com/themineworks/internshala-jobs-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Indeed Jobs Scraper](https://apify.com/themineworks/indeed-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Instahyre Jobs Scraper](https://apify.com/themineworks/instahyre-jobs-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Apna Jobs Scraper](https://apify.com/themineworks/apna-jobs-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [CutShort Jobs Scraper](https://apify.com/themineworks/cutshort-jobs-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [LinkedIn Jobs Scraper](https://apify.com/themineworks/linkedin-jobs-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Recruiting & Jobs MCP](https://apify.com/themineworks/recruiting-jobs-mcp?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Social media and video**

- [Threads Scraper](https://apify.com/themineworks/threads-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Reddit Scraper](https://apify.com/themineworks/reddit-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Threads Search Scraper](https://apify.com/themineworks/threads-search-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Instagram Profile Scraper](https://apify.com/themineworks/instagram-profile-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Leads and business directories**

- [B2B Leads Finder](https://apify.com/themineworks/b2b-leads-finder?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Skip Trace Lookup](https://apify.com/themineworks/skip-trace-lookup?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Google Maps Email Scraper](https://apify.com/themineworks/maps-leads?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [2GIS Places Scraper](https://apify.com/themineworks/2gis-places-search?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Marketing, SEO and reviews**

- [Facebook Ad Library Scraper](https://apify.com/themineworks/meta-ad-library-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Google Ads Transparency Scraper](https://apify.com/themineworks/google-ads-transparency?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Similarweb Scraper](https://apify.com/themineworks/similarweb-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Google News Scraper](https://apify.com/themineworks/google-news?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**LinkedIn**

- [LinkedIn Company Scraper](https://apify.com/themineworks/linkedin-company-details?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [LinkedIn Post Scraper](https://apify.com/themineworks/linkedin-post-search?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [LinkedIn Employees Scraper](https://apify.com/themineworks/linkedin-employees?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [LinkedIn Profile Scraper](https://apify.com/themineworks/linkedin-profile-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Real estate**

- [Zillow Rentals Scraper](https://apify.com/themineworks/zillow-rental-listings?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Zillow Sold Comps Scraper](https://apify.com/themineworks/zillow-recently-sold?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [India Real Estate MCP](https://apify.com/themineworks/india-real-estate-mcp?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Housing.com Scraper](https://apify.com/themineworks/housing-com-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Science, health and government data**

- [Academic Research MCP](https://apify.com/themineworks/academic-research-mcp?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [CourtListener Scraper](https://apify.com/themineworks/courtlistener-court-records?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Socrata Open Data Scraper](https://apify.com/themineworks/socrata-open-data?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [OpenAlex Scraper](https://apify.com/themineworks/openalex-scholarly-works?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Company and business data**

- [Company Domain Finder](https://apify.com/themineworks/company-domain-finder?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [GST Taxpayer Lookup](https://apify.com/themineworks/gst-taxpayer-lookup?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Company KYB Resolver](https://apify.com/themineworks/company-identity-resolver?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [SEC EDGAR Filings Scraper](https://apify.com/themineworks/sec-edgar-filings?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**E-commerce and marketplaces**

- [Ozon.ru Scraper](https://apify.com/themineworks/ozon-product-search?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [⭐ Amazon Reviews Scraper](https://apify.com/themineworks/amazon-reviews?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Amazon Product Scraper](https://apify.com/themineworks/amazon-products?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Etsy Listings Scraper](https://apify.com/themineworks/etsy-search-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Food and local services**

- [NoBroker Scraper](https://apify.com/themineworks/nobroker-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Swiggy Restaurant Scraper](https://apify.com/themineworks/swiggy-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Zomato Scraper](https://apify.com/themineworks/zomato-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Developer and AI tools**

- [Website to Markdown Crawler](https://apify.com/themineworks/rag-crawler?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [GitHub Skill Finder](https://apify.com/themineworks/github-skill-discovery?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [GitHub Repo Scraper](https://apify.com/themineworks/github-repo-intelligence?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [GitHub Trending Scraper](https://apify.com/themineworks/github-trending-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**More tools**

- [G2 Reviews Scraper](https://apify.com/themineworks/g2-reviews-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Naver Blog Scraper](https://apify.com/themineworks/naver-blog-posts-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [WeChat Article Scraper 微信公众号文章](https://apify.com/themineworks/wechat-article-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Taobao Products Scraper 淘宝 天猫](https://apify.com/themineworks/taobao-products-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

### Support

Found a Workday career site that should work and does not? Open an issue in the Issues tab with the site link and the run ID, and we will look at it. For a new source or a field you need, email dmineworks@gmail.com.

*Paste Workday career site links, filter by title, place, job category and date, and get every open job back with its exact date, every location, job category and the pay range from its description, even on sites with more than 2,000 jobs.*

# Actor input Schema

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

One Workday career site per line, as the link you see in the browser: https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite, with or without a language part (/en-US/) or a job path after it, the myworkdaysite.com form (https://wd1.myworkdaysite.com/recruiting/paypal/jobs), or your company's own careers page that links to its Workday site (read once to find it, never charged). Workday has no company directory, so a bare company name cannot be looked up. Up to 1,000 sites per run; repeats are read once.

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

Keep only jobs whose title has a word starting with one of these, for example engineer (matches Engineering Manager too), data, sales. Not case sensitive. Leave empty for every title.

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

Drop jobs whose title has a word starting with one of these, for example senior, intern, director.

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

Keep only jobs with a location that contains one of these, for example London, New York, Germany, Remote. United States, USA and US match each other, as do United Kingdom and UK. Every location of a job is checked, not only the first.

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

Keep only jobs in a Workday job category (the site's own category filter, such as Engineering or Sales) that contains one of these words. Applied on Workday's side, so a site is only read for the matching categories. A site without a category filter returns nothing for this filter.

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

Keep only jobs that are remote or offer a remote location.

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

Keep only jobs posted in the last N days, for example 7. Leave empty for any date.

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

Most jobs delivered for any one company, counted after the filters, newest first. 20 to 10,000. Also the most you pay for per company. The form starts at 20 so a first run stays small; API calls that leave it out get 500.

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

Adds the whole job description as plain text (HTML removed). Every row always has a 500 character description_short. The actor reads each job's own page for its exact date, employment type, every location and the description, whether this is on or off.

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

For schedules: skip jobs an earlier run of this actor in your account already delivered, so each run returns and charges only jobs posted since. The list of delivered jobs is kept in a named key value store in your account.

## Actor input object example

```json
{
  "companies": [
    "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite",
    "https://wd1.myworkdaysite.com/en-US/recruiting/paypal/jobs",
    "https://workday.wd5.myworkdayjobs.com/Workday"
  ],
  "remoteOnly": false,
  "maxJobsPerCompany": 20,
  "includeDescription": false,
  "onlyNewJobs": false
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `summary` (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 = {
    "companies": [
        "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite",
        "https://wd1.myworkdaysite.com/en-US/recruiting/paypal/jobs",
        "https://workday.wd5.myworkdayjobs.com/Workday"
    ],
    "maxJobsPerCompany": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("themineworks/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",
        "https://wd1.myworkdaysite.com/en-US/recruiting/paypal/jobs",
        "https://workday.wd5.myworkdayjobs.com/Workday",
    ],
    "maxJobsPerCompany": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("themineworks/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",
    "https://wd1.myworkdaysite.com/en-US/recruiting/paypal/jobs",
    "https://workday.wd5.myworkdayjobs.com/Workday"
  ],
  "maxJobsPerCompany": 20
}' |
apify call themineworks/workday-jobs-scraper --silent --output-dataset

```

## MCP server setup

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