# Workday Jobs Scraper: Any Career Site, 150+ Companies $1/1k (`transparent_meteorite/workday-jobs-scraper`) Actor

Scrape jobs from any Workday career site (myworkdayjobs.com) or 165+ verified big employers by name. Keyword, location and posted-date filters, full descriptions, salary ranges, remote/hybrid, and only-new-jobs delta mode. $1 per 1,000 jobs.

- **URL**: https://apify.com/transparent_meteorite/workday-jobs-scraper.md
- **Developed by:** [Open Data Actors](https://apify.com/transparent_meteorite) (community)
- **Categories:** Jobs, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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: any myworkdayjobs.com career site, 165+ companies built in

**Video walkthrough:** [Watch the 1-minute demo on YouTube](https://www.youtube.com/watch?v=vq03Zf35Elg)

![Workday Jobs Scraper on Apify](https://api.apify.com/v2/key-value-stores/9BAn0msnxToXlD9TO/records/banner-workday-jobs-scraper.png)

![Workday Jobs Scraper sample output table](https://api.apify.com/v2/key-value-stores/9BAn0msnxToXlD9TO/records/output-workday-jobs-scraper.png)

- **In short:** Workday Jobs Scraper (Apify actor `transparent_meteorite/workday-jobs-scraper`) scrapes job postings from any Workday career site (myworkdayjobs.com), or from 165+ verified large employers by name.
- **Who it is for:** job boards and aggregators, recruiters, HR-tech and labor-market analysts, sales teams tracking enterprise hiring.
- **Input:** company names or Workday career-site URLs, search text, locations, posted within days, include description, max items per company, only-new mode.
- **Output:** job title, company, location(s), remote/hybrid, posted date, job ID, URL, time type, salary range when published, optional full description.
- **Price:** $0.001 per job listed, $0.002 per job with full description, $0.00005 per run start. Pay per result, no subscription; Apify's free plan credit covers a first test.
- **Limits:** Workday returns at most 2,000 jobs per search, so very large employers need keyword or location splits.

**Key facts**

- Actor name: Workday Jobs Scraper
- Actor ID: `transparent_meteorite/workday-jobs-scraper`
- Store page: https://apify.com/transparent_meteorite/workday-jobs-scraper
- Data source: employers' own public Workday career sites
- Pricing model: pay per event (`apify-actor-start` $0.00005, `job-listed` $0.001, `job-with-description` $0.002)
- Output formats: JSON, CSV, Excel, XML, HTML table, RSS (Apify dataset)
- Access: Apify Console, REST API, JavaScript/Python clients, schedules, webhooks, Apify MCP server
- Login or third-party API key needed: no, only an Apify account
- Also known as: Workday jobs scraper, myworkdayjobs scraper, Workday careers API, Workday job postings API
- Maintainer: transparent_meteorite (independent developer)
- Last updated: 2026-10-07

Scrape job postings from **any public Workday career site**, or pick from a **built-in, live-verified directory of 167 large employers** (NVIDIA, Salesforce, Boeing, Pfizer, Target, Home Depot, Bank of America, Cisco, Intel and more). Search by keyword, filter by location and posted date, pull full descriptions and stated salary ranges, and run on a schedule to get **only new jobs**. **$1 per 1,000 jobs.**

### What does Workday Jobs Scraper do?

Thousands of large employers host their careers page on Workday (`*.myworkdayjobs.com`). Each of those sites exposes the same public job-search data that your browser loads when you visit it. This Actor reads that public data directly and returns clean, structured rows:

- **Any Workday career site**: paste a URL such as `https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite` (or any job link from it). The tenant, data center (`wd1`, `wd5`, `wd12`...) and site name are parsed for you. `myworkdaysite.com` URLs work too.
- **Or just type company names**: 167 big employers are bundled with their verified Workday URLs, so `["Pfizer", "Target"]` is enough. Use `ALL` to sweep the whole directory.
- **Keyword search** through Workday's own search engine (`searchText`).
- **Location filter** (`Texas`, `London`, `Remote`...), checked against every location of multi-location jobs.
- **Posted within N days**, turning Workday's "Posted 3 Days Ago" into a real ISO date.
- **Full job details** on demand: description text (and HTML), exact posting date, all locations, country, time type, remote/hybrid/on-site, hiring legal entity, and **salary range when the posting states one** (parsed into min, max, currency, period).
- **Only-new mode** (delta): remembers which jobs you already received and returns just the new ones. Seen jobs are never charged.

### Why use it?

- **One Actor for every Workday employer**: no per-company scraper, no browser, no login.
- **Cheapest per job**: $0.001 per listed job, $0.002 with full description. No monthly rental.
- **Fast**: the default input (2 companies, 20 jobs each) finishes in about 5 seconds.
- **Built for monitoring**: schedule it daily with `onlyNewJobs` and you get a clean feed of new postings for alerts, job boards, recruiting or labor-market research.
- **Polite and reliable**: one request at a time per career site with pauses, automatic retries on HTTP 429 and 5xx with back-off.
- **Clean dates**: every row has `postedOn` as `YYYY-MM-DD`, exact when details are fetched and clearly flagged (`postedOnIsEstimate`) when derived from "Posted N Days Ago".

### How to use it

1. Click **Try for free** (or open the Actor in Apify Console).
2. Enter company names in **Companies** and/or paste Workday career site URLs in **Workday career site URLs**.
3. Optionally add **Search keywords**, a **Location filter** and **Posted within (days)**.
4. Switch on **Include full job description** if you need descriptions and salaries.
5. Click **Start**, then download the results as JSON, CSV, Excel, or read them via API.
6. For alerts: turn on **Only new jobs**, save the task and add a **schedule** (e.g. every morning).

### Input example

```json
{
  "companies": ["NVIDIA", "Salesforce"],
  "careerSiteUrls": ["https://target.wd5.myworkdayjobs.com/en-US/targetcareers"],
  "searchText": "engineer",
  "locations": ["Texas", "Remote"],
  "postedWithinDays": 7,
  "includeDescription": true,
  "maxItemsPerCompany": 100,
  "onlyNewJobs": true
}
```

| Field | What it does |
|---|---|
| `companies` | Names from the built-in directory (case-insensitive). `ALL` = every company. |
| `careerSiteUrls` | Any public Workday career site or job URL. |
| `searchText` | Keywords for Workday's search. Empty = all open roles, newest first. |
| `locations` | Keep jobs whose location contains any of these words. |
| `postedWithinDays` | Keep jobs posted in the last N days. |
| `includeDescription` | Fetch the job detail (description, exact date, salary, all locations). |
| `includeDescriptionHtml` | Also return the original description HTML. |
| `maxItemsPerCompany` | Cap saved jobs per career site (default 100, max 2,000). |
| `onlyNewJobs` / `deltaStoreName` | Delta mode and the named store that remembers seen jobs. |
| `maxConcurrency` | Career sites scraped in parallel (default 4). |

### Sample output

Real rows from a platform run of the default input (`NVIDIA` + `Salesforce`, `engineer`):

| Company | Title | Location | Posted | Req ID |
|---|---|---|---|---|
| Salesforce | Corporate Development M\&A Senior Analyst | California - San Francisco | 2026-10-08 | JR363033 |
| Salesforce | Summer 2027 Intern - Tableau Research | 2 Locations | 2026-10-08 | JR363252 |
| Salesforce | Account Executive - Data Foundations, Public Sector | Australia - South Australia - Remote | 2026-10-08 | JR354774 |
| Salesforce | Software Engineer AMTS (Junior) - Keynote Demo | Mexico - Mexico City | 2026-10-08 | JR362623 |
| NVIDIA | STA Engineer | 2 Locations | 2026-09-23 | JR2016441 |

One full item with `includeDescription: true` (description shortened):

```json
{
  "company": "Lowe's",
  "title": "HR Business Partner",
  "location": "Mooresville, NC (SSC) 1999",
  "locations": ["Mooresville, NC (SSC) 1999"],
  "country": "United States of America",
  "remoteType": "In-Office",
  "timeType": "Full time",
  "postedOn": "2026-10-07",
  "postedOnIsEstimate": false,
  "postedOnText": "Posted Today",
  "postedDaysAgo": 0,
  "jobReqId": "JR-02650199",
  "url": "https://lowes.wd5.myworkdayjobs.com/LWS_External_CS/job/Mooresville-NC-SSC-1999/HR-Business-Partner_JR-02650199",
  "salaryText": null,
  "salaryMin": null,
  "salaryMax": null,
  "salaryCurrency": null,
  "salaryPeriod": null,
  "description": "Do your Best Work in Mooresville\n\nThis position is based at our headquarters in Mooresville, North Carolina...",
  "hiringEntity": "Lowe's Companies, Inc.",
  "careerSiteUrl": "https://lowes.wd5.myworkdayjobs.com/LWS_External_CS",
  "workdayTenant": "lowes",
  "workdaySite": "LWS_External_CS",
  "jobId": "lowes:LWS_External_CS:/job/Mooresville-NC-SSC-1999/HR-Business-Partner_JR-02650199",
  "scrapedAt": "2026-10-08T02:03:47.800Z",
  "isNew": null
}
```

When a posting states pay (for example a Target analyst role: `"$98,000.00 - $176,000.00"`), you get `salaryMin: 98000`, `salaryMax: 176000`, `salaryCurrency: "USD"`, `salaryPeriod: "year"`.

### Pricing

Pay per event, no subscription:

| Event | Price |
|---|---|
| Actor start | $0.00005 per run |
| Job listed (descriptions off) | $0.001 per job ($1 per 1,000) |
| Job with description (descriptions on) | $0.002 per job ($2 per 1,000), replaces Job listed |

**Worked example:** a daily alert over 20 companies, 50 new jobs per day with descriptions = 50 x $0.002 = **$0.10 per day**, about $3 per month. Listing 5,000 jobs without descriptions costs $5. Filtered-out jobs, already-seen jobs (only-new mode) and failed rows are never charged. Set a maximum charge per run in Console to cap spend; the Actor stops cleanly when it is reached.

### Use from AI agents (MCP, ChatGPT, Claude, Perplexity)

Workday Jobs Scraper works as a tool for AI assistants through the official Apify MCP server. Add this server URL to any MCP client (Claude Desktop, Claude Code, Cursor, ChatGPT connectors, VS Code):

```
https://mcp.apify.com/?actors=transparent_meteorite/workday-jobs-scraper
```

Claude Desktop / Cursor config:

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com/?actors=transparent_meteorite/workday-jobs-scraper",
      "headers": { "Authorization": "Bearer <YOUR_APIFY_TOKEN>" }
    }
  }
}
```

Then ask in plain language, for example: "How do I scrape jobs from a myworkdayjobs.com site?"

Call it directly over HTTP (runs the actor and returns the dataset items in one request):

```bash
curl -X POST "https://api.apify.com/v2/acts/transparent_meteorite~workday-jobs-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"companies": ["NVIDIA", "Salesforce"], "searchText": "engineer", "maxItemsPerCompany": 20}'
```

Python:

```python
from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("transparent_meteorite/workday-jobs-scraper").call(run_input={"companies": ["NVIDIA", "Salesforce"], "searchText": "engineer", "maxItemsPerCompany": 20})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

The same actor works in n8n, Make, Zapier, LangChain, LlamaIndex and CrewAI through their Apify integrations.

#### Questions people ask

**How do I scrape jobs from a myworkdayjobs.com site?**
Paste the career-site URL into careerSiteUrls (or a company name from the built-in list) and run.

**Is there a Workday jobs API?**
Workday has no public jobs API for third parties; this actor gives you one through the Apify API.

**Can I get only new jobs each day?**
Yes, set onlyNewJobs true and schedule it.

### Integrations

**API (cURL)**

```bash
curl -X POST "https://api.apify.com/v2/acts/transparent_meteorite~workday-jobs-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"companies":["Pfizer"],"searchText":"scientist","maxItemsPerCompany":50}'
```

**Python**

```python
from apify_client import ApifyClient
client = ApifyClient("YOUR_TOKEN")
run = client.actor("transparent_meteorite/workday-jobs-scraper").call(run_input={
    "companies": ["Boeing", "Northrop Grumman"], "searchText": "systems engineer", "postedWithinDays": 7})
for job in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(job["company"], job["title"], job["location"], job["url"])
```

**JavaScript**

```js
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const run = await client.actor('transparent_meteorite/workday-jobs-scraper').call({ companies: ['Target'], onlyNewJobs: true });
const { items } = await client.dataset(run.defaultDatasetId).listItems();
```

**No-code**: Make, Zapier and n8n via the Apify integrations; Google Sheets, Slack and email via webhooks on run success. **Schedules**: add a daily schedule to a saved task with `onlyNewJobs: true` for a new-jobs feed.

### FAQ

**Is it legal to scrape Workday career sites?** The Actor reads only public job postings that each employer publishes for anyone to see, through the same public endpoints the careers page uses. No login, no captcha bypass, no personal data. You are responsible for how you use the data; check your local rules and the site terms for your use case.

**My company is not in the directory. Can I still scrape it?** Yes. Open its careers page, copy the `myworkdayjobs.com` URL and put it in `careerSiteUrls`. Any Workday career site works.

**How do I find a company's Workday URL?** Click "Careers" / "Search jobs" on the company website; if the address contains `myworkdayjobs.com`, that is it. Unknown company names are listed in the run log.

**Why is a run limited to 2,000 jobs per site?** Workday itself does not page beyond 2,000 results per search. Use keywords, locations or several searches to cover very large employers.

**How accurate is `postedOn`?** With descriptions on, it is the exact posting start date from Workday. Without, it is computed from "Posted N Days Ago" (flagged with `postedOnIsEstimate: true`); "30+ Days Ago" is a lower bound (`postedDaysAgo: 30`).

**Do I always get a salary?** Only when the employer states a pay range in the posting (common for US roles in states with pay transparency laws). It needs `includeDescription: true`.

**How does only-new mode work?** Job IDs you received are stored in a named key-value store (`deltaStoreName`). The next run skips them and does not charge for them. Use a different store name per watch list.

**Does it use proxies?** No. Requests are light, sequential per site, with pauses and back-off on rate limits.

### Limits

- Public Workday career sites only; internal or login-only sites are not reachable.
- Max 2,000 jobs per site per search (Workday's own cap); max 2,000 saved per company per run.
- Location filtering is text-based on Workday's location labels.
- Salary is parsed only from text the employer wrote; formats vary.
- The bundled directory was verified live on 2026-10-07; employers occasionally move career sites. If one fails, the run log says so and the other sites continue.

### Changelog

- 2026-10-07: added plain-language summary, key facts, AI-agent (MCP) section and question-style FAQ; refreshed Store SEO metadata.
- **0.1 (2026-10-07)**: first release. Any career site URL, 167-company verified directory, keyword/location/date filters, descriptions, salary parsing, remote type, only-new delta mode, PPE $1/1k.

### Support

Found a company that does not work, or want a field added? Open an issue on the Actor's **Issues** tab and include the career site URL. Fixes for broken sites are usually same-day.

# Actor input Schema

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

Company names from the bundled, live-verified directory of 165+ large employers on Workday, e.g. NVIDIA, Salesforce, Boeing, Pfizer, Target. Use ALL to scrape every company in the directory. Unknown names are listed in the log.

## `careerSiteUrls` (type: `array`):

Any public Workday career site URL, e.g. https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite or a job link from it. Tenant, data center (wdN) and site are parsed automatically. myworkdaysite.com URLs work too.

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

Keywords passed to Workday's own search, e.g. data engineer, nurse, sales. Leave empty to list every open role (newest first).

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

Keep only jobs whose location contains any of these words (case-insensitive), e.g. Texas, London, Remote. Multi-location jobs are checked against every location.

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

Keep only jobs posted in the last N days, based on Workday's 'Posted N Days Ago'. 0 or empty means no date filter.

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

Fetch each job's detail page: full description text, exact posted date, all locations, country, salary range when stated. Billed as Job with description instead of Job listed.

## `includeDescriptionHtml` (type: `boolean`):

When descriptions are on, also return the original description HTML (field descriptionHtml) for re-publishing.

## `maxItemsPerCompany` (type: `integer`):

Stop after this many saved jobs per career site. Workday itself never pages past 2,000 results per query.

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

Remember job IDs in a named key-value store and return only jobs not seen in earlier runs. Ideal for scheduled runs and job alerts; seen jobs are never charged.

## `deltaStoreName` (type: `string`):

Name of the key-value store used by delta mode. Use different names to keep separate watch lists.

## `maxConcurrency` (type: `integer`):

How many career sites to scrape at once. Each site is always fetched one request at a time with a pause, to stay polite.

## Actor input object example

```json
{
  "companies": [
    "NVIDIA",
    "Salesforce"
  ],
  "searchText": "engineer",
  "includeDescription": false,
  "includeDescriptionHtml": false,
  "maxItemsPerCompany": 20,
  "onlyNewJobs": false,
  "deltaStoreName": "workday-jobs-seen",
  "maxConcurrency": 4
}
```

# Actor output Schema

## `overview` (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": [
        "NVIDIA",
        "Salesforce"
    ],
    "searchText": "engineer",
    "maxItemsPerCompany": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("transparent_meteorite/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": [
        "NVIDIA",
        "Salesforce",
    ],
    "searchText": "engineer",
    "maxItemsPerCompany": 20,
}

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

```

## MCP server setup

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