# ATS Job Aggregator — Every Major ATS, One Schema API (`nexgendata/ats-job-aggregator`) Actor

Pull open jobs directly from employers ATS platforms (Greenhouse, Lever, Ashby, Workday) into one normalized schema. Pure public JSON, no browser.

- **URL**: https://apify.com/nexgendata/ats-job-aggregator.md
- **Developed by:** [NexGenData](https://apify.com/nexgendata) (community)
- **Categories:** Business, Jobs
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 job extracteds

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/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

## ATS Job Aggregator

Every major ATS in one schema — aggregate job postings across Greenhouse, Lever, Workday, Workable and more for full hiring-market coverage.

### ⏰ Run this as a weekly hiring monitor (recommended)

Point it at a watchlist of companies and schedule a weekly sweep (`0 8 * * 1`). New roles become an always-on hiring-signal feed — see who's scaling which teams, week over week, before it's obvious.

### 📊 What you get

Clean JSON, one record per job record (full output has 15 fields):

- `company` — Company
- `title` — Title
- `department` — Department
- `team` — Team
- `location` — Location
- `remote` — Remote
- `employment_type` — Employment type
- `posted_at` — Posted at
- `updated_at` — Updated at
- `job_url` — Job url

**Pricing:** $0.005 per job record (Pay-Per-Event) — about **200 job records per $1**.

### 🤖 Use with AI agents

Point Claude, the OpenAI Agents SDK, an n8n flow or any MCP-aware client at it and pull hiring data on demand.

**Agentic payments (x402):** Supports agentic payment via x402 — agents can call this actor with USDC, no API key required.

### 🔗 Related jobs & hiring actors

**The ATS family — every major ATS, one schema:** [Greenhouse](https://apify.com/nexgendata/greenhouse-jobs-scraper) · [Lever](https://apify.com/nexgendata/lever-jobs-scraper) · [Workday](https://apify.com/nexgendata/workday-jobs-scraper) · [Workable & SmartRecruiters](https://apify.com/nexgendata/workable-smartrecruiters-jobs-scraper) · [Company Job Board](https://apify.com/nexgendata/company-job-board-scraper)

**Other job sources:** [HN Who's Hiring](https://apify.com/nexgendata/hn-whos-hiring-scraper) · [We Work Remotely](https://apify.com/nexgendata/weworkremotely-jobs-scraper) · [H-1B Salary Search](https://apify.com/nexgendata/h1b-visa-salary-search)

**Hiring-intelligence layer (signals):** [Hiring Signal Detector](https://apify.com/nexgendata/hiring-signal-detector) · [Hiring Signals to Notion](https://apify.com/nexgendata/hiring-signals-notion) · [Tech Hiring Signals](https://apify.com/nexgendata/tech-hiring-signals-ats-jobs)

**Deepest single source — LinkedIn Jobs Scraper:** [LinkedIn Jobs Scraper](https://apify.com/nexgendata/linkedin-jobs-scraper)

**APAC coverage:** [Singapore MyCareersFuture](https://apify.com/nexgendata/singapore-mycareersfuture-jobs)

**Agent front door — Job Market MCP:** [Job Market MCP](https://apify.com/nexgendata/job-market-mcp-server)

***

*Public job-posting and hiring-signal data.*

# Actor input Schema

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

Career boards to scrape, pulled DIRECTLY from each employer's ATS. Each entry can be: (1) a board URL (we auto-detect the ATS + company) such as https://boards.greenhouse.io/stripe, https://jobs.lever.co/spotify, https://jobs.ashbyhq.com/ramp, or a Workday URL like https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite; (2) a token as 'ats:company' e.g. greenhouse:stripe, ashby:ramp, lever:spotify; or (3) a bare company slug (we try each supported ATS). Supported: Greenhouse, Lever, Ashby, Workday (best-effort).

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

Optional. Only return jobs whose title contains one of these (case-insensitive) words/phrases, e.g. \['engineer', 'data', 'remote']. Leave empty to return all open roles.

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

Hard cap on the total number of jobs returned across all boards in this run. 0 = no cap (return all matching open jobs).

## `enrichWorkday` (type: `boolean`):

Workday only. When on, each Workday job is enriched with a per-job detail request to fill description, employment type, posted date and req id (slower, more requests). When off, only the lightweight Workday list fields are returned.

## `notionConnector` (type: `string`):

Optional. Connect your Notion workspace and the run also writes the jobs as a Notion page - the Actor never sees your Notion credentials. Authorize a Notion MCP connector in Apify Console -> Settings -> API & Integrations, then select it here.

## `notionParentId` (type: `string`):

Optional. The Notion page ID to create the page under. If blank, Notion creates a private page in your workspace.

## `supabaseConnector` (type: `string`):

Optional. Connect your own Supabase project and the results are also inserted into a table in the same run — the Actor never sees your Supabase credentials. Authorize a write-scoped, project-scoped Supabase MCP connector in Apify Console (Settings -> Integrations), then select it here.

## `supabaseTable` (type: `string`):

Target table in the public schema (created if missing, with id, a jsonb data column, and a scraped\_at timestamp). Default: nexgendata\_leads.

## `supabaseProjectId` (type: `string`):

Your Supabase project reference (e.g. abcdefghijklmnop). Required unless your connector URL is already project-scoped. Find it in your project URL: supabase.com/dashboard/project/THIS\_PART.

## `deliveryDedup` (type: `boolean`):

When on (default), records already delivered in a previous run are not delivered again to the same destination — so scheduled runs only push new items. Turn off to deliver every record on every run.

## Actor input object example

```json
{
  "companies": [
    "greenhouse:stripe",
    "ashby:ramp",
    "lever:spotify"
  ],
  "keywords": [],
  "maxJobs": 100,
  "enrichWorkday": true,
  "supabaseTable": "nexgendata_leads",
  "deliveryDedup": 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 = {
    "companies": [
        "greenhouse:stripe",
        "ashby:ramp",
        "lever:spotify"
    ],
    "keywords": [],
    "maxJobs": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("nexgendata/ats-job-aggregator").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": [
        "greenhouse:stripe",
        "ashby:ramp",
        "lever:spotify",
    ],
    "keywords": [],
    "maxJobs": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("nexgendata/ats-job-aggregator").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 '{
  "companies": [
    "greenhouse:stripe",
    "ashby:ramp",
    "lever:spotify"
  ],
  "keywords": [],
  "maxJobs": 100
}' |
apify call nexgendata/ats-job-aggregator --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/CdZOQUbiecan6osJV/builds/VygtBBxQAOsYPwBGh/openapi.json
