# Job Postings Scraper - Greenhouse, Lever, Ashby & More (`swerve/ats-jobs-scraper`) Actor

Scrape open job postings from Greenhouse, Lever, Ashby, SmartRecruiters and Recruitee. Paste a company careers URL and get every role: title, location, department, type, salary where published, description and apply link. Covers more platforms than most job scrapers.

- **URL**: https://apify.com/swerve/ats-jobs-scraper.md
- **Developed by:** [Swerve](https://apify.com/swerve) (community)
- **Categories:** 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 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

## Job Postings Scraper — Greenhouse, Lever, Ashby, SmartRecruiters & Recruitee

Scrape **open job postings** straight from company career pages powered by **Greenhouse, Lever, Ashby, SmartRecruiters and Recruitee** — five of the most common applicant-tracking systems, used by tens of thousands of companies. Most job scrapers cover only two or three of these. Paste a company's job-board URL and get every open role. Runs on each board's own public data — **no login, no API key, no anti-bot**.

### What you can do with it

- Track who's hiring and for what (sales / recruiting signals)
- Build a jobs board or aggregator from real company career pages
- Monitor a competitor's or target account's open roles over time
- Feed a recruiting or market-research dataset

### Input

| Field | What it does | Example |
|-------|--------------|---------|
| **Job board URLs** | A company's careers URL on any of the five platforms. | `https://boards.greenhouse.io/stripe`, `https://jobs.lever.co/spotify`, `https://jobs.ashbyhq.com/ramp`, `https://careers.smartrecruiters.com/BoschGroup`, `https://bunq.recruitee.com` |
| **Max jobs per company** | Optional cap per company. Leave blank for all roles. | `200` |
| **Max results** | Optional overall cap. | — |

You can also write a board as `greenhouse:stripe`, `lever:spotify`, `ashby:ramp`, `smartrecruiters:BoschGroup` or `recruitee:bunq`. Mix companies and platforms freely in one run.

### Output

One row per job, normalized across all three platforms:

```json
{
  "company": "stripe",
  "platform": "greenhouse",
  "jobId": "6789012",
  "title": "Account Executive, AI Sales",
  "location": "San Francisco, CA",
  "department": "Sales",
  "team": "Sales",
  "employmentType": "Full-time",
  "workplaceType": "Remote",
  "compensation": "$120K – $160K",
  "description": "Stripe is looking for...",
  "url": "https://boards.greenhouse.io/stripe/jobs/6789012",
  "postedAt": "2026-06-30T00:00:00.000Z",
  "updatedAt": "2026-07-01T00:00:00.000Z",
  "scrapedAt": "2026-07-07T12:07:00.000Z"
}
```

Fill rates on the core fields (title, location, department, apply URL) are ~100% on all three platforms.

### What each platform provides

- **Greenhouse** — full data including the complete job description.
- **Lever** — full data including the description, employment type and workplace type.
- **Recruitee** — full data including the description, employment type, workplace type and salary when published.
- **Ashby** — title, location, department, employment type and **salary range** (when the company publishes it). The full description is not exposed by Ashby's public board.
- **SmartRecruiters** — title, location, department, employment type and remote/hybrid flag. The full description is not exposed by the public postings list.

### How it works

Each platform has a public, key-less endpoint (Greenhouse Boards API, Lever Postings API, Ashby's public job-board GraphQL). The actor detects the platform from the URL you paste, pulls all open roles, and normalizes them to one common shape. No proxy required.

### Limits

- Fields a given platform does not publish come back empty (for example, salary is only available where the company chooses to show it; Ashby does not expose the description).
- Only open/published roles are returned.

### Export formats

Results download as JSON, CSV, Excel or XML, or pull them straight from the Apify API into your own app, spreadsheet or database.

### Frequently asked questions

**Which job boards does it scrape?** Company career pages hosted on Greenhouse, Lever, Ashby, SmartRecruiters and Recruitee, the systems most tech and startup companies use.

**Do I need an API key?** No. This job postings scraper needs no API key and no login. It reads each company's public job board directly.

**What data does it return for each job?** Title, location, department or team, employment type, a link to apply, the posting date and the full description where the platform exposes it.

**Can I scrape many companies at once?** Yes. Paste a list of company job board URLs and every open role is returned in the same run, so it works as a bulk jobs and hiring scraper.

**Is scraping job boards legal?** This tool reads publicly posted job listings. You are responsible for how you use it. Review each platform's terms and your local laws before large-scale use.

### Pricing

Pay per result. You only pay for the jobs you actually get.

# Actor input Schema

## `boardUrls` (type: `array`):

Paste a company's careers URL on Greenhouse, Lever, Ashby, SmartRecruiters or Recruitee, e.g. https://boards.greenhouse.io/stripe, https://jobs.lever.co/spotify, https://jobs.ashbyhq.com/ramp, https://careers.smartrecruiters.com/BoschGroup, https://bunq.recruitee.com. You can also write it as greenhouse:stripe, lever:spotify, ashby:ramp, smartrecruiters:BoschGroup or recruitee:bunq.

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

Cap jobs collected per company. Leave blank for all open roles.

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

Cap on total jobs. Leave blank for everything.

## `proxyConfiguration` (type: `object`):

Optional. These job boards work without a proxy; add one only for very large runs.

## Actor input object example

```json
{
  "boardUrls": [
    "https://boards.greenhouse.io/stripe"
  ],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# 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 = {
    "boardUrls": [
        "https://boards.greenhouse.io/stripe"
    ],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("swerve/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 = {
    "boardUrls": ["https://boards.greenhouse.io/stripe"],
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("swerve/ats-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 '{
  "boardUrls": [
    "https://boards.greenhouse.io/stripe"
  ],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call swerve/ats-jobs-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

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