# Workday Jobs Scraper — Any Company (`memo23/workday-jobs-scraper`) Actor

Scrape any company's Workday careers page. Paste a {tenant}.myworkdayjobs.com URL — get structured rows: title, JR requisition ID, full description, all locations, time type, salary band when published, employer, postedOn, applyUrl. Filter by jobType, jobFamily, or location.

- **URL**: https://apify.com/memo23/workday-jobs-scraper.md
- **Developed by:** [Muhamed Didovic](https://apify.com/memo23) (community)
- **Categories:** Jobs, Automation, Agents
- **Stats:** 20 total users, 19 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $0.90 / 1,000 results

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Workday Jobs Scraper — Any Company

Scrape job postings from **any company's Workday careers page** — paste any `{tenant}.myworkdayjobs.com` URL and get clean structured rows: title, requisition ID, full HTML description, **multi-location capture** (one job, every advertised location), employment type, salary band when published, employer + tenant slug, `postedOn`, `startDate`, and direct `applyUrl`. One flat row per posting.

![How Workday Jobs Scraper works](https://raw.githubusercontent.com/muhamed-didovic/muhamed-didovic.github.io/main/assets/how-it-works-workday.png)

### Why this actor

Workday's HCM platform powers careers pages for **thousands of large employers** — Fortune 500s, Series-A+ startups, government bodies, hospitals, universities. NVIDIA, Accenture, Salesforce, Charles Schwab, Procter & Gamble — anyone on `{tenant}.wd{N}.myworkdayjobs.com`. This actor delivers clean structured rows from any tenant with zero per-site code:

- **Tenant-agnostic URL parser** — handles any `{tenant}.wd{1-103}.myworkdayjobs.com` URL automatically. No hardcoded tenant list; if it's on Workday, it works.
- **Workday's own structured JSON endpoints** — no HTML scraping. We call the same `/wday/cxs/{tenant}/{site}/jobs` endpoint the Workday careers page itself uses. No anti-bot to bypass, no fingerprinting; the data arrives pre-structured.
- **Friendly-label filter resolver** — paste `?jobType=fullTime`, `?jobFamily=Software Engineering`, `?location=London`, `?searchText=engineer` in your URL. We pre-fetch each tenant's `facets[]` map at run-start and translate the friendly label to Workday's internal UUID. Filters are applied server-side, identical to the careers-page UI.
- **Multi-location capture** — Workday lists "same job, multiple sites" as one canonical posting with a primary `location` plus an `additional[]` array. Both are preserved. Customers who want a single-location-per-row shape can flatten downstream.
- **Salary band regex (USD / GBP / EUR)** — when a tenant publishes pay in the job description (US compliance roles, EU transparency directive), we parse `min / max / currency / period` cleanly.
- **Mixed input** — listing URLs auto-paginate + emit one row per posting (chunks of 20, capped by your `maxItems`); direct detail URLs (`.../job/{location}/{slug}_JR{reqId}`) scrape one row each.

### Use cases

- **Talent intelligence** — track Workday-hosted hiring for any portfolio company; cross-reference req IDs over time to spot ramp-up / freeze patterns
- **Sales prospecting (HR-tech / ATS)** — discover which Workday-customer companies are hiring in your target verticals + locations
- **Comp benchmarking** — aggregate published salary bands by `jobFamily` + region (US compliance + EU transparency requirements have grown the share of jobs with structured pay disclosure)
- **Recruitment market intelligence** — Workday powers a meaningful chunk of large-enterprise hiring; tenant-level inventory snapshots feed BI dashboards
- **ATS / job-aggregator integration** — clean structured rows for downstream pipelines without per-tenant HTML scrapers
- **Geospatial analytics** — every row carries primary + additional location strings (city/region/country), parse-ready for downstream geocoding

### Input

| Field | Type | Required | Notes |
|---|---|---|---|
| `startUrls` | `string[]` | yes | Mix of careers-page URLs (`https://nvidia.wd5.myworkdayjobs.com/en-US/NVIDIAExternalCareerSite`) and direct job-detail URLs (`.../job/US-CA-Santa-Clara/Senior-CPU-Performance-Architect_JR2018189`). Filters supported in the query string: `?searchText=`, `?jobType=fullTime|partTime`, `?jobFamily={areaOfWork}`, `?location={cityOrCountry}`. Friendly labels are resolved to each tenant's UUID at run-start. |
| `maxItems` | `integer` | no | Maximum job rows emitted **per careers URL**. 3 tenant URLs × `maxItems: 100` → up to 300 total rows (100 per tenant). Direct detail URLs always emit 1 row each. Each row = one paid dataset item. Default `1000`. Free-tier users are additionally capped at 100 total rows across the whole run. |
| `maxConcurrency` | `integer` | no | Parallel HTTP requests for detail-page fetches. Workday's API has no anti-bot — concurrency 5–10 is comfortable. Default `4`. |
| `maxRequestRetries` | `integer` | no | Per-URL retry budget on transient network errors and 5xx responses. Each retry rotates the proxy session with mild exponential backoff. Default `6`. |
| `proxy` | object | no | Apify Residential (any country) recommended. Workday tolerates direct + datacenter IPs in our recon, but residential is the safe default. Override if you need a specific geo (some tenants serve different content to US vs EU traffic for compliance). |

#### Example input

```json
{
  "startUrls": [
    "https://nvidia.wd5.myworkdayjobs.com/en-US/NVIDIAExternalCareerSite",
    "https://accenture.wd103.myworkdayjobs.com/en-US/AccentureCareers?jobType=fullTime&searchText=engineer",
    "https://nvidia.wd5.myworkdayjobs.com/en-US/NVIDIAExternalCareerSite/job/US-CA-Santa-Clara/Senior-CPU-Performance-Architect_JR2018189"
  ],
  "maxItems": 200,
  "maxConcurrency": 4,
  "proxy": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
}
````

### Output schema

Every row has `rowType: "job"`. **18 fields per posting**, combining Workday's listing summary, the full detail payload, and the canonical share URL.

```jsonc
{
  "rowType":           "job",
  "sourceSearchUrl":   "https://accenture.wd103.myworkdayjobs.com/en-US/AccentureCareers?jobType=fullTime&searchText=engineer",  // the listing URL this row came from (null for direct detail URLs)
  "jobReqId":          "JR2018189",                          // Workday requisition ID — stable identifier, unique per tenant
  "jobUrl":            "https://nvidia.wd5.myworkdayjobs.com/en-US/NVIDIAExternalCareerSite/job/US-CA-Santa-Clara/Senior-CPU-Performance-Architect_JR2018189",
  "externalPath":      "/US-CA-Santa-Clara/Senior-CPU-Performance-Architect_JR2018189",  // path tail under /job/
  "sourceSite":        "nvidia.wd5.myworkdayjobs.com",       // tenant + cluster host

  "title":             "Senior CPU Performance Architect",
  "description":       "<div><p><span><span>Do you want to help drive the development of CPU technology…",  // HTML, full body
  "postedOn":          "Posted Today",                       // Workday's display string (relative: "Posted Today", "Posted 5 Days Ago", or "Posted 2026-04-30")
  "startDate":         "2026-05-22",                         // YYYY-MM-DD when present
  "timeType":          "Full time",                          // Workday's own label (Full time / Part time / Fixed Term)
  "jobPostingSiteId":  "NVIDIAExternalCareerSite",           // the site segment from the URL
  "canApply":          true,                                 // whether the req is still open for applications

  // ── Employer / tenant ──
  "employer": {
    "name":            "2100 NVIDIA USA",                    // Workday's hiring-org label (often the internal cost-centre name)
    "tenantSlug":      "nvidia",                             // the tenant subdomain — also the canonical company key
    "careersUrl":      "https://nvidia.wd5.myworkdayjobs.com/en-US/NVIDIAExternalCareerSite",
    "url":             ""                                    // hiring-org website when published, empty string otherwise
  },

  // ── Location (multi-site capture) ──
  "location": {
    "text":            "US, CA, Santa Clara",                // primary location
    "additional":      ["US, TX, Austin", "US, OR, Hillsboro"]  // every additional site the same req is listed at
  },

  // ── Salary band (regex-parsed from description text — varies by tenant + region) ──
  "salary": {
    "rawText":         "$184,000 - $282,000 USD per year",
    "min":             184000,
    "max":             282000,
    "currency":        "USD",                                // ISO code (USD / GBP / EUR)
    "period":          "year"                                // year / hour / day / week / month
  },

  // ── Apply flow ──
  "applyUrl":          "https://nvidia.wd5.myworkdayjobs.com/en-US/NVIDIAExternalCareerSite/job/US-CA-Santa-Clara/Senior-CPU-Performance-Architect_JR2018189",
  "applyType":         "internal",                           // always "internal" — Workday hosts the apply form on the same domain

  "similarJobs":       [                                     // Workday's recommended similar jobs, when surfaced
    { "title": "GPU Performance Architect", "externalPath": "/US-CA-Santa-Clara/GPU-Performance-Architect_JR2014567" }
  ],

  "scrapedAt":         "2026-05-22T21:05:44.129Z"
}
```

### How it works

1. **Classify input** — listing URLs (`/en-US/{site}` or `/en-US/{site}/?searchText=…`) vs. direct detail URLs (`/en-US/{site}/job/{location}/{slug}_JR{reqId}`). Listings auto-paginate via the Workday JSON API; details fetch one record each.
2. **Pre-fetch facets per tenant** — first listing call requests `limit=1` and inspects the `facets[]` payload, building a `descriptor → UUID` lookup map. Friendly query-string labels (`?jobType=fullTime`) resolve through this map to the tenant's internal facet UUID before pagination starts.
3. **Paginate** — `POST /wday/cxs/{tenant}/{site}/jobs` with `{ limit: 20, offset: N, searchText, appliedFacets }` walks the listing in chunks of 20. (Workday's hard cap.) We stop when `maxItems` is reached or the response runs out of items.
4. **Fetch each detail** — `GET /wday/cxs/{tenant}/{site}/job{externalPath}` returns the full payload: `jobPostingInfo`, `hiringOrganization`, `similarJobs`. Sliding-window concurrency (`maxConcurrency`) keeps the pipeline fast.
5. **Map + emit** — combine listing summary + detail + canonical URL into one flat row. Salary regex runs over `jobDescription`. One row per `externalPath`.

### Apply flow — `applyUrl` and `applyType`

Workday hosts the apply form on the same tenant subdomain as the job page, so the `applyUrl` is always the canonical detail URL on the tenant's own Workday subdomain. We always set:

| Field | Value | Meaning |
|---|---|---|
| `applyUrl` | `https://{tenant}.{wd}.myworkdayjobs.com/{lang-country}/{site}/job{externalPath}` | The canonical share / apply URL. Same domain as the job page. |
| `applyType` | `"internal"` | Workday hosts the form on its own domain — no external recruiter ATS handoff. |
| `canApply` | `true` / `false` | From `jobPostingInfo.canApply`. Some reqs are listed but no longer accepting applications (e.g. "filled, on review"). |

Unlike job-board aggregators where the apply destination is an external ATS, Workday **is** the ATS — every Workday job's apply form lives on the same `{tenant}.myworkdayjobs.com` domain.

### Notes & limitations

- **Same job listed at multiple locations = multiple rows.** Workday's search API returns one entry per (jobReqId, location) pair when a req is open at multiple sites. The shared detail payload's `additionalLocations` array tells you the other sites, so each row's `location.additional[]` is consistent. If you want one-row-per-req, dedupe on `jobReqId` downstream — the rows are otherwise identical except for the primary `location.text`.
- **Salary fill ≈ 25 % across tenants.** Salary publication is tenant- and region-dependent. US tenants subject to state pay-transparency laws (CA, CO, NY, WA) and EU tenants under the 2026 Pay Transparency Directive publish bands; many roles outside those rules don't. When unpublished, `salary` is `null`.
- **`startDate` filled when present.** Workday sometimes carries it separately from `postedOn`; when only `postedOn` is present, `startDate` is `null`.
- **Friendly labels resolve case-insensitively.** `?jobType=fullTime` (camelCase), `?jobType=Full-Time`, `?jobType=full time` all map to the same UUID.
- **Tenant-specific facets fall back to UUIDs.** If you know a tenant's internal UUID, pass it directly as `?appliedFacet_locationMainGroup={UUID}` and the actor passes it through verbatim.
- **No anti-bot on Workday's JSON API.** Direct connections work in recon; we still route through Apify Residential by default because (a) some tenants serve geo-restricted listings, (b) residential IPs blend best with normal browser traffic, (c) consistent behaviour across runs is worth the small cost.

### FAQ

**Which Workday URLs work?**
Any `{tenant}.{wd_cluster}.myworkdayjobs.com` URL — both listing pages (`/en-US/{site}` with or without filters) and direct detail pages (`/en-US/{site}/job/{location}/{slug}_JR{reqId}`). You can mix both in the same `startUrls` array; the actor classifies each one automatically.

**What does `{wd_cluster}` mean in the URL?**
Workday's regional tenant routing — `wd1`, `wd2`, `wd5`, `wd103`, etc. Each cluster hosts a different shard of tenants. The actor handles any `wd\d+` cluster transparently; you don't need to know which one.

**Why are some friendly filter labels unresolved?**
Workday's facet labels are tenant-specific — one company's `jobFamilyGroup` might say "Software Engineering" while another says "Engineering & Technology". The actor logs a `[INTERNAL] couldn't resolve friendly filter label …` warning when your label doesn't match any value in the tenant's `facets[]` array. Solution: open the tenant's careers page in a browser, apply the filter manually, copy the appliedFacet UUID out of the URL, and re-run with `?appliedFacet_{facetParameter}={UUID}`.

**Why does `maxItems` cap behave per-URL, not per-run?**
So that batching multiple tenants stays predictable. If you paste `[nvidia, accenture, salesforce]` with `maxItems: 50`, you get up to 150 rows (50 from each), not 50 split arbitrarily across them. Direct detail URLs are always one row regardless.

**What's the difference between `jobReqId`, `externalPath`, and `jobPostingSiteId`?**
Three distinct identifiers:

- **`jobReqId`** — the stable Workday requisition ID (e.g. `JR2018189`, `R-12345`). Same job across all its location-rows shares this ID. **Dedupe on this for one-row-per-req.**
- **`externalPath`** — the URL path tail under `/job/`, including the location segment (e.g. `/US-CA-Santa-Clara/Senior-CPU-Performance-Architect_JR2018189`). Differs across location-rows of the same req.
- **`jobPostingSiteId`** — the tenant's careers-site identifier (e.g. `NVIDIAExternalCareerSite`, `AccentureCareers`). Constant within one tenant.

**Can the parsed salary handle USD / GBP / EUR / ranges?**
Yes. The regex catches `$184,000 - $282,000 USD per year`, `£60k - £85k per annum`, `€45,000–€60,000 / year`, and single values. The `period` field normalizes to `year`/`hour`/`day`/`week`/`month`. When the description has no salary text, `salary` is `null` — we don't synthesize.

**What does each dataset-item charge cover?**
One job row with all 18 fields. `maxItems` is **per listing URL**, so a `maxItems: 100` run with 3 tenant URLs = up to 300 charges. The Apify Store pricing event is `apify-default-dataset-item` — Apify auto-charges per row written to the default dataset.

**My run returned fewer rows than the careers page shows — why?**
Three possibilities: (1) **`maxItems` cap** — it's per-listing-URL; if you set `maxItems: 100` and pasted one URL, that's the ceiling. (2) **Same req at multiple locations** — Workday's `totalItems` counts each (req, location) pair; one req at 3 locations counts as 3 items in the API's view. (3) **Closed reqs filtered out** — Workday excludes positions that have been removed from the public listing; the count badge on the page can include stale rows.

**Can I scrape multiple tenants in parallel?**
Yes. Each tenant URL in `startUrls` runs independently, sharing the global `maxConcurrency` pool for detail-page fetches. There's no per-tenant rate cap from Workday in our recon, but Apify's request queue enforces sane parallelism overall.

### Support

- **Bugs / feature requests** — open an issue on the GitHub repo
- **Custom exports / tailored fields** — drop a note via the Apify Store contact form
- **Other actors** — see my Apify Store profile for the rest of the catalog

***

### ⚠️ Disclaimer

This Actor is an independent tool and is **not affiliated with, endorsed by, or sponsored by** Workday Inc. or any of the companies whose careers pages it can scrape. All trademarks mentioned are the property of their respective owners.

The scraper extracts only **publicly visible** job postings served by each tenant's own Workday careers page — no login, no CAPTCHA solving, no API-key forgery, no access to non-public Workday APIs. It calls the same structured JSON endpoints (`/wday/cxs/{tenant}/{site}/jobs`) that the careers page itself uses on every page load. The actor rate-limits via concurrency cap (default 4) to avoid burdening any tenant's infrastructure.

Users are responsible for:

- Complying with each scraped tenant's careers-page terms of use
- Following GDPR, CCPA, and your jurisdiction's data-protection laws when storing or processing scraped postings
- Not contacting candidates or employees listed in scraped postings
- Not republishing scraped data in a way that competes commercially with Workday or its customers

***

### SEO Keywords

workday scraper, scrape workday jobs, workday careers scraper, myworkdayjobs scraper, workday jobs api, workday job scraper any company, fortune 500 careers scraper, enterprise job board scraper, workday hcm scraper, multi-tenant workday scraper, apify workday, nvidia jobs scraper, accenture jobs scraper, salesforce jobs scraper, workday json api, jobposting scraper, requisition id scraper, ats scraper, multi-location job scraper, workday facet filter, workday salary band scraper, workday pay transparency, hiring intelligence, talent intelligence, hr-tech data, b2b sales prospecting, comp benchmarking, salary data api

# Actor input Schema

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

Mix of careers-page URLs (e.g. `https://nvidia.wd5.myworkdayjobs.com/en-US/NVIDIAExternalCareerSite`) and direct job-detail URLs (e.g. `.../job/US-CA-Santa-Clara/Senior-CPU-Performance-Architect_JR2018189`). Filters supported in the query string: `?searchText=`, `?jobType=fullTime|partTime`, `?jobFamily={areaOfWork}`, `?location={cityOrCountry}`. Friendly labels are resolved to Workday's tenant-specific facet UUIDs at run-start.

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

Maximum job rows emitted **per careers URL**. 3 tenant URLs × `maxItems: 100` → up to 300 total rows (100 per tenant). Direct detail URLs always emit 1 row each. Each row is one paid dataset item. Default 1000. Free-tier users are additionally capped at 100 total rows across the whole run.

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

Parallel HTTP requests for detail-page fetches. Workday's API has no anti-bot fingerprinting — concurrency 5-10 is comfortable. Default 4.

## `maxRequestRetries` (type: `integer`):

Per-URL retry budget on transient network errors and 5xx responses. Each retry rotates the proxy session. Default 6.

## `proxy` (type: `object`):

Apify Residential (any country) recommended. Workday's API tolerates direct + datacenter IPs in recon, but residential is the safe default. Override if you need a specific geo (some Workday tenants serve different content to US vs EU traffic for compliance).

## Actor input object example

```json
{
  "startUrls": [
    "https://nvidia.wd5.myworkdayjobs.com/en-US/NVIDIAExternalCareerSite"
  ],
  "maxItems": 1000,
  "maxConcurrency": 4,
  "maxRequestRetries": 6,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# 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": [
        "https://nvidia.wd5.myworkdayjobs.com/en-US/NVIDIAExternalCareerSite"
    ],
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("memo23/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": ["https://nvidia.wd5.myworkdayjobs.com/en-US/NVIDIAExternalCareerSite"],
    "proxy": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("memo23/workday-jobs-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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": [
    "https://nvidia.wd5.myworkdayjobs.com/en-US/NVIDIAExternalCareerSite"
  ],
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call memo23/workday-jobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=memo23/workday-jobs-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Workday Jobs Scraper — Any Company",
        "description": "Scrape any company's Workday careers page. Paste a {tenant}.myworkdayjobs.com URL — get structured rows: title, JR requisition ID, full description, all locations, time type, salary band when published, employer, postedOn, applyUrl. Filter by jobType, jobFamily, or location.",
        "version": "0.1",
        "x-build-id": "cW2HRzZraKGkRBhno"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/memo23~workday-jobs-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-memo23-workday-jobs-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/memo23~workday-jobs-scraper/runs": {
            "post": {
                "operationId": "runs-sync-memo23-workday-jobs-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/memo23~workday-jobs-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-memo23-workday-jobs-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "startUrls"
                ],
                "properties": {
                    "startUrls": {
                        "title": "Workday URLs",
                        "type": "array",
                        "description": "Mix of careers-page URLs (e.g. `https://nvidia.wd5.myworkdayjobs.com/en-US/NVIDIAExternalCareerSite`) and direct job-detail URLs (e.g. `.../job/US-CA-Santa-Clara/Senior-CPU-Performance-Architect_JR2018189`). Filters supported in the query string: `?searchText=`, `?jobType=fullTime|partTime`, `?jobFamily={areaOfWork}`, `?location={cityOrCountry}`. Friendly labels are resolved to Workday's tenant-specific facet UUIDs at run-start.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxItems": {
                        "title": "Max jobs per listing URL",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum job rows emitted **per careers URL**. 3 tenant URLs × `maxItems: 100` → up to 300 total rows (100 per tenant). Direct detail URLs always emit 1 row each. Each row is one paid dataset item. Default 1000. Free-tier users are additionally capped at 100 total rows across the whole run.",
                        "default": 1000
                    },
                    "maxConcurrency": {
                        "title": "Max parallel requests",
                        "minimum": 1,
                        "maximum": 10,
                        "type": "integer",
                        "description": "Parallel HTTP requests for detail-page fetches. Workday's API has no anti-bot fingerprinting — concurrency 5-10 is comfortable. Default 4.",
                        "default": 4
                    },
                    "maxRequestRetries": {
                        "title": "Max request retries",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Per-URL retry budget on transient network errors and 5xx responses. Each retry rotates the proxy session. Default 6.",
                        "default": 6
                    },
                    "proxy": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Apify Residential (any country) recommended. Workday's API tolerates direct + datacenter IPs in recon, but residential is the safe default. Override if you need a specific geo (some Workday tenants serve different content to US vs EU traffic for compliance).",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ]
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
