# Workday Jobs Scraper & Change Monitor (`luminar/workday-jobs-change-monitor`) Actor

Export public Workday careers jobs with complete descriptions, locations and application links. Track new, changed and safely removed jobs for your job board.

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

## Pricing

from $0.85 / 1,000 complete current 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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

Keep your job board current with complete public Workday jobs and dependable changes from the employers you already follow.

- Export role descriptions, every published location, requisition IDs and application links.
- Keep stable job records across repeated collections.
- Identify new and changed matches; report removals only after a complete scan of the same scope.

### 🚀 Start in 60 seconds

1. Keep **Get current jobs** selected.
2. Paste a public Workday careers URL, such as `https://workday.wd5.myworkdayjobs.com/Workday`.
3. Set your maximum results and spending limit, then run. Export the Dataset as CSV, JSON or Excel.

The default checks one careers site with a maximum of 500 current jobs. For a small trial, choose 20 jobs: up to **$0.025** for verified collection and 20 complete jobs. A capped trial cannot establish that an unseen job was removed.

### 🎯 Choose the right workflow

| Workflow | Input | Result |
|---|---|---|
| Get current jobs | Known careers board URLs | Current detailed job records and coverage |
| Look up exact jobs | Exact public job URLs | Complete details for each requested job |
| Track changes | Same boards, filters and monitor name | Current jobs marked NEW, CHANGED or UNCHANGED, plus verified REMOVED records |

The first monitor run marks current matches NEW. NEW means newly observed by your monitor, not necessarily newly published today. REMOVED means absent from this exact search scope; a job may have left a filter without closing globally.

### 📦 What you get

![Workday jobs with titles locations and requisition IDs](https://api.apify.com/v2/key-value-stores/UgRup6edWlEUBW7MK/records/jobs-c1f9d37509aa55d4)

Each current job contains `stableId`, `jobId`, `requisitionId`, title, complete description HTML and text, all published locations, available employment and time type, published date, source URL and application link. Source-published salary paragraphs are included when present; unavailable secondary fields are null.

Use `stableId` to update your job database. Use `changeId` to deduplicate deliveries from the same monitor run. Filter `recordType=job` for current jobs or `changeKind=REMOVED` for removals. Coverage rows remain visible in the same Dataset.

### 🎛️ Input guide

| Setting | How to use it |
|---|---|
| Careers URLs | Up to 10 known public Workday boards, or up to 100 exact job links in lookup mode |
| Keywords | Native careers keyword search |
| Native filter selections | Optional employer-specific filter names and selected IDs; leave empty for all roles |
| Monitor name | Keep the same name and scope for repeat comparisons |
| Maximum current jobs | 1–10,000 across requested targets; each native search can be capped at 2,000 |
| Collection time budget | 20–210 seconds; leave the Actor run timeout at 300 seconds |
| Maximum calculated result charge | Must cover requested current jobs and possible saved removals; also set Apify's maximum charge |

Changing boards, keywords, filter selections or monitor name starts a separate comparison scope. Do not overlap runs of the same monitor. Recover an interrupted run before starting its next collection.

### 💰 Pricing

**$0.008 per verified collection + $0.85 per 1,000 complete current job records or verified removals.** Apify platform usage is included after pricing activation; there is no hidden detail surcharge.

| Delivered job | Complete price |
|---|---:|
| Verified empty collection | $0.008 |
| 20 current jobs | $0.025 |
| 500 current jobs | $0.433 |
| 1,000 current jobs | $0.858 |
| 1,000 current jobs and 10 verified removals | $0.8665 |

On repeat runs, monitoring still checks and delivers current jobs, including UNCHANGED jobs, and bills those records. NEW and CHANGED labels are included in their current job price. A source that cannot be verified delivers no paid records and does not advance that target's saved state. If every target fails verification, there is no collection charge. Small collections can cost more than a competitor with a lower fixed fee; compare the complete requested workload.

### ✅ Coverage you can trust

**COMPLETE** means the requested public matching scope was exhausted and rechecked. **CAPPED** means an output limit or the source's 2,000-result boundary prevented a complete scan. **PARTIAL** means some requested scope could not be verified. **FAILED** means no useful requested source could be verified.

NVIDIA's large careers board, for example, exposes a 2,000-result boundary. The Actor detects that boundary and does not loop back over the first page. Use native filters to create smaller useful scopes. CAPPED, PARTIAL and FAILED targets never cause removals or replace their saved membership.

Large or slow requests may exceed the collection budget. Descriptions and locations remain mandatory for current records; failed detail verification makes that target free. Only accepted delivery can advance monitor state. Source changes during pagination prevent a COMPLETE claim when the consistency check detects drift.

### 🔌 API and automation

Run the Actor through Apify's API or integrations with your chosen input. Export its Dataset and upsert current records by `stableId`. Apply REMOVED events only with their matching target and monitor scope.

```json
{
  "workflow": "monitor",
  "careersUrls": ["https://workday.wd5.myworkdayjobs.com/Workday"],
  "monitorName": "my-job-board",
  "maxJobs": 500,
  "spendingLimitUsd": 5
}
```

### ⚠️ Not yet supported

There is no global employer directory, applicant data, application submission, private hiring pipeline, login support, salary estimation or inferred hiring score. Custom careers domains are not supported; use the public `myworkdayjobs.com` link. Completeness beyond a source cap is not promised. Overlapping runs of the same monitor are unsupported.

### ❓ FAQ and support

**Can I monitor a company without knowing its careers URL?** Supply the public Workday careers URL; this product does not discover every employer globally.

**Why are there no removals after a capped run?** Absence is meaningful only after the complete same scope has been checked. Existing membership is preserved until that proof is available.

**Are salary and remote labels inferred?** No. These fields come from public job content, when available.

For help, open an Apify issue with your run ID and the public careers URL. Never send passwords, applicant information or private account data.

# Actor input Schema

## `workflow` (type: `string`):

Collect current jobs, look up exact job links, or track the same careers scope over repeated runs.

## `careersUrls` (type: `array`):

Up to 10 public myworkdayjobs.com careers board URLs. For exact lookup, enter up to 100 job URLs instead. No account is needed.

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

Native careers keyword search. Keep unchanged for the same monitor.

## `facets` (type: `object`):

Optional native Workday filter names and selected IDs, for example {"timeType":\["your-selected-id"]}. Choices differ by employer. Omit for all jobs.

## `monitorName` (type: `string`):

Use the same name, careers URLs, keywords and filters on repeat runs. First run labels current jobs NEW; repeat runs return NEW, CHANGED, UNCHANGED and verified REMOVED.

## `maxJobs` (type: `integer`):

Total current job limit across targets. A single search may expose at most 2,000 jobs; capped scans never prove removal.

## `maxRuntimeSecs` (type: `integer`):

Collection budget within the 300-second run timeout. Unverified targets are free and preserve prior state.

## `spendingLimitUsd` (type: `number`):

Must cover the requested maximum: $0.008 per verified collection plus $0.00085 per current job or verified removal. Also set Apify maximum charge high enough.

## Actor input object example

```json
{
  "workflow": "collect",
  "careersUrls": [
    "https://workday.wd5.myworkdayjobs.com/Workday"
  ],
  "searchText": "",
  "facets": {},
  "monitorName": "default",
  "maxJobs": 500,
  "maxRuntimeSecs": 210,
  "spendingLimitUsd": 5
}
```

# Actor output Schema

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

Current jobs, verified removals and coverage records.

## `summary` (type: `string`):

Coverage by board and calculated charges.

# 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 = {
    "workflow": "collect",
    "careersUrls": [
        "https://workday.wd5.myworkdayjobs.com/Workday"
    ],
    "searchText": "",
    "facets": {},
    "monitorName": "default",
    "maxJobs": 500,
    "maxRuntimeSecs": 210,
    "spendingLimitUsd": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("luminar/workday-jobs-change-monitor").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 = {
    "workflow": "collect",
    "careersUrls": ["https://workday.wd5.myworkdayjobs.com/Workday"],
    "searchText": "",
    "facets": {},
    "monitorName": "default",
    "maxJobs": 500,
    "maxRuntimeSecs": 210,
    "spendingLimitUsd": 5,
}

# Run the Actor and wait for it to finish
run = client.actor("luminar/workday-jobs-change-monitor").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 '{
  "workflow": "collect",
  "careersUrls": [
    "https://workday.wd5.myworkdayjobs.com/Workday"
  ],
  "searchText": "",
  "facets": {},
  "monitorName": "default",
  "maxJobs": 500,
  "maxRuntimeSecs": 210,
  "spendingLimitUsd": 5
}' |
apify call luminar/workday-jobs-change-monitor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,luminar/workday-jobs-change-monitor"
        }
    }
}

```

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/mgfjG283Y7FkHlPfS/builds/Cgt0GDkSutnStrZMb/openapi.json
