# ATS Jobs Scraper — Greenhouse, Lever, Ashby & Workday Jobs API (`intelscrape/ats-jobs-scraper`) Actor

ATS Jobs Scraper: export every open job from Greenhouse, Lever, Ashby, Workday and SmartRecruiters career pages in one clean schema: title, department, location, remote flag, salary, posted date, apply URL and full description. Filter by keyword, location or date. No API key. Pay per job.

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

## Pricing

Pay per event

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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

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

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## ATS Jobs Scraper — Greenhouse, Lever, Ashby, Workday

![ATS Jobs Scraper — Greenhouse, Lever, Ashby, Workday](https://api.apify.com/v2/key-value-stores/hRabN9WfDGrT4nSvV/records/ats-jobs-scraper-banner.png)

🇨🇳 **ATS招聘职位采集器**：一次性导出 Greenhouse、Lever、Ashby、Workday 和 SmartRecruiters 招聘页面上的全部职位，统一字段：职位、部门、地点、远程、薪资、发布日期、申请链接和完整职位描述。可按关键词、地点和日期筛选，无需API密钥。

🇸🇬 **Pengikis Kerja ATS**: eksport semua jawatan kosong daripada Greenhouse, Lever, Ashby, Workday dan SmartRecruiters dalam satu skema seragam: jawatan, jabatan, lokasi, jarak jauh, gaji, tarikh, pautan memohon dan penerangan penuh. Tiada kunci API diperlukan.

#### 🤖 NEW: Connect This To Your AI!

Use this actor from Claude, ChatGPT, Cursor or any MCP client through the **[IntelScrape MCP Server](https://apify.com/intelscrape/skip--trace)**, or call it directly over the Apify API.

#### 🏆 Featured Bots by IntelScrape

- [Skip Trace Pro](https://apify.com/intelscrape/skip-trace-pro)
- [TruePeopleSearch Scraper](https://apify.com/intelscrape/truepeoplesearch-scraper)
- [TikTok Email Scraper](https://apify.com/intelscrape/tiktok-scraper)
- [Amazon Product Reviews Scraper](https://apify.com/intelscrape/amazon-product-review-scraper)
- [Website Contact Scraper](https://apify.com/intelscrape/contact-info-scraper)
- [Skip Trace MCP Server](https://apify.com/intelscrape/skip--trace)

⚡ Works with n8n, Make, Zapier, Google Sheets and the Apify API.

![price](https://img.shields.io/badge/price-%241.50%20per%201K%20jobs-blue) ![billing](https://img.shields.io/badge/billing-pay%20per%20job-green) ![API key](https://img.shields.io/badge/API%20key-not%20required-brightgreen) ![ATS](https://img.shields.io/badge/ATS-5%20supported-orange)

**One run, five ATS platforms, one clean schema: straight from the employer's own career page, with salary and full descriptions where published.**

> **Honest coverage & billing:** Public career pages only; no logins and no LinkedIn/Indeed. You pay only for results actually delivered, and a built-in cost guard stops the run at your max-charge limit.

🌍 Built for teams in the **US, China and Singapore**, and anyone who needs this data in a spreadsheet or pipeline.

⭐ Found it useful? Please leave a review; it helps others find it.

⚖️ **Lawful business use only.** Collect public data only, and comply with the source site's terms, copyright and data-protection laws (GDPR, CCPA, China PIPL, Singapore PDPA).

*Examples below are illustrative; names and values may be fictional or out of date.*

### What is ATS Jobs Scraper?

Most companies post jobs on an applicant tracking system (ATS) first, before job boards. **ATS Jobs Scraper** reads those career pages directly and returns every open role from **Greenhouse, Lever, Ashby, Workday and SmartRecruiters** in a single schema, with the full job description included by default. Mix companies from different ATSs in one run.

### What does it do?

- **5 ATS platforms**: Greenhouse, Lever, Ashby, Workday, SmartRecruiters
- **Company name or careers URL**: type "stripe" or paste a careers-page URL; mix platforms freely
- **Full job descriptions (on by default)** as plain text, HTML or both
- **Normalized fields**: title, department, team, location(s), country, remote flag, workplace type, employment type
- **Salary** (min, max, currency) when the employer publishes it
- **Filters**: title keywords, locations, departments, remote only, posted within N days
- **Caps**: max jobs per company and per run, so you control spend

### Why choose us over cheaper scrapers?

- **Honest output**: limits are documented, missing data is labeled, never invented
- **Clean, consistent schema** ready for Excel, Sheets, BI tools or an LLM
- **No account risk**: no logins, no cookies
- **Pay per result** with a cost guard; no subscription
- **Maintained by IntelScrape** and fixed fast when the source changes

### Who is it for?

- **Recruiting & sourcing**: monitor target companies for new openings
- **Sales intelligence**: hiring is a buying signal; find companies hiring for roles your product serves
- **Job boards & aggregators**: feed fresh, structured postings into your site
- **Labor-market & salary research**: compare roles, locations and published pay ranges
- **Competitive intelligence**: see which teams competitors are growing
- **Job alerts**: schedule daily runs with "postedWithinDays": 1

### How to use it

#### In Apify Console (no code)

1. Click **Try for free** / **Start**. The form is prefilled with a working example.
2. Change the inputs (see examples below).
3. Click **Start**, then export the results as **JSON, CSV, Excel, XML or HTML**, or open them in Google Sheets.
4. Optional: **Schedule** the actor to run hourly, daily or weekly.

#### Via API

```bash
curl -X POST "https://api.apify.com/v2/acts/intelscrape~ats-jobs-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"companies": ["stripe", "https://jobs.lever.co/palantir", "https://jobs.ashbyhq.com/ramp", "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite"], "maxResultsPerCompany": 10, "includeDescription": true}'
```

Or use the official [Apify JavaScript](https://docs.apify.com/api/client/js/) and [Python](https://docs.apify.com/api/client/python/) clients:

```python
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("intelscrape/ats-jobs-scraper").call(run_input={"companies": ["stripe", "https://jobs.lever.co/palantir", "https://jobs.ashbyhq.com/ramp", "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite"], "maxResultsPerCompany": 10, "includeDescription": true})
for item in client.dataset(run["default_dataset_id"]).iterate_items():
    print(item)
```

#### With AI agents (MCP)

Add Apify's MCP server (`https://mcp.apify.com`) or the [IntelScrape MCP Server](https://apify.com/intelscrape/skip--trace) to Claude Desktop, Cursor, ChatGPT or any MCP client, then ask in plain language, e.g. *"Run intelscrape/ats-jobs-scraper with the default input and summarise the results."*

### Input examples

**Default: mixed ATS companies**

```json
{
  "companies": [
    "stripe",
    "https://jobs.lever.co/palantir",
    "https://jobs.ashbyhq.com/ramp",
    "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite"
  ],
  "maxResultsPerCompany": 10,
  "includeDescription": true
}
```

**Remote engineering jobs posted this week**

```json
{
  "companies": ["stripe", "https://jobs.ashbyhq.com/ramp"],
  "keywords": ["engineer"],
  "remoteOnly": true,
  "postedWithinDays": 7
}
```

**Fast, light run (no descriptions)**

```json
{
  "companies": ["https://boards.greenhouse.io/airbnb"],
  "includeDescription": false,
  "maxResultsPerCompany": 500
}
```

### Output fields

| Field | Description |
|---|---|
| `ats` | greenhouse / lever / ashby / workday / smartrecruiters |
| `company / companySlug` | Employer |
| `jobId / requisitionId` | Posting ids |
| `title` | Job title |
| `department / team` | Org unit |
| `location / locations / country` | Where the job is |
| `isRemote / workplaceType` | Remote / hybrid / on-site |
| `employmentType` | Full-time, contract… |
| `salary / salaryMin / salaryMax / salaryCurrency` | Pay range when published |
| `postedAt / updatedAt` | Dates (ISO) |
| `jobUrl / applyUrl` | Links |
| `descriptionText / descriptionHtml` | Full description |

#### Sample output

```json
{
  "ats": "greenhouse",
  "company": "Stripe",
  "jobId": "8172508",
  "title": "Abuse Investigator",
  "department": "Security Analytics",
  "location": "Dublin",
  "isRemote": false,
  "salaryMin": null,
  "postedAt": "2026-09-03T17:32:53.000Z",
  "jobUrl": "https://stripe.com/jobs/search?gh_jid=8172508",
  "descriptionText": "Who we are. About Stripe. Stripe is a financial infrastructure platform…"
}
```

### Pricing (pay per event)

| Event | When it is charged | Price |
|---|---|---|
| **Actor start** | once per run | $0.002 |
| **Job** | per job row | $0.0015 |

#### Cost examples

| Run | Cost |
|---|---|
| Default run: 4 companies × 10 jobs | $0.062 |
| 1,000 jobs | $1.502 |
| 10,000 jobs | $15.002 |

Platform usage is included in these prices. Set **Max charge per run** in the run options to cap spend; the actor stops cleanly when the limit is reached and keeps everything collected so far.

### FAQ

#### Which applicant tracking systems are supported?

Greenhouse, Lever, Ashby, Workday and SmartRecruiters.

#### Do I need an API key?

No. The actor reads the same public career pages job seekers see.

#### How do I add a Workday company?

Paste the full careers URL, e.g. https://company.wd5.myworkdayjobs.com/External. Workday cannot be resolved from a company name alone.

#### Can I type just a company name?

Yes for Greenhouse, Lever, Ashby and SmartRecruiters: the actor tries the usual board slug. If a company isn't found, paste its careers URL.

#### Is salary included?

Yes, when the employer publishes it (common in US pay-transparency states, rarer elsewhere). Otherwise the salary fields are null.

#### Are full job descriptions included?

Yes, by default. Set "includeDescription": false for faster, lighter runs; the price per job is the same.

#### Does it scrape LinkedIn or Indeed?

No. Only employers' own public ATS career pages.

#### How do I get only new jobs?

Use "postedWithinDays": 1 and schedule the actor daily.

#### Can I use it from an AI agent?

Yes, via the Apify API or the IntelScrape MCP server.

### Honest limits

- Public career pages only; no logins and no LinkedIn/Indeed.
- Workday requires the full careers URL.
- Salary appears only when the employer publishes it.
- Company-name lookup guesses the board slug; paste the URL if a company isn't found.

### Related IntelScrape bots

- [Greenhouse Jobs Scraper](https://apify.com/intelscrape/greenhouse-jobs-scraper): single-ATS Greenhouse postings
- [Lever Jobs Scraper](https://apify.com/intelscrape/lever-jobs-scraper): single-ATS Lever postings
- [Ashby Jobs Scraper](https://apify.com/intelscrape/ashby-jobs-scraper): single-ATS Ashby postings
- [Website Contact Scraper](https://apify.com/intelscrape/contact-info-scraper): emails, phones & socials from sites
- [Keyword Search Volume](https://apify.com/intelscrape/keyword-search-volume): estimated monthly Google searches
- [Skip Trace MCP Server](https://apify.com/intelscrape/skip--trace): IntelScrape tools for AI agents

### Legal

This actor collects publicly available data only. You are responsible for using the results lawfully and in line with the source's terms and applicable privacy laws (GDPR, CCPA, PIPL, PDPA). Process personal data only with a legitimate purpose. IntelScrape is not affiliated with, endorsed by or sponsored by the data source; all trademarks belong to their owners.

# Actor input Schema

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

One per line. Paste a careers-page URL (boards.greenhouse.io/stripe, jobs.lever.co/palantir, jobs.ashbyhq.com/ramp, nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite, jobs.smartrecruiters.com/BoschGroup) or just a company name or domain (stripe, ramp.com) and the ATS is detected automatically. Workday always needs the full URL.

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

Keep only jobs whose title, department or team contains one of these words (prefix match: 'engineer' also matches 'engineering'). Leave empty for all jobs.

## `locations` (type: `array`):

Keep only jobs whose location contains one of these whole words, e.g. 'London', 'New York', 'Remote', 'US'.

## `departments` (type: `array`):

Keep only jobs in these departments or teams, e.g. 'Engineering', 'Sales'.

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

Keep only jobs marked remote.

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

Keep only jobs posted in the last N days. 0 = any time.

## `maxResultsPerCompany` (type: `integer`):

Stop after this many matching jobs per company.

## `maxResults` (type: `integer`):

Hard cap for the whole run (you pay per job delivered).

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

Add the full job description. Turn off for faster, lighter runs.

## `descriptionFormat` (type: `string`):

Format of the description field.

## Actor input object example

```json
{
  "companies": [
    "stripe",
    "https://jobs.lever.co/palantir",
    "https://jobs.ashbyhq.com/ramp",
    "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite"
  ],
  "keywords": [],
  "locations": [],
  "departments": [],
  "remoteOnly": false,
  "postedWithinDays": 0,
  "maxResultsPerCompany": 10,
  "maxResults": 1000,
  "includeDescription": true,
  "descriptionFormat": "text"
}
```

# Actor output Schema

## `results` (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 = {
    "companies": [
        "stripe",
        "https://jobs.lever.co/palantir",
        "https://jobs.ashbyhq.com/ramp",
        "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite"
    ],
    "maxResultsPerCompany": 10,
    "includeDescription": true
};

// Run the Actor and wait for it to finish
const run = await client.actor("intelscrape/ats-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 = {
    "companies": [
        "stripe",
        "https://jobs.lever.co/palantir",
        "https://jobs.ashbyhq.com/ramp",
        "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite",
    ],
    "maxResultsPerCompany": 10,
    "includeDescription": True,
}

# Run the Actor and wait for it to finish
run = client.actor("intelscrape/ats-jobs-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).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": [
    "stripe",
    "https://jobs.lever.co/palantir",
    "https://jobs.ashbyhq.com/ramp",
    "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite"
  ],
  "maxResultsPerCompany": 10,
  "includeDescription": true
}' |
apify call intelscrape/ats-jobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,intelscrape/ats-jobs-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/DMub2PXqchPBiuLLl/builds/3dGDkcVIRltt92s73/openapi.json
