# Workday Jobs API & Scraper: All Jobs from Any Workday Site (`localwire/workday-jobs`) Actor

All open jobs from any company's Workday career site (myworkdayjobs.com), with full descriptions, locations, country codes, remote flags and dates in one clean schema. Paste the careers URL; filter by keyword, country and remote; monitor mode returns only new or removed jobs.

- **URL**: https://apify.com/localwire/workday-jobs.md
- **Developed by:** [Local Wire](https://apify.com/localwire) (community)
- **Categories:** Jobs, Business
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 0.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: every job from a Workday career site

Get **every open job from any company's Workday career site** as structured JSON for **$1.50 per 1,000 jobs** ($0.0015 per job, no start fee). Paste the careers URL (`…myworkdayjobs.com/<Site>`) and this Workday jobs API returns one record per posting: title, locations, ISO country code, remote flag, time type, posting date, requisition id, the full description as plain text, and the job and apply links.

It reads the same public JSON endpoints that the Workday career site itself calls in your browser, with no login, no proxies and no browser automation. **Monitor mode** remembers each site's jobs and returns only what is new since the last run, which is what hiring alerts, sales signals and competitor tracking need.

This is the Workday listing of our [Career Site Jobs API](https://apify.com/localwire/ats-jobs): the same code, schema and price, so you can mix Workday sites with boards on Greenhouse, Lever, Ashby, SmartRecruiters, SAP SuccessFactors, Oracle Recruiting, Workable, Recruitee, Personio and Pinpoint in one run.

### What you get

One record per Workday job posting:

- **Identity:** a stable `id` (`workday:tenant:requisitionId`), the requisition id in `jobId`, and the company.
- **The role:** `title` and Workday's time type ("Full time", "Part time") normalised into `employmentType`.
- **Where:** every location in `locations`, the ISO country code from Workday's own country field, a `remote` flag and `workplaceType` where the posting says remote or hybrid.
- **The posting:** the full description as plain text (`descriptionText`), optionally as HTML, plus `jobUrl` and `applyUrl`.
- **Dates:** `postedAt` (the posting's start date) and `scrapedAt`.
- **Monitor fields:** `changeType` (`new` or `removed`) and `firstSeenAt` in monitor mode.

A full record looks like this:

```json
{
  "id": "workday:nvidia:JR2028861",
  "ats": "workday",
  "atsName": "Workday",
  "company": "Nvidia",
  "companySlug": "nvidia",
  "jobId": "JR2028861",
  "title": "Senior Product Marketing Manager, AI Infrastructure",
  "department": null,
  "team": null,
  "employmentType": "full-time",
  "employmentTypeRaw": "Full time",
  "location": "US, CA, Santa Clara",
  "locations": ["US, CA, Santa Clara"],
  "country": "US",
  "countries": ["US"],
  "remote": false,
  "workplaceType": null,
  "salaryMin": null,
  "salaryMax": null,
  "salaryCurrency": null,
  "salaryPeriod": null,
  "salaryText": null,
  "descriptionText": "We are looking for a Senior Product Marketing Manager focused on AI infrastructure solutions…",
  "descriptionHtml": null,
  "jobUrl": "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite/job/US-CA-Santa-Clara/Senior-Product-Marketing-Manager--AI-Infrastructure_JR2028861",
  "applyUrl": "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite/job/US-CA-Santa-Clara/Senior-Product-Marketing-Manager--AI-Infrastructure_JR2028861/apply",
  "postedAt": "2026-11-07T00:00:00.000Z",
  "updatedAt": null,
  "changeType": null,
  "firstSeenAt": null,
  "input": "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite",
  "detectedBy": "url",
  "scrapedAt": "2026-11-07T20:55:32.471Z"
}
```

- `id` is stable across runs, so you can de-duplicate or upsert.
- `company` is the tenant name from the URL with a capital letter ("Nvidia", "Salesforce").
- `country` and `countries` come from Workday's own country field on the posting, with extra locations read from the location text.
- `postedAt` is the posting's start date. The job list only says "Posted 30+ Days Ago" for older roles, so the date on the posting is used.
- `department`, `team` and the salary fields stay empty: Workday's public postings do not carry them.
- Descriptions are cut at 50,000 characters.

The dataset has three table views: **Overview**, **Salaries** and **Monitor changes**. The run's key-value store also gets an `OUTPUT` record that lists each site: how many jobs were listed, matched and returned, and any site that could not be read.

### Quick start

Only `companies` is required. This input returns up to 50 jobs from two Workday sites and costs at most $0.075:

```json
{
  "companies": [
    "https://adobe.wd5.myworkdayjobs.com/external_experienced",
    "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite"
  ],
  "maxJobsPerCompany": 25,
  "maxResults": 50
}
```

In Apify Console the form opens with these values already filled in, so you can press **Start** straight away. When you call the Actor from the API and leave the limits out, they default to 1,000 jobs per company and 5,000 jobs per run.

New remote engineering roles at three Workday employers, every day:

```json
{
  "companies": [
    "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite",
    "https://salesforce.wd12.myworkdayjobs.com/External_Career_Site",
    "https://adobe.wd5.myworkdayjobs.com/external_experienced"
  ],
  "keywords": ["engineer"],
  "remoteOnly": true,
  "monitorMode": true,
  "monitorStoreName": "workday-remote-engineering"
}
```

Save the input as a **Task**, add a daily **Schedule**, and each run returns only the new jobs.

### Which companies use Workday?

Many large employers: NVIDIA, Salesforce and Adobe, and plenty of banks, insurers, retailers, universities and public bodies. If a company's "Careers" link lands on `<company>.wd1…wd12.myworkdayjobs.com/<Site>` (or `myworkdaysite.com/recruiting/<company>/<Site>`), it uses Workday: paste that URL.

Any page of the site works, including a link to a single job and localised pages such as `/en-US/<Site>`. A Workday site cannot be found from a company name alone, because the address contains a data-centre number and a site name that cannot be guessed.

### Input reference

| Field | Type | Default | What it does |
|---|---|---|---|
| `companies` | list of text | required | Workday careers URLs. Boards on the other supported platforms can be mixed in. Up to 1,000 per run. |
| `keywords` | list of text | none | Keep jobs whose title contains ANY of these, matched at the start of a word and ignoring case and accents. Also sent to Workday's own search, so fewer postings are read. |
| `searchDescriptions` | true/false | `false` | Also match `keywords` against the full description. |
| `excludeKeywords` | list of text | none | Drop jobs whose title contains ANY of these. |
| `countries` | list of text | none | Keep jobs in ANY of these countries. ISO codes or names: `GB`, `UK`, `Germany`, `United States`. |
| `locations` | list of text | none | Keep jobs whose location text contains ANY of these, e.g. `London`, `Remote`. |
| `remoteOnly` | true/false | `false` | Keep only jobs whose posting or location says remote. |
| `departments` | list of text | none | Keep jobs whose department or team contains ANY of these. Workday postings have no department, so this is for the other platforms. |
| `employmentTypes` | list | none | `full-time`, `part-time`, `contract`, `temporary`, `internship`, `apprenticeship`, `other`. Jobs with no published type are dropped when this is set. |
| `postedWithinDays` | number 1-365 | none | Keep jobs posted in this many days. Jobs without a date are kept. |
| `postedSince` | date | none | Keep jobs posted on or after this date, e.g. `2026-11-01`. Overrides `postedWithinDays`. |
| `atsPlatforms` | list | `["workday"]` | Which platforms to try when a company is given by name or website. Workday sites are always read from their URL; add other platforms here to look companies up by name on them. |
| `monitorMode` | true/false | `false` | Return only jobs that are new since the last run. |
| `emitRemoved` | true/false | `false` | In monitor mode, also return jobs that have disappeared (`changeType: "removed"`). |
| `monitorEmitExistingOnFirstRun` | true/false | `true` | On a monitor's first run, return the current jobs. Set to `false` to record them silently and pay nothing for the backlog. |
| `monitorStoreName` | text | `workday-jobs-monitor` | Name of the key-value store that holds the monitor's memory. Use one name per monitor. Letters, digits and hyphens. |
| `includeDescriptions` | true/false | `true` | Include the description as plain text. Workday still reads each posting when this is off, because the list has no country or date. |
| `includeHtml` | true/false | `false` | Also include the description as HTML in `descriptionHtml`. |
| `maxJobsPerCompany` | number 1-10,000 | `1000` | Stop reading a site after this many matching jobs. |
| `maxResults` | number 1-100,000 | `5000` | Stop the run after this many jobs in total. |
| `useDetectionCache` | true/false | `true` | Only matters for companies given by name or website on the other platforms: remembers the board found for 30 days. |

Invalid input fails at once with a message that lists every problem, so a person or an AI agent can fix it in one go.

### How the Workday jobs API works

Every Workday career site is a web app that loads its postings from JSON endpoints on its own host. The Actor calls the same two endpoints:

1. **The job search**, which returns 20 postings a page with a title, a link, a location summary ("2 Locations") and a relative date ("Posted 8 Days Ago").
2. **The posting**, which has the real content: description, every location, the country, the time type, the start date and the requisition id.

Because the list has no country and no real date, the Actor reads each posting, at about 0.4 seconds each. Two things keep that fast:

- Your `keywords` are passed to Workday's own search, one search per keyword, so a keyword run on a 2,000-job site reads only the postings that can match. A posting found by two keywords is read once.
- In monitor mode, later runs return only postings that were not there before.

A site with no filters and 2,000 open jobs takes around 15 minutes. Up to 10,000 postings are read per site and search.

### Monitor mode: only new Workday jobs

With `monitorMode` on, the Actor remembers each site's jobs in a key-value store in your account (named by `monitorStoreName`). Each run returns only jobs it has not returned before, and with `emitRemoved` also the jobs that have gone since the last run.

- Use one monitor name per filter set. Changing the filters starts that monitor again.
- To start a monitor without paying for the existing backlog, set `monitorEmitExistingOnFirstRun` to `false` for the first run.
- If a run stops early (a limit or your maximum cost), removals are not reported for that site, and jobs that were found but not returned are kept for the next run.

### Use cases

- **Enterprise hiring signals.** Workday is where large employers post. Track which accounts are opening roles, in which countries and for which functions.
- **New-job alerts.** A daily monitor of a watchlist returns only the postings added since yesterday.
- **Job boards and aggregators.** Add direct-from-employer enterprise jobs to a niche board, in the same schema as ten other platforms.
- **Competitor and market research.** Count open roles by country, by keyword or over time, and with `emitRemoved` see when roles close.
- **AI agents.** A small, predictable JSON schema that an agent can call as a tool through Apify's MCP server.

### Pricing

**$0.0015 per job returned, which is $1.50 per 1,000 jobs.** There is no start fee and no monthly rental. It is the same price as the Career Site Jobs API.

You pay for each record the Actor returns, including `removed` records in monitor mode. You pay nothing for jobs that your filters drop, for jobs a monitor has already returned, or for sites that cannot be read.

| What you run | Jobs returned | Cost |
|---|---|---|
| The pre-filled first run | 50 | $0.075 |
| Every engineering job at one large employer | 400 | $0.60 |
| All 2,000 open jobs on one Workday site | 2,000 | $3.00 |
| A daily monitor of 50 Workday employers that finds 40 new jobs a day | about 1,200 a month | about $1.80 a month |

To cap spending, set **Max cost per run** in the run options, or lower `maxResults`. The Actor stops cleanly at the limit and says so in its status message.

### Use it from the API

Run the Actor and get the jobs back in one request:

```bash
curl -X POST "https://api.apify.com/v2/acts/localwire~workday-jobs/run-sync-get-dataset-items" \
  -H "Authorization: Bearer <YOUR_APIFY_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"companies": ["https://salesforce.wd12.myworkdayjobs.com/External_Career_Site"], "keywords": ["account executive"], "countries": ["GB"], "maxResults": 50}'
```

That endpoint waits up to five minutes. For a longer run, such as a whole site without keywords, start it with `POST /v2/acts/localwire~workday-jobs/runs` and read the run's dataset when it has finished.

With the Apify client for JavaScript:

```js
import { ApifyClient } from "apify-client";

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor("localwire/workday-jobs").call({
  companies: ["https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite"],
  keywords: ["engineer"],
  maxResults: 100,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
```

With the Apify client for Python:

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("localwire/workday-jobs").call(run_input={
    "companies": ["https://adobe.wd5.myworkdayjobs.com/external_experienced"],
    "countries": ["DE", "GB"],
    "maxResults": 100,
})
jobs = list(client.dataset(run["defaultDatasetId"]).iterate_items())
```

Results can be downloaded from the dataset as JSON, CSV, Excel, XML or JSON Lines.

### Use it from an AI agent (MCP)

Apify's hosted MCP server is at `https://mcp.apify.com`. Add it to any MCP client that supports remote servers and sign in with your Apify account when the browser opens (or send an `Authorization: Bearer <APIFY_TOKEN>` header).

To give the agent only this Actor as a tool, use this server URL:

```
https://mcp.apify.com?tools=localwire/workday-jobs
```

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=localwire/workday-jobs"
    }
  }
}
```

The agent then sees the Actor's input fields with their descriptions and defaults. Only `companies` is required, and for Workday it has to be the careers URL, not a company name. Tell the agent to set `maxResults` (for example 50), because the default is 5,000 jobs. Questions that work well:

- "List the remote roles NVIDIA posted on its Workday site this week."
- "How many open jobs does Salesforce have in the UK, and in which cities?"
- "Which of these five Workday employers are hiring data engineers?"

### Integrations

Runs can be started on a schedule or by another system, and results can be sent on:

- **Make, n8n and Zapier** have Apify integrations that run an Actor and pass its dataset to the next step, for example to a spreadsheet, a CRM, email or a chat channel.
- **Webhooks** call your endpoint when a run succeeds or fails.
- **LangChain** and other agent frameworks can use Apify Actors as tools.
- **The Apify API** and the JavaScript and Python clients cover everything else.

### FAQ

#### Is there a Workday jobs API?

Workday does not publish a documented public API for third parties to read job postings. Every Workday career site does load its postings from JSON endpoints on its own host, without a login, and this Actor reads those. You give it the careers URL and get every posting as structured data, without writing or maintaining that code yourself.

#### How do I scrape jobs from myworkdayjobs.com?

Copy the address of the company's Workday careers page, for example `https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite`, put it in `companies` and start the run. Add `keywords`, `countries` or `remoteOnly` to narrow it down.

#### How do I find a company's Workday careers URL?

Open the company's website, follow its "Careers" or "Jobs" link and click through to the job search. If the address bar shows `myworkdayjobs.com` or `myworkdaysite.com`, that address is the one to use.

#### Can I get all jobs from several Workday sites in one run?

Yes. List up to 1,000 URLs in `companies`. Each job's `input` field says which entry it came from, and the `OUTPUT` record summarises every site.

#### How do I get only new Workday jobs each day?

Turn on `monitorMode` and schedule the Actor daily. Each run returns, and charges for, only postings it has not returned before.

#### Does the Workday jobs API return salaries?

No. Workday's public postings have no structured pay field, so the salary fields are empty. Where an employer writes a pay range into the description, it is in `descriptionText`.

#### Does it return the department or job family?

No. Workday's public postings do not carry a department, so `department` and `team` are empty. Use `keywords` on the title instead.

#### How long does a run take?

About 0.4 seconds per posting, plus one request per 20 postings for the list. Fifty jobs take well under a minute; a 2,000-job site with no filters takes around 15 minutes.

#### How much does it cost to get every job from a Workday site?

$1.50 per 1,000 jobs. A site with 2,000 open jobs costs $3.00; a keyword run that returns 150 of them costs about $0.23.

#### Does it need proxies, a browser or a login?

No. It makes plain HTTPS requests to the site's public endpoints, identifies itself with its own User-Agent, and never logs in.

#### Is it legal to collect Workday job postings?

This is not legal advice. Job postings are published by employers for anyone to read, and the Actor reads only public endpoints. You are responsible for how you use the data, including Workday's and the employers' terms and any rules that apply to you.

### Limitations

- **URL needed.** A Workday site cannot be found from a company name.
- **One site per URL.** A company can have several sites (external, campus, internal). The Actor reads the one in the URL. Internal sites that need a login are not supported.
- **No department and no salary.** Workday does not publish them in public postings.
- **Company name.** `company` is derived from the tenant name in the URL, so its capitalisation may differ from the brand's ("Nvidia").
- **Speed.** About 0.4 seconds per posting. Use keywords, `maxJobsPerCompany` or monitor mode for very large sites.
- **No bot-protection evasion.** The Actor does not use proxies, solve challenges or disguise itself. A request that is refused with HTTP 403 is not retried. A rate limit (HTTP 429) or server error is retried a few times with increasing waits, honouring `Retry-After`, and then the Actor gives up on that site, records the error in `OUTPUT` and moves on to the next. If every site fails, the run fails.
- **Other platforms.** The same input accepts Greenhouse, Lever, Ashby, SmartRecruiters, SuccessFactors, Oracle, Workable, Recruitee, Personio and Pinpoint boards. Their details are in the [Career Site Jobs API](https://apify.com/localwire/ats-jobs) README.

### Data, privacy and terms

Job postings are published by employers for anyone to read. This Actor reads the career site's public endpoints only, never logs in, and does not try to get around any access control or rate limit.

Personal data is kept out of the output. There are no fields for recruiters, hiring managers or contacts. In descriptions, email addresses are replaced with `[email removed]` and phone numbers in UK, North American and `+country code` formats with `[phone removed]`, and full UK postcodes are shortened to their district. A number written in an unusual local format, and names that an employer wrote into its own description, can remain.

You are responsible for how you use the data, including the platforms' and employers' terms.

This Actor is not affiliated with or endorsed by Workday, Inc.

### More from this developer

Jobs:

- [Career Site Jobs API](https://apify.com/localwire/ats-jobs): Workday plus ten more platforms, with lookup by company name.
- [Reed.co.uk Jobs Scraper](https://apify.com/localwire/reed-jobs): UK job-board search in the same schema.
- [Wellfound Jobs Scraper](https://apify.com/localwire/wellfound-jobs): startup jobs in the same schema, with pay and equity.
- [Hacker News API](https://apify.com/localwire/hacker-news): stories, comments and structured "Who is hiring?" jobs.

Other data:

- [Public Tenders API](https://apify.com/localwire/uk-public-tenders): UK and EU tenders and contract awards.
- [Google Trends Trending Now](https://apify.com/localwire/google-trends-trending-now): trending searches for 125 countries.
- [App Store Reviews](https://apify.com/localwire/app-store-reviews): reviews, app details and top charts.
- [Telegram Channel Scraper](https://apify.com/localwire/telegram-channels): posts from public channels.
- [ESPN Sports Data](https://apify.com/localwire/espn-sports) and [Flashscore Results & Fixtures](https://apify.com/localwire/flashscore-sports): scores, standings and fixtures.
- [Eventbrite Scraper](https://apify.com/localwire/eventbrite-events) and [Meetup Scraper](https://apify.com/localwire/meetup-events): events by place and topic.
- [Gumtree Scraper](https://apify.com/localwire/gumtree-listings): UK classified listings.

### Feedback

Found a Workday site that does not work, or need a field we do not return? Open an issue on the Actor's **Issues** tab and we will reply within a few days.

# Actor input Schema

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

Required. One Workday careers site per line, e.g. https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite or https://salesforce.wd12.myworkdayjobs.com/External_Career_Site (any page of the site works, including a single job link, with or without a locale such as /en-US/). You can mix in boards on the other supported platforms: a job-board URL, a company website, a company name, or platform:board such as greenhouse:monzo.

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

Keep jobs whose title, department or team contains ANY of these words or phrases (matched at the start of a word, case- and accent-insensitive), e.g. engineer, "data scientist", sales. Keywords are also passed to Workday's own search, so only postings that can match are read.

## `searchDescriptions` (type: `boolean`):

Match keywords against the full job description too (e.g. a technology like Kubernetes). Slower on SmartRecruiters, Oracle and SuccessFactors, which need one request per job for descriptions.

## `excludeKeywords` (type: `array`):

Drop jobs whose title contains ANY of these words, e.g. intern, senior.

## `countries` (type: `array`):

Keep jobs in ANY of these countries: ISO codes or names, e.g. GB, UK, Germany, US. Countries come from the job board's own fields where published, otherwise from the location text.

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

Keep jobs whose location text contains ANY of these, e.g. London, Berlin, Remote.

## `remoteOnly` (type: `boolean`):

Keep only jobs marked remote by the job board, or whose location says remote.

## `departments` (type: `array`):

Keep jobs whose department or team contains ANY of these, e.g. Engineering, Sales.

## `employmentTypes` (type: `array`):

Keep only these employment types. Jobs whose type isn't published are dropped when this is set.

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

Keep jobs first published (or, where that isn't given, last updated) in this many days. Jobs without a date are kept.

## `postedSince` (type: `string`):

Keep jobs posted on or after this date, e.g. 2026-11-01. Overrides 'Posted in the last N days'.

## `atsPlatforms` (type: `array`):

Which platforms to try when a company is given by name or website. Workday sites are always read from their URL; add other platforms here to look companies up by name on them.

## `monitorMode` (type: `boolean`):

Remember which jobs each company had last time and return (and charge for) only jobs that are new since then (changeType "new"). Schedule the Actor daily to get a feed of new openings. Keep the same filters for a monitor; changing them starts it again.

## `emitRemoved` (type: `boolean`):

In monitor mode, also return jobs that have disappeared since the last run (changeType "removed"), e.g. to track roles being filled.

## `monitorEmitExistingOnFirstRun` (type: `boolean`):

On a monitor's first run every current job counts as new. Turn this off to record them silently (and not be charged for them), so later runs return only genuinely new jobs.

## `monitorStoreName` (type: `string`):

Name of the key-value store in your account that holds the monitor's memory. Use a different name for each monitor (e.g. per filter set or per client). Letters, digits and hyphens.

## `includeDescriptions` (type: `boolean`):

Include each job's full description as plain text. Turn off for smaller, faster runs (Workday still reads each posting, because its listing has no locations or dates).

## `includeHtml` (type: `boolean`):

Also include the description as HTML (descriptionHtml).

## `maxJobsPerCompany` (type: `integer`):

Stop reading a company's site after this many matching jobs. 1000 when left out. The form starts at 25 so that a first run is small and takes seconds; raise it to read whole sites. Workday reads each posting (about 0.4 s each), so a 2,000-job site with no filters takes around 15 minutes.

## `maxResults` (type: `integer`):

Stop the run after this many jobs in total. Each job returned is charged once, so this is also the cost cap: 50 jobs is a quick, cheap sample. 5000 when left out; the form starts at 50 so that a first run is small. You can also cap spending with the run's maximum cost.

## `useDetectionCache` (type: `boolean`):

Cache the job board found for a company name or website for 30 days (in a key-value store called ats-jobs-detection-cache in your account), so later runs skip the search.

## Actor input object example

```json
{
  "companies": [
    "https://adobe.wd5.myworkdayjobs.com/external_experienced",
    "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite"
  ],
  "keywords": [
    "engineer",
    "data scientist"
  ],
  "searchDescriptions": false,
  "countries": [
    "GB",
    "IE"
  ],
  "remoteOnly": false,
  "atsPlatforms": [
    "workday"
  ],
  "monitorMode": false,
  "emitRemoved": false,
  "monitorEmitExistingOnFirstRun": true,
  "monitorStoreName": "workday-jobs-monitor",
  "includeDescriptions": true,
  "includeHtml": false,
  "maxJobsPerCompany": 25,
  "maxResults": 50,
  "useDetectionCache": true
}
```

# Actor output Schema

## `overview` (type: `string`):

The key facts for each job.

## `salaries` (type: `string`):

Jobs with the pay range the employer published (where they did).

## `changes` (type: `string`):

In monitor mode: which jobs are new and which were removed since the last run.

## `allResults` (type: `string`):

Every record in the run's default dataset, all fields.

# 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": [
        "https://adobe.wd5.myworkdayjobs.com/external_experienced",
        "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite"
    ],
    "maxJobsPerCompany": 25,
    "maxResults": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("localwire/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 = {
    "companies": [
        "https://adobe.wd5.myworkdayjobs.com/external_experienced",
        "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite",
    ],
    "maxJobsPerCompany": 25,
    "maxResults": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("localwire/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 '{
  "companies": [
    "https://adobe.wd5.myworkdayjobs.com/external_experienced",
    "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite"
  ],
  "maxJobsPerCompany": 25,
  "maxResults": 50
}' |
apify call localwire/workday-jobs --silent --output-dataset

```

## MCP server setup

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