# ADP Jobs Scraper (`fetch_cat/adp-jobs-scraper`) Actor

Extract public job postings from ADP Workforce Now career centers.

- **URL**: https://apify.com/fetch\_cat/adp-jobs-scraper.md
- **Developed by:** [Hanna Nosova](https://apify.com/fetch_cat) (community)
- **Categories:** Jobs, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.60 / 1,000 adp job saveds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#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

## ADP Jobs Scraper

Extract public job postings from ADP Workforce Now career centers on `workforcenow.adp.com`. This jobs and recruiting data scraper turns public ADP career-center URLs into structured job rows for recruiting intelligence, job-board backfills, market research, and hiring monitors.

### At a glance

- **Primary job**: Collect current public ADP Workforce Now job postings without browser automation or credentials.
- **Input**: Public ADP recruitment page URLs or public ADP job-requisitions API URLs containing `cid`.
- **Output**: One dataset row per job with title, requisition IDs, location, dates, job URL, tenant identifiers, and optional raw ADP JSON.
- **Best for**: Recruiting intelligence, competitor hiring tracking, job-board sourcing, lead generation, and scheduled monitoring.

### Common workflows

- **Backfill ADP-hosted openings**: Export all current jobs from an employer's public ADP career center.
- **Monitor hiring changes**: Schedule repeat runs for the same ADP tenants and compare dataset exports over time.
- **Feed recruiting systems**: Send requisition IDs, job URLs, titles, and locations into spreadsheets, CRMs, data warehouses, or automation tools.
- **Validate source URLs**: Keep `emitErrorItems` enabled to receive stable diagnostic rows for missing `cid`, unsupported URLs, empty tenants, or unexpected responses.

### Input recipes

- **Small smoke test**: Use the default ADP URL with `maxItems: 20` and `includeRaw: true`.
- **Direct API URL**: Paste a public ADP `job-requisitions` URL and set `includeRaw: false` for a compact dataset.
- **Multi-company monitor**: Add several public ADP career-center URLs to `startUrls`, keep `maxItems` bounded, and schedule the run.

### What data can you extract?

| Field | Description |
| --- | --- |
| `itemType` | `job` for job rows or `error` for diagnostic rows. |
| `jobId` | ADP job item ID. |
| `clientRequisitionId` | Employer/client requisition identifier. |
| `externalJobId` | External job ID when ADP exposes it. |
| `title` | Public job title. |
| `companyName` | Company name when included by ADP. |
| `careerCenterUrl` | Canonical ADP career-center URL for the tenant. |
| `jobUrl` | Canonical public job URL including the ADP job ID. |
| `sourceUrl` | Original input URL. |
| `cid`, `ccId`, `lang` | ADP tenant/career-center/language identifiers. |
| `postDate`, `currentServerDate` | Raw public ADP date values. |
| `locationText`, `city`, `region`, `postalCode`, `country` | Location text and normalized location parts. |
| `workLevel`, `jobClass`, `department` | Common ADP classification fields. |
| `isInternalPosting` | Internal-posting flag when exposed. |
| `expectedTotal`, `returnedCount` | Count diagnostics from the ADP response. |
| `rawRequisition` | Original ADP requisition object when `includeRaw` is enabled. |
| `errorCode`, `errorMessage` | Stable diagnostics for invalid or unsupported inputs. |

### Input configuration

| Setting | JSON key | Use it for | Example |
| --- | --- | --- | --- |
| ADP career center URLs | `startUrls` | Public ADP Workforce Now recruitment or job-requisitions URLs. | `https://workforcenow.adp.com/...recruitment.html?cid=...` |
| Maximum jobs | `maxItems` | Cap saved job rows and control spend. | `20` |
| Include raw ADP requisition | `includeRaw` | Preserve the original source object for fields not yet normalized. | `true` |
| Emit error rows | `emitErrorItems` | Save diagnostic rows for bad inputs, empty tenants, and non-JSON responses. | `true` |

### Example input

```json
{
  "startUrls": [
    {
      "url": "https://workforcenow.adp.com/mascsr/default/mdf/recruitment/recruitment.html?ccId=19000101_000001&cid=070b2b3d-d077-4d73-b340-6055055056a6&lang=en_US"
    }
  ],
  "maxItems": 20,
  "includeRaw": true,
  "emitErrorItems": true
}
```

### Example output

```json
{
  "itemType": "job",
  "jobId": "9201203789874_1",
  "clientRequisitionId": "2833",
  "externalJobId": "595246",
  "title": "Cybersecurity Compliance Engineer",
  "careerCenterUrl": "https://workforcenow.adp.com/mascsr/default/mdf/recruitment/recruitment.html?cid=070b2b3d-d077-4d73-b340-6055055056a6&ccId=19000101_000001&lang=en_US",
  "jobUrl": "https://workforcenow.adp.com/mascsr/default/mdf/recruitment/recruitment.html?cid=070b2b3d-d077-4d73-b340-6055055056a6&ccId=19000101_000001&lang=en_US&jobId=9201203789874_1",
  "sourceUrl": "https://workforcenow.adp.com/mascsr/default/mdf/recruitment/recruitment.html?ccId=19000101_000001&cid=070b2b3d-d077-4d73-b340-6055055056a6&lang=en_US",
  "cid": "070b2b3d-d077-4d73-b340-6055055056a6",
  "ccId": "19000101_000001",
  "lang": "en_US",
  "postDate": "2026-07-13T09:26:00.000-04:00",
  "locationText": "Philadelphia, Philadelphia, PA, US",
  "city": "Philadelphia",
  "region": "PA",
  "postalCode": "19114",
  "country": "US",
  "workLevel": "Regular Full-Time",
  "jobClass": "Professional",
  "department": "",
  "isInternalPosting": false,
  "expectedTotal": 23,
  "returnedCount": 20,
  "scrapedAt": "2026-07-16T10:00:54.791Z"
}
```

### Pricing

| Event | Free | Bronze | Silver | Gold | Platinum | Diamond | Charged when |
| --- | ---: | ---: | ---: | ---: | ---: | ---: | --- |
| Run start | `$0.005` | `$0.005` | `$0.005` | `$0.005` | `$0.005` | `$0.005` | Once when the Actor starts. |
| Job item | `$0.00115` | `$0.00100` | `$0.00078` | `$0.00060` | `$0.00040` | `$0.00028` | Each real job row saved to the dataset. Diagnostic error rows are not charged as jobs. |

Pricing uses Apify Store discount tiers and will be recalculated from final cloud cost measurements before publication if needed.

### Tips for best results

- **Use public ADP URLs**: Open the URL in a private browser window first. If the job list is public, the Actor can usually process it.
- **Keep examples small**: Start with `maxItems: 20` until you confirm the output shape for a tenant.
- **Keep raw data when exploring**: Leave `includeRaw: true` for first runs so you can inspect source fields beyond the normalized columns.
- **Check diagnostics**: If a row has `itemType=error`, inspect `errorCode` and `errorMessage` before retrying.

### Limits and responsible use

This Actor collects public job postings only. It does not log in, submit applications, access applicant profiles, retrieve candidate data, or use employer/admin sessions. Make sure your use follows ADP's terms, the target employer's terms, and applicable laws.

### API usage

Node.js:

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

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor("fetch_cat/adp-jobs-scraper").call({
  startUrls: [{ url: "https://workforcenow.adp.com/mascsr/default/mdf/recruitment/recruitment.html?ccId=19000101_000001&cid=070b2b3d-d077-4d73-b340-6055055056a6&lang=en_US" }],
  maxItems: 20,
  includeRaw: true,
  emitErrorItems: true
});
console.log(run.defaultDatasetId);
```

Python:

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("fetch_cat/adp-jobs-scraper").call(run_input={
    "startUrls": [{"url": "https://workforcenow.adp.com/mascsr/default/mdf/recruitment/recruitment.html?ccId=19000101_000001&cid=070b2b3d-d077-4d73-b340-6055055056a6&lang=en_US"}],
    "maxItems": 20,
    "includeRaw": True,
    "emitErrorItems": True,
})
print(run["defaultDatasetId"])
```

cURL:

```bash
curl -X POST "https://api.apify.com/v2/acts/fetch_cat~adp-jobs-scraper/runs?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"startUrls":[{"url":"https://workforcenow.adp.com/mascsr/default/mdf/recruitment/recruitment.html?ccId=19000101_000001&cid=070b2b3d-d077-4d73-b340-6055055056a6&lang=en_US"}],"maxItems":20,"includeRaw":true,"emitErrorItems":true}'
```

### MCP and AI agents

Use this Actor from MCP-compatible tools through the official Apify MCP Server.

```bash
claude mcp add --transport http apify "https://mcp.apify.com?tools=fetch_cat/adp-jobs-scraper"
```

MCP JSON configuration:

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=fetch_cat/adp-jobs-scraper"
    }
  }
}
```

Tool input:

```json
{
  "startUrls": [
    { "url": "https://workforcenow.adp.com/mascsr/default/mdf/recruitment/recruitment.html?ccId=19000101_000001&cid=070b2b3d-d077-4d73-b340-6055055056a6&lang=en_US" }
  ],
  "maxItems": 20,
  "includeRaw": true,
  "emitErrorItems": true
}
```

Example prompts:

- "Run ADP Jobs Scraper for this public ADP career-center URL and summarize the job titles by location."
- "Extract up to 50 public ADP jobs and return a table with title, requisition ID, post date, and job URL."

### Related Actors

- [LinkedIn Jobs Scraper](https://apify.com/fetch_cat/linkedin-jobs-scraper)
- [Indeed Scraper](https://apify.com/fetch_cat/indeed-scraper)
- [Google Jobs Scraper](https://apify.com/fetch_cat/google-jobs-scraper)

### FAQ

**Does this Actor need ADP credentials?**
No. It is designed for public ADP Workforce Now career-center postings only.

**Can it submit applications or collect applicant profiles?**
No. Application flows, candidate profiles, documents, and employer/admin pages are outside this Actor's scope.

**Why did I get an `MISSING_CID` error?**
The input URL does not include ADP's public `cid` tenant parameter. Copy the full ADP career-center URL from the browser address bar.

**Why are there fewer rows than `expectedTotal`?**
ADP may report the tenant total separately from the returned page. The Actor keeps the available public rows and records `expectedTotal` and `returnedCount` for diagnostics.

### Support

If you need help, open an issue on the Actor page and include:

- the run ID,
- the input JSON you used,
- a reproducible public URL (the full public ADP career-center URL),
- the expected output,
- the actual output,
- any diagnostic `errorCode` or `errorMessage` from the dataset.

# Actor input Schema

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

Public ADP Workforce Now recruitment pages or public ADP job-requisitions API URLs containing cid and, when available, ccId/lang.

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

Maximum number of job rows to save across all input URLs. Error diagnostic rows are not charged as jobs.

## `includeRaw` (type: `boolean`):

Include the original ADP requisition object in rawRequisition so you can access fields that are not yet normalized.

## `emitErrorItems` (type: `boolean`):

Save input-level diagnostic rows for invalid URLs, unsupported tenants, empty tenants, and non-JSON responses.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://workforcenow.adp.com/mascsr/default/mdf/recruitment/recruitment.html?ccId=19000101_000001&cid=070b2b3d-d077-4d73-b340-6055055056a6&lang=en_US"
    }
  ],
  "maxItems": 20,
  "includeRaw": true,
  "emitErrorItems": true
}
```

# Actor output Schema

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

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "startUrls": [
        {
            "url": "https://workforcenow.adp.com/mascsr/default/mdf/recruitment/recruitment.html?ccId=19000101_000001&cid=070b2b3d-d077-4d73-b340-6055055056a6&lang=en_US"
        }
    ],
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("fetch_cat/adp-jobs-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "startUrls": [{ "url": "https://workforcenow.adp.com/mascsr/default/mdf/recruitment/recruitment.html?ccId=19000101_000001&cid=070b2b3d-d077-4d73-b340-6055055056a6&lang=en_US" }],
    "maxItems": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("fetch_cat/adp-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": [
    {
      "url": "https://workforcenow.adp.com/mascsr/default/mdf/recruitment/recruitment.html?ccId=19000101_000001&cid=070b2b3d-d077-4d73-b340-6055055056a6&lang=en_US"
    }
  ],
  "maxItems": 20
}' |
apify call fetch_cat/adp-jobs-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/QYRWJmAI3KrWkTNl3/builds/KoeOuuRVXJKyWt2Rj/openapi.json
