# Workday Jobs API: Career Site Job Listings (`norespi/workday-jobs`) Actor

Gets the latest jobs from any Workday career site (myworkdayjobs.com): title, company, location, remote hint, contract type, dates. Reads the public sitemap and JobPosting data, robots.txt respected. $1.50 per 1,000 jobs.

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

## Pricing

$1.50 / 1,000 jobs

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

**Workday Jobs API** that returns the **latest job postings of any Workday career site** (`*.myworkdayjobs.com`): NVIDIA, Salesforce, Cisco, Intel, Adobe, Accenture, Target and thousands of other employers that run their hiring on Workday. Give it a list of career site URLs and get **one clean dataset**: title, company, location, contract type, posting date, closing date and the link to apply.

Filter by **title keywords, location and posting date**. Export to **JSON, CSV, Excel or Google Sheets**, call it from the **Apify API**, **schedule** it daily, or let an **AI agent** use it through MCP.

How it works, plainly: the Actor reads each site's **robots.txt**, follows the **sitemap** it declares, then reads the **schema.org JobPosting** data that Workday publishes on every job page for Google for Jobs. No login, no browser, no internal Workday API. That also sets the main limit: most Workday sitemaps list only the **100 most recent jobs** (see Limits).

### What data does the Workday Jobs API return?

| Field | Example |
|---|---|
| `title` | ASIC Design Verification Engineer |
| `company` | Cisco Systems, Inc. (employer name without Workday's entity code) |
| `legalEntity` | 020 Cisco Systems, Inc. (raw `hiringOrganization` as published) |
| `jobId` | 2010971 (the employer's requisition ID) |
| `locations`, `locationText`, `country` | Job location from the posting's address |
| `applicantCountries` | Countries applicants must be in, when published |
| `workplaceType`, `remote` | `remote`, `hybrid`, `onsite` or `null`: a hint read from the title, location and description wording |
| `jobLocationType` | Raw schema.org value, e.g. `TELECOMMUTE` (see Limits before trusting it) |
| `employmentType` | `full-time`, `part-time`, `contract`, `internship`, `per-diem`, `volunteer`, `other` |
| `datePosted`, `validThrough` | `2026-10-12`, `2026-11-30` (`validThrough` only when the employer sets a closing date) |
| `url` | The job page, where candidates apply |
| `careerSite`, `tenant` | `https://cisco.wd5.myworkdayjobs.com/Cisco_Careers`, `cisco` |
| `scrapedAt` | When the run read the page |
| `description` | Optional: first 1,000 characters of the description, plain text |

Fields an employer does not publish are `null` or `[]`. Nothing is guessed or invented.

### How to use the Workday Jobs API

1. Click **Try for free**.
2. Paste one or more **Workday career site URLs** (the address of the jobs page, e.g. `https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite`). Optionally add **title keywords**, **locations** and a **posted within** limit.
3. Click **Start**. Download the jobs from the **Output** tab as JSON, CSV or Excel, or fetch them through the API.

Input example:

```json
{
  "careerSites": [
    "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite",
    "https://salesforce.wd12.myworkdayjobs.com/External_Career_Site",
    "https://cisco.wd5.myworkdayjobs.com/Cisco_Careers"
  ],
  "keywords": ["engineer", "data scientist"],
  "locations": ["United States", "Canada"],
  "postedWithinDays": 3,
  "maxItems": 200
}
```

#### Input fields

| Field | Default | What it does |
|---|---|---|
| `careerSites` | 3 examples (prefilled) | Workday career site URLs, or single Workday job URLs. Locale prefixes like `/en-US/` are handled. Only `*.myworkdayjobs.com` addresses. |
| `keywords` | `["engineer"]` (prefilled) | Keep a job if its title contains one of these words or phrases (whole words, case-insensitive). Checked on the job URL **before** the page is fetched, so filtered jobs cost nothing. Empty = all jobs. |
| `locations` | none | Keep a job if its location, country or applicant country contains one of these texts, e.g. `Santa Clara`, `Germany`, `United States of America`. |
| `postedWithinDays` | none | Keep only jobs posted in the last N days. |
| `maxItems` | 10 (prefilled), 100 | Maximum jobs saved for the whole run. |
| `includeDescription` | `false` | Add the first 1,000 characters of the description, with e-mails, phone numbers and personal profile links removed. |

#### How to find a company's Workday career site URL

Open the company's careers page and click any job. If the address contains `myworkdayjobs.com`, copy everything up to the site name: `https://<company>.wd<N>.myworkdayjobs.com/<SiteName>`. You can also paste a job URL directly: the Actor reads that job.

### Output example

```json
{
  "company": "Cisco Systems, Inc.",
  "legalEntity": "020 Cisco Systems, Inc.",
  "title": "ASIC Design Verification Engineer",
  "jobId": "2010971",
  "locations": ["USA-SAN JOSE, United States of America"],
  "locationText": "USA-SAN JOSE, United States of America",
  "country": "United States of America",
  "applicantCountries": ["United States of America"],
  "workplaceType": null,
  "remote": null,
  "jobLocationType": "TELECOMMUTE",
  "employmentType": "full-time",
  "datePosted": "2026-10-12",
  "validThrough": "2026-11-30",
  "url": "https://cisco.wd5.myworkdayjobs.com/Cisco_Careers/job/San-Jose-California-US/ASIC-Design-Verification-Engineer_2010971-1",
  "careerSite": "https://cisco.wd5.myworkdayjobs.com/Cisco_Careers",
  "tenant": "cisco",
  "scrapedAt": "2026-10-13T03:19:18.141Z"
}
```

A real record from the prefilled run on 2026-10-13 (10 jobs from 3 career sites in about 4 seconds). A `RUN_SUMMARY` record in the key-value store lists, per career site, the sitemap used, how many jobs it lists, how many URLs robots.txt disallowed, pages fetched, jobs saved and errors.

### How much does it cost to get Workday jobs?

**$1.50 per 1,000 jobs.** You pay only for jobs saved to the dataset. Jobs dropped by your filters are not charged.

| You get | You pay |
|---|---|
| 10 jobs (prefilled input) | $0.015 |
| 100 jobs | $0.15 |
| 1,000 jobs | $1.50 |

Set `maxItems` to cap a run. Apify's free plan credit covers thousands of jobs a month.

### How to get new Workday jobs every day

Because most Workday sitemaps only show the latest 100 postings, a **daily schedule** is the right way to use this Actor: create a schedule in Apify (e.g. every morning) with `postedWithinDays: 1` or `2`, and each run returns the new jobs. Send them to **Slack, Google Sheets, email, Zapier, Make, n8n** or a **webhook** with Apify integrations, and de-duplicate on `careerSite` + `jobId` on your side.

### Use the Workday Jobs API with AI agents (MCP)

Claude, Cursor and other MCP clients can call this Actor through the official Apify MCP server. Add `NORESPI/workday-jobs` to your Apify MCP configuration, then ask things like "which engineering jobs did NVIDIA and Cisco post on Workday in the last two days?".

### Use cases

- **Job alerts** on the employers you care about: new postings to Slack or Sheets every morning.
- **Hiring signals for sales and investors**: which large companies are opening roles, in which countries, for which functions, week after week.
- **Job boards and newsletters**: fresh jobs from big Workday employers, with the employer's own apply link.
- **Recruiting and labor market research**: posting volume by company, location and contract type over time (build the history with a daily schedule).
- **Job seekers**: one list of the newest jobs at your target companies, filtered by title and location.

### Limits (stated up front)

- **Most sitemaps are capped at 100 jobs.** Measured on 2026-10-13: NVIDIA, Salesforce, Intel, Adobe, Target, Accenture, Pfizer, Boeing and Mastercard each list **exactly 100** job URLs, newest first. NVIDIA's career site shows about 2,000 open jobs, so one run sees roughly the last 2 days of NVIDIA postings (about 4 days for Intel). Some tenants list everything: Cisco's sitemap had **1,378** jobs going back about 11 months. Smaller sites list fewer than 100 because they have fewer jobs (Salesforce's Slack site: 19). Paging parameters do not change the sitemap. **This Actor is a "latest jobs" feed, not a full export of a large employer's openings.** For full history, schedule it daily.
- **We do not use Workday's internal search API** (`/wday/cxs/…`), which is what full-export scrapers call. Workday's terms target their APIs, so we stay on the public robots.txt → sitemap → JobPosting path. That is the trade-off behind the 100-job cap.
- **One location per job.** Workday's JobPosting data only carries the primary location. A job open in 3 cities shows the first one.
- **Remote is a hint, not a field.** Workday sets `jobLocationType: TELECOMMUTE` on many on-site jobs (every Salesforce and Cisco job we checked), so we pass it raw and do **not** treat it as remote. `workplaceType` comes from explicit wording ("Remote" in the title or location, "fully remote position", "hybrid role"…) and is `null` most of the time.
- **No salary field.** Workday does not put pay in its JobPosting data. When an employer writes the pay range in the description, it shows up in the `description` excerpt.
- `validThrough` exists only when the employer sets a closing date (Cisco does, NVIDIA does not).
- The keyword pre-filter reads the title from the job URL. If an employer renamed a job after posting it, the URL can carry the old title and the job may be skipped. The final check uses the real title.
- **robots.txt is checked at run time** for every host. Career sites or job URLs it disallows are skipped and reported in `RUN_SUMMARY`. A career site whose sitemap is not listed in robots.txt is skipped too.
- Only `*.myworkdayjobs.com` addresses. Company pages that embed Workday on their own domain are not supported: use the `myworkdayjobs.com` link behind them.
- Polite by design: at most 3 requests at a time per Workday host, with a delay between them; a host that answers 403 or 429 after retries is not contacted again in that run.
- **Remaining legal risk.** Workday's site terms forbid robots and scraping. This Actor only reads public pages that need no account or login (robots.txt, sitemap and the JobPosting JSON-LD of each job page), respects robots.txt, never calls the internal `/wday/cxs` API and never bypasses any block. Not affiliated with Workday. Any site or company can ask us to stop reading its career site: the source is removed within 7 days.

### Privacy

Company-level job data only. The Actor never outputs recruiter names as fields, e-mail addresses, phone numbers or personal profile links (LinkedIn, X/Twitter, Calendly, Telegram, WhatsApp…): they are removed from the optional description excerpt. The excerpt is limited to 1,000 characters; the full description stays on the employer's page.

### FAQ

#### Do I need a Workday account?

No. Everything read is public: robots.txt, the sitemap and the job pages that Workday publishes for search engines.

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

Because the sitemap lists only the most recent 100 jobs on most Workday sites. See Limits. Schedule the Actor daily to build the full picture over time.

#### How fresh are the jobs?

Read live at run time. Sitemaps are ordered newest first, and with `postedWithinDays` the Actor stops reading a site once it reaches older jobs.

#### Can I export Workday jobs to CSV, Excel or Google Sheets?

Yes, from the Output tab, the API, or the Google Sheets integration.

#### Why is `company` sometimes a local entity like "NVIDIA Singapore Development PTE. Ltd. Taiwan Branch"?

That is what the employer publishes as `hiringOrganization`. We only remove Workday's internal entity code (kept in `legalEntity`). Use `tenant` to group all jobs of one employer.

#### Is this Actor affiliated with Workday?

No. It is an independent tool, not affiliated with Workday or with the employers whose public job postings it reads.

### Other job data Actors by NORESPI

| Actor | What it does |
|---|---|
| [Career Page Jobs API](https://apify.com/NORESPI/ats-jobs-by-company) | Every open job of a list of companies from Greenhouse, Lever, Ashby, Workable and more ATS |
| [Remote Jobs API](https://apify.com/NORESPI/remote-jobs-aggregator) | Remote OK, We Work Remotely and Himalayas in one deduplicated dataset |
| [HN Who Is Hiring Jobs API](https://apify.com/NORESPI/hn-who-is-hiring) | The monthly Hacker News "Who is hiring?" thread as structured jobs |

Questions, bugs or a feature you need: open an issue in the **Issues** tab.

# Actor input Schema

## `careerSites` (type: `array`):

Workday career site URLs (e.g. https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite) or single Workday job URLs. Only \*.myworkdayjobs.com addresses are supported. For each career site the Actor reads the sitemap listed in the site's robots.txt.

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

Keep a job if its title contains at least one of these words or phrases (whole words, case-insensitive). Checked on the job URL before the job page is fetched, so it also saves time and money. Leave empty for all jobs.

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

Keep a job if its location, country or applicant country contains one of these texts (case- and accent-insensitive), e.g. Santa Clara, Germany, Tokyo, United States of America. Leave empty for all locations.

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

Keep only jobs whose datePosted is within this many days. Leave empty for no date filter.

## `maxItems` (type: `integer`):

Maximum number of jobs saved to the dataset for the whole run (all career sites together). You pay only for saved jobs.

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

Add the start of the job description as plain text (at most 1,000 characters). E-mail addresses, phone numbers and personal profile links are removed.

## Actor input object example

```json
{
  "careerSites": [
    "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite",
    "https://salesforce.wd12.myworkdayjobs.com/External_Career_Site",
    "https://cisco.wd5.myworkdayjobs.com/Cisco_Careers"
  ],
  "keywords": [
    "engineer"
  ],
  "maxItems": 10,
  "includeDescription": false
}
```

# Actor output Schema

## `results` (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 = {
    "careerSites": [
        "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite",
        "https://salesforce.wd12.myworkdayjobs.com/External_Career_Site",
        "https://cisco.wd5.myworkdayjobs.com/Cisco_Careers"
    ],
    "keywords": [
        "engineer"
    ],
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("norespi/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 = {
    "careerSites": [
        "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite",
        "https://salesforce.wd12.myworkdayjobs.com/External_Career_Site",
        "https://cisco.wd5.myworkdayjobs.com/Cisco_Careers",
    ],
    "keywords": ["engineer"],
    "maxItems": 10,
}

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

```

## MCP server setup

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