# ATS Jobs Feed Scraper - Greenhouse, Lever & Ashby (`derezar/ats-jobs-feed-scraper`) Actor

Scrape live job postings from Greenhouse, Lever, Ashby, Workable, SmartRecruiters and Recruitee in one run. Ships a verified index of 869 live job boards, so it works with zero setup - no company list required. Public keyless APIs, no proxies.

- **URL**: https://apify.com/derezar/ats-jobs-feed-scraper.md
- **Developed by:** [Derezar Master](https://apify.com/derezar) (community)
- **Categories:** Jobs, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.20 / 1,000 job scrapeds

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 Jobs Feed Scraper — Greenhouse, Lever, Ashby, Workable, SmartRecruiters & Recruitee

Scrape **live job postings from six applicant tracking systems in one run**, in one clean schema.

Unlike every other ATS scraper, **you do not need to supply a company list.** This Actor ships with a maintained index of **verified live job boards** and refreshes it regularly. Click **Start** and you get real jobs on the first run.

All six sources are **public, keyless job-board APIs**. No proxies. No logins. No CAPTCHAs. No bans. That is why this Actor is cheap and does not break.

***

### What it scrapes

| ATS | Public endpoint used | Descriptions |
|---|---|---|
| **Greenhouse** | `boards-api.greenhouse.io/v1/boards/{slug}/jobs` | ✅ |
| **Lever** | `api.lever.co/v0/postings/{slug}` | ✅ |
| **Ashby** | `api.ashbyhq.com/posting-api/job-board/{slug}` | ✅ |
| **Workable** | `apply.workable.com/api/v1/widget/accounts/{slug}` | ✅ |
| **SmartRecruiters** | `api.smartrecruiters.com/v1/companies/{slug}/postings` | ✅ |
| **Recruitee** | `{slug}.recruitee.com/api/offers` | ✅ |

***

### Use cases

- **Job boards & aggregators** — backfill your listings with fresh, structured inventory every day.
- **Recruiting & sourcing intelligence** — track which companies are hiring, for what, and where.
- **Sales & GTM buying signals** — a company hiring 12 data engineers is a company buying data tools.
- **Market & compensation research** — headcount trends by department, location and employment type.
- **Job-alert products and AI agents** — a clean daily feed you can index or embed.

***

### Quick start

Leave every field at its default and press **Start**. You get jobs from the highest-volume verified boards in the index.

#### Target specific companies

Put anything of these in `companies` — the Actor figures out the rest:

```
https://boards.greenhouse.io/spacex
https://jobs.lever.co/veeva
https://jobs.ashbyhq.com/ramp
greenhouse:anduril
lever:zoox
ashby:crusoe
```

#### Cheap daily incremental feed

```json
{
  "postedWithinDays": 1,
  "includeDescription": false,
  "maxCompanies": 2000,
  "maxJobs": 50000
}
```

Set that on a daily schedule and you only pay for genuinely new postings.

#### Remote engineering roles only

```json
{
  "searchKeywords": ["engineer", "developer"],
  "remoteOnly": true,
  "postedWithinDays": 14
}
```

***

### Input reference

| Field | Type | Default | What it does |
|---|---|---|---|
| `companies` | array | `[]` | Board URLs, `ats:slug`, or bare slugs. **Empty = use the built-in index.** |
| `atsPlatforms` | array | all 6 | Which ATS platforms to pull from. |
| `searchKeywords` | array | `[]` | Keep jobs matching any keyword in title / department / description. |
| `locationFilter` | array | `[]` | Keep jobs whose location contains any of these strings. |
| `departmentFilter` | array | `[]` | Keep jobs in these departments. |
| `remoteOnly` | boolean | `false` | Keep only remote postings. |
| `postedWithinDays` | integer | `0` | Only jobs published in the last N days. `0` = no filter. |
| `maxJobs` | integer | `1000` | Hard result cap. **This caps your spend.** |
| `maxCompanies` | integer | `250` | How many indexed boards to pull, busiest first. |
| `maxJobsPerCompany` | integer | `0` | Cap per board. `0` = automatic fair share of `maxJobs` across all boards. |
| `includeDescription` | boolean | `true` | Fetch full description text. Off = much faster. |
| `concurrency` | integer | `10` | Parallel board requests. |

***

### Output

One row per job posting, identical shape across all six ATS platforms:

```json
{
  "ats": "greenhouse",
  "companySlug": "spacex",
  "company": "spacex",
  "jobId": "8643277002",
  "title": "Accountant",
  "department": "Finance",
  "location": "Hawthorne, CA",
  "isRemote": false,
  "employmentType": null,
  "postedAt": "2026-07-24T18:02:11+00:00",
  "applyUrl": "https://boards.greenhouse.io/spacex/jobs/8643277002",
  "descriptionText": "SpaceX was founded under the belief that...",
  "salaryRaw": null,
  "scrapedAt": "2026-08-03T11:04:55+00:00"
}
```

Export as **JSON, CSV, Excel, XML** or pull it from the Apify API.

***

### Pricing

Pay-per-event. You are charged **per job returned** — nothing else. `maxJobs` is a hard ceiling, so your spend is always predictable.

Because every source is a free public API, there are no proxy costs baked into the price.

#### How the quota is spread

Results are allocated **round-robin across boards**, so a single 2,000-role employer can never swallow your whole run. Boards with fewer jobs than their share release the remainder to the others. Set `maxJobsPerCompany` if you want to control this yourself, or target one company to pull its board in full.

***

### Notes & limits

- Only **publicly published** job postings are returned. Nothing behind a login.
- No candidate or applicant data is ever touched — this is employer-published job-ad data only.
- If a company closes its board or changes ATS, that board is dropped on the next index refresh.
- `salaryRaw` is populated only where the ATS exposes it (mainly Lever and Ashby).

### Integrations

Works with Make, Zapier, n8n, Airbyte, Google Sheets, Slack, and any HTTP client via the Apify API. Schedule it daily and push straight into your database or spreadsheet.

# Actor input Schema

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

Leave this EMPTY and the Actor scrapes a maintained index of verified live job boards automatically. To target specific employers, paste job-board URLs (https://boards.greenhouse.io/spacex), or use ats:slug format (greenhouse:spacex, lever:veeva, ashby:ramp), or just the slug.

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

Which applicant tracking systems to pull from. All six are public, keyless APIs - no proxies needed.

## `searchKeywords` (type: `array`):

Keep only jobs matching any of these keywords in the title, department or description. Leave empty for all jobs.

## `locationFilter` (type: `array`):

Keep only jobs whose location contains any of these strings, e.g. "London", "United States", "Berlin".

## `departmentFilter` (type: `array`):

Keep only jobs in these departments, e.g. "Engineering", "Sales".

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

Keep only postings detected as remote.

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

Only return jobs published in the last N days. Use this for cheap daily incremental runs. 0 = no date filter.

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

Hard cap on results. This directly caps what you are charged.

## `maxCompanies` (type: `integer`):

How many boards from the built-in index to pull, ordered by number of open roles.

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

Cap results per job board so one huge employer doesn't fill your whole quota. 0 = unlimited. When you leave 'Companies' empty, this defaults to 50 to keep results broad.

## `includeDescription` (type: `boolean`):

Fetch the full description text. Turn off for much faster, lighter runs.

## `concurrency` (type: `integer`):

Parallel board requests. Lower this if you see timeouts.

## Actor input object example

```json
{
  "companies": [],
  "atsPlatforms": [
    "greenhouse",
    "lever",
    "ashby",
    "workable",
    "smartrecruiters",
    "recruitee"
  ],
  "searchKeywords": [
    "engineer"
  ],
  "locationFilter": [],
  "departmentFilter": [],
  "remoteOnly": false,
  "postedWithinDays": 0,
  "maxJobs": 1000,
  "maxCompanies": 250,
  "maxJobsPerCompany": 0,
  "includeDescription": true,
  "concurrency": 10
}
```

# 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": [],
    "searchKeywords": [
        "engineer"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("derezar/ats-jobs-feed-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 = {
    "companies": [],
    "searchKeywords": ["engineer"],
}

# Run the Actor and wait for it to finish
run = client.actor("derezar/ats-jobs-feed-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 '{
  "companies": [],
  "searchKeywords": [
    "engineer"
  ]
}' |
apify call derezar/ats-jobs-feed-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/55kFgewokJ51tng3G/builds/SvL3fheVqLBdNxXVC/openapi.json
