ADP Jobs Scraper

Extract public job postings from ADP Workforce Now career centers.

Data fields

FieldTypeDescription
itemTypestringValue exported as itemType.
jobIdstring | nullValue exported as jobId.
clientRequisitionIdstring | nullValue exported as clientRequisitionId.
externalJobIdstring | nullValue exported as externalJobId.
titlestring | nullValue exported as title.
companyNamestring | nullValue exported as companyName.
careerCenterUrlstring | nullValue exported as careerCenterUrl.
jobUrlstring | nullValue exported as jobUrl.

Input preview

startUrlsADP career center URLs *
maxItemsMaximum jobs
includeRawInclude raw ADP requisition
emitErrorItemsEmit error rows

API and agents

This actor can be run through Apify API, datasets, webhooks, schedules, and the official Apify MCP server.

How this actor works

See example inputs, outputs, API usage, and practical limits before running this actor on Apify.

Open Apify page

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.

Example 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
}

Example output

{
  "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"
}

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:

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:

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:

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.

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

MCP JSON configuration:

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

Tool 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
}

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."

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.

Common questions

Questions and answers reused from the canonical actor README.

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.