# Workday Job Scraper (`shahidirfan/workday-job-scraper`)

Meet the Workday Job Scraper, a lightweight actor for extracting job data from any company's Workday portal. Fast and reliable. To ensure stable performance and avoid blocks across multiple domains, using residential proxies is highly recommended for best results.

- **URL**: https://apify.com/shahidirfan/workday-job-scraper.md
- **Developed by:** [Shahid Irfan](https://apify.com/shahidirfan) (community)
- **Categories:** Jobs, Automation, Developer tools
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

# README

## Workday Job Scraper

### Description

This Apify actor efficiently scrapes job listings from Workday-powered career portals. It extracts comprehensive job data including titles, locations, descriptions, and application links from Workday's job search APIs. The actor handles pagination automatically and provides flexible configuration for targeted job searches.

### Features

- **Comprehensive Data Extraction**: Captures all key job details from Workday APIs
- **Automatic Pagination**: Handles multi-page results seamlessly
- **Flexible Filtering**: Supports keyword, location, and category-based searches
- **Proxy Support**: Built-in proxy rotation for reliable scraping
- **Dataset Integration**: Saves results directly to Apify datasets
- **Error Handling**: Robust retry mechanisms and session management

### Input

#### Required Parameters

- **`startUrl`** (string): The Workday API endpoint URL to start scraping from (e.g., `https://company.wd1.myworkdayjobs.com/wday/cxs/company/site/jobs`)

#### Optional Parameters

- **`keyword`** (string): Job search keywords (e.g., "software engineer", "data analyst")
- **`location`** (string): Geographic location filter
- **`category`** (string): Job category filter
- **`results_wanted`** (integer): Maximum number of jobs to collect (default: 100)
- **`max_pages`** (integer): Maximum pages to scrape (default: 999)
- **`collectDetails`** (boolean): Whether to collect full job data or just URLs (default: true)
- **`proxyConfiguration`**: Proxy settings for enhanced reliability

### Output

The actor outputs structured job data to an Apify dataset with the following schema:

```json
{
  "title": "Job Title",
  "company": "Company Name",
  "category": "Job Category",
  "location": "Job Location",
  "date_posted": "Posting Date",
  "job_type": "Employment Type",
  "description_html": "<p>Full job description in HTML</p>",
  "description_text": "Plain text job description",
  "job_url": "https://company.wd1.myworkdayjobs.com/job/..."
}
```

### Usage

#### Basic Usage

1. **Set the Start URL**: Provide the Workday API endpoint for the company you want to scrape
2. **Configure Filters**: Add keywords, location, or category to narrow results
3. **Run the Actor**: Execute on Apify platform or locally
4. **Access Results**: Download the dataset in JSON, CSV, or other formats

#### Example Input

```json
{
  "startUrl": "https://workday.wd5.myworkdayjobs.com/wday/cxs/workday/Workday/jobs",
  "keyword": "software engineer",
  "location": "San Francisco",
  "results_wanted": 50
}
```

#### Advanced Configuration

For large-scale scraping:

- Use residential proxies for better success rates
- Set reasonable `results_wanted` limits to avoid timeouts
- Enable `collectDetails` for complete job information

### Configuration

#### Proxy Settings

```json
{
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"]
  }
}
```

#### Performance Tuning

- **Concurrency**: Adjust based on target site rate limits
- **Delays**: Built-in delays prevent blocking
- **Retries**: Automatic retry on failures

### Limits & Considerations

- **Rate Limiting**: Respects target site limits with built-in delays
- **Data Freshness**: Results reflect current job postings
- **API Changes**: Workday may update their API structure
- **Geographic Restrictions**: Some jobs may have location restrictions

### Cost Optimization

- Use targeted searches to reduce runtime
- Set appropriate `results_wanted` limits
- Choose cost-effective proxy options

### Support

For issues or questions:

- Check the input parameters match your target Workday site
- Verify the API endpoint URL is correct
- Ensure proxy configuration is enabled for production use

# Actor input Schema

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

Add one or more Workday landing pages or '/wday/cxs/.../jobs' API endpoints to crawl.

## `keyword` (type: `string`):

Free text keyword filter combined into Workday's searchText payload.

## `location` (type: `string`):

Optional location term appended to Workday searchText.

## `collectDetails` (type: `boolean`):

If enabled, emits full metadata from each listing. Disable to output only job URLs.

## `postedWithin` (type: `string`):

Limit jobs to a recent posting window. Matches the Workday "Posting Date" filter.

## `results_wanted` (type: `integer`):

Soft cap for the total number of jobs pushed to the dataset.

## `max_pages` (type: `integer`):

Safety cap for paginated Workday API calls.

## `dedupe` (type: `boolean`):

Avoid pushing duplicates by tracking Workday job IDs.

## `cookies` (type: `string`):

Raw 'Cookie' header string applied to each request (optional).

## `cookiesJson` (type: `string`):

JSON-formatted cookies. Supports either an array of objects or a map of name/value pairs.

## `proxyConfiguration` (type: `object`):

Configure Apify proxy. Leave the default setting to let the platform choose an available group.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://workday.wd5.myworkdayjobs.com/wday/cxs/workday/Workday/jobs"
    }
  ],
  "keyword": "software engineer",
  "collectDetails": true,
  "postedWithin": "anytime",
  "results_wanted": 50,
  "max_pages": 50,
  "dedupe": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# 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://workday.wd5.myworkdayjobs.com/Workday/?source=Careers_Website"
        }
    ],
    "keyword": "software engineer",
    "postedWithin": "anytime"
};

// Run the Actor and wait for it to finish
const run = await client.actor("shahidirfan/workday-job-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://workday.wd5.myworkdayjobs.com/Workday/?source=Careers_Website" }],
    "keyword": "software engineer",
    "postedWithin": "anytime",
}

# Run the Actor and wait for it to finish
run = client.actor("shahidirfan/workday-job-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": [
    {
      "url": "https://workday.wd5.myworkdayjobs.com/Workday/?source=Careers_Website"
    }
  ],
  "keyword": "software engineer",
  "postedWithin": "anytime"
}' |
apify call shahidirfan/workday-job-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Workday Job Scraper",
        "description": "Meet the Workday Job Scraper, a lightweight actor for extracting job data from any company's Workday portal. Fast and reliable. To ensure stable performance and avoid blocks across multiple domains, using residential proxies is highly recommended for best results.",
        "version": "0.0",
        "x-build-id": "xmlRgS7MRA0JvljBB"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/shahidirfan~workday-job-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-shahidirfan-workday-job-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/shahidirfan~workday-job-scraper/runs": {
            "post": {
                "operationId": "runs-sync-shahidirfan-workday-job-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/shahidirfan~workday-job-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-shahidirfan-workday-job-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",
                "properties": {
                    "startUrls": {
                        "title": "Start URLs",
                        "type": "array",
                        "description": "Add one or more Workday landing pages or '/wday/cxs/.../jobs' API endpoints to crawl.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "keyword": {
                        "title": "Keyword filter",
                        "type": "string",
                        "description": "Free text keyword filter combined into Workday's searchText payload."
                    },
                    "location": {
                        "title": "Location filter",
                        "type": "string",
                        "description": "Optional location term appended to Workday searchText."
                    },
                    "collectDetails": {
                        "title": "Collect full job detail",
                        "type": "boolean",
                        "description": "If enabled, emits full metadata from each listing. Disable to output only job URLs.",
                        "default": true
                    },
                    "postedWithin": {
                        "title": "Posted within",
                        "enum": [
                            "anytime",
                            "24h",
                            "7d",
                            "30d"
                        ],
                        "type": "string",
                        "description": "Limit jobs to a recent posting window. Matches the Workday \"Posting Date\" filter.",
                        "default": "anytime"
                    },
                    "results_wanted": {
                        "title": "Maximum jobs to collect",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Soft cap for the total number of jobs pushed to the dataset.",
                        "default": 50
                    },
                    "max_pages": {
                        "title": "Maximum pages per site",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Safety cap for paginated Workday API calls.",
                        "default": 50
                    },
                    "dedupe": {
                        "title": "Deduplicate jobs",
                        "type": "boolean",
                        "description": "Avoid pushing duplicates by tracking Workday job IDs.",
                        "default": true
                    },
                    "cookies": {
                        "title": "Custom cookies header",
                        "type": "string",
                        "description": "Raw 'Cookie' header string applied to each request (optional)."
                    },
                    "cookiesJson": {
                        "title": "Cookies JSON",
                        "type": "string",
                        "description": "JSON-formatted cookies. Supports either an array of objects or a map of name/value pairs."
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Configure Apify proxy. Leave the default setting to let the platform choose an available group.",
                        "default": {
                            "useApifyProxy": true
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
