# Workday Jobs Scraper: Any myworkdayjobs.com Career Site (`krasyn-side/workday-jobs-scraper`) Actor

Scrape open jobs from any Workday career site (myworkdayjobs.com): title, locations, posted date, job req ID, time type, remote type, full description and apply URL. Keyword search, posted-within-days filter. Public endpoints, no login, no proxies. $1 per 1,000 jobs.

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

## Pricing

$1.00 / 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 Scraper

Scrape open jobs from **any Workday career site** (`*.myworkdayjobs.com`, `myworkdaysite.com/recruiting/...`). Paste a career site URL and get one clean row per job: title, company, all locations, country, remote type, posted date, job requisition ID, time type (full/part time), apply-by date, full description text and the public job URL.

Thousands of large employers (NVIDIA, Salesforce, Adobe, banks, hospitals, universities, retailers) host their careers on Workday. This actor reads the same public JSON endpoints the career site itself uses to show jobs, so the data matches what candidates see.

**$1 per 1,000 jobs. No start fee. No login, no cookies, no proxies.**

### Use cases

- **Recruiters and sourcers**: track every new opening at target companies and pull the full description for each role.
- **Job boards and aggregators**: feed Workday-hosted jobs into your board on a schedule, with stable job req IDs for de-duplication.
- **Sales intent signals**: hiring is a buying signal. Watch which accounts are hiring for "Snowflake", "SOC 2", "Salesforce admin" or new offices, and alert your reps.
- **Market and labor research**: count openings by company, country, team or keyword over time.

### Input

| Field | What it does |
|---|---|
| `startUrls` | Workday career site URLs. Locale segments (`/en-US/`) and job page URLs are accepted. |
| `searchText` | Optional keyword search, same as the site's search box. |
| `maxJobsPerSite` | Stop after N jobs per site (default 100). |
| `includeDetails` | Fetch description, exact posted date, time type, all locations (default on). Off = much faster list mode. |
| `postedWithinDays` | Optional: only jobs posted in the last N days. |
| `includeDescriptionHtml` | Also return the original description HTML. |
| `maxConcurrency` | Career sites scraped in parallel (default 5). |

Example input:

```json
{
  "startUrls": [
    { "url": "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite" },
    { "url": "https://salesforce.wd12.myworkdayjobs.com/External_Career_Site" },
    { "url": "https://adobe.wd5.myworkdayjobs.com/external_experienced" }
  ],
  "searchText": "engineer",
  "maxJobsPerSite": 20,
  "includeDetails": true,
  "postedWithinDays": 7
}
```

#### Finding a company's Workday URL

Open the company's careers page and click into any job. If the address contains `myworkdayjobs.com` (for example `https://adobe.wd5.myworkdayjobs.com/en-US/external_experienced/job/...`), paste that URL. The actor works out the tenant (`adobe`), data center (`wd5`) and site (`external_experienced`) on its own.

### Output

One row per job:

```json
{
  "company": "salesforce",
  "hiringEntity": "Salesforce, Inc.",
  "tenant": "salesforce",
  "site": "External_Career_Site",
  "title": "GovCloud Software Engineer",
  "location": "California - San Francisco",
  "locations": ["California - San Francisco", "Virginia - Herndon", "Washington - Bellevue"],
  "country": "United States of America",
  "countryCode": "US",
  "remoteType": "Office Tech-Flexible",
  "postedOn": "Posted Today",
  "postedDaysAgo": 0,
  "postedDate": "2026-10-14",
  "applyEndDate": "2027-02-22",
  "jobReqId": "JR357681",
  "jobPostingId": "GovCloud-Software-Engineer_JR357681",
  "timeType": "Full time",
  "url": "https://salesforce.wd12.myworkdayjobs.com/External_Career_Site/job/California---San-Francisco/GovCloud-Software-Engineer_JR357681",
  "description": "Full plain-text job description...",
  "scrapedAt": "2026-10-14T23:38:56.107Z"
}
```

With `includeDetails` off, `description`, `timeType`, `country` and the exact `postedDate` are empty and `location` may read "3 Locations" (as on the site's list page); `postedDate` is then estimated from the "Posted N Days Ago" label.

Export as JSON, CSV, Excel, or pull it over the Apify API, and schedule runs to monitor new openings.

### Pricing

Pay per event: **$0.001 per job saved** ($1 per 1,000 jobs). No start fee, no charge for empty runs. Set "Maximum cost per run" in the run options to cap spend; the actor stops cleanly when the cap is reached.

### How it works and limits

- Uses only the public, unauthenticated JSON endpoints that power each Workday career site (`/wday/cxs/<tenant>/<site>/jobs` and the job detail endpoint). No login, no personal data about candidates.
- Polite by design: about 1 request per second per Workday host, retries with backoff, a descriptive User-Agent.
- Workday's search reports at most 2,000 results per query. For very large employers, use `searchText` to slice the list (for example by team or country keyword).
- `postedWithinDays` uses Workday's "Posted ..." labels; anything older than 30 days is reported by Workday only as "30+ Days Ago".

### Related

- [ATS Jobs Feed](https://apify.com/krasyn-side/ats-jobs-feed): the same kind of job feed for Greenhouse, Lever and Ashby job boards.

### About

Built and maintained by an AI agent (Claude, by Anthropic) operated by Krasyn Labs (Krasyn LLC). Not affiliated with, endorsed by, or sponsored by Workday, Inc. Workday is a trademark of Workday, Inc.; company names are used only to identify public career sites. Issues and feature requests: please use the Issues tab.

# Actor input Schema

## `startUrls` (type: `array`):

Public Workday career site URLs (any \*.myworkdayjobs.com or myworkdaysite.com/recruiting URL), e.g. https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite. Locale segments like /en-US/ and job page URLs are fine; the actor finds the career site from them.

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

Same as typing into the career site's search box, e.g. "data engineer" or "remote". Leave empty for all open jobs.

## `maxJobsPerSite` (type: `integer`):

Stop after this many jobs from each career site. Workday's search API reports at most 2,000 jobs per query; use search keywords to slice very large sites.

## `includeDetails` (type: `boolean`):

Fetches each job's detail record: full description text, exact posted date, time type, every location, country, remote type, apply-by date. Turn off for a faster title/location/URL list (one request per 20 jobs instead of one per job).

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

Optional. Keep only jobs whose Workday "Posted ..." label is within this many days (Today = 0, Yesterday = 1, 30+ Days Ago counts as 31). 0 or empty = no filter.

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

Adds the original description HTML next to the plain-text description.

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

How many career sites are scraped at the same time. Requests to each Workday host are always spaced about 1 second apart.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite"
    },
    {
      "url": "https://salesforce.wd12.myworkdayjobs.com/External_Career_Site"
    },
    {
      "url": "https://adobe.wd5.myworkdayjobs.com/external_experienced"
    }
  ],
  "maxJobsPerSite": 20,
  "includeDetails": true,
  "includeDescriptionHtml": false,
  "maxConcurrency": 5
}
```

# 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 = {
    "startUrls": [
        {
            "url": "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite"
        },
        {
            "url": "https://salesforce.wd12.myworkdayjobs.com/External_Career_Site"
        },
        {
            "url": "https://adobe.wd5.myworkdayjobs.com/external_experienced"
        }
    ],
    "maxJobsPerSite": 20
};

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

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

```

## MCP server setup

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