# Greenhouse, Lever & Ashby Jobs Scraper (`red.cars/ats-jobs-scraper-pro`) Actor

Every open job at the companies you choose, live from their Greenhouse, Lever or Ashby career site. Title, location, remote, department and date filters run before billing. Salary where posted. $0.03 per 1,000 jobs.

- **URL**: https://apify.com/red.cars/ats-jobs-scraper-pro.md
- **Developed by:** [AutomateLab](https://apify.com/red.cars) (community)
- **Categories:** Jobs, Lead generation, AI
- **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

## Greenhouse, Lever & Ashby Jobs Scraper

Every open job at the companies you pick, pulled live from their own Greenhouse, Lever or Ashby career site. **$2.00 per 1,000 jobs.** Paste a career page URL or just a company slug (`ramp`, `airbnb`, `palantir`) and the actor finds the right ATS for you.

**Compared with fantastic-jobs/career-site-job-listing-api** (rated 4.08, $12 per 1,000 on the free plan and $4 to $6 on paid plans): this actor costs less on every plan, reads the company's live board instead of a cached database, and your title, location, department, remote and date filters run *before* anything is saved, so jobs you filter out are never billed.

### Why use it

- **Live, straight from the ATS.** No aggregator lag. If the job is on the career page now, it is in your dataset.
- **Three ATS, one schema.** Greenhouse, Lever and Ashby jobs come back in the same columns.
- **Salary where posted.** Ashby and Lever salary ranges are included when the company publishes them.
- **Pay only for what you keep.** Filtered jobs are free. Hard `maxItems` cap so a run never surprises you.
- **Fast and light.** One request per company. A 150-job board finishes in about 2 seconds.

### Input

| Field | Type | What it does |
|---|---|---|
| `companies` | list | Career page URLs (`boards.greenhouse.io/airbnb`, `jobs.lever.co/palantir`, `jobs.ashbyhq.com/ramp`) or bare slugs. Bare slugs are tried on all three ATS. |
| `maxItems` | number | Hard cap on jobs saved across all companies. Default 10. |
| `titleInclude` | list | Keep jobs whose title contains any of these words. |
| `titleExclude` | list | Drop jobs whose title contains any of these words (e.g. `intern`, `senior`). |
| `locationInclude` | list | Keep jobs whose location contains any of these (e.g. `New York`, `Remote`). |
| `departmentInclude` | list | Keep jobs in matching departments or teams (e.g. `Engineering`). |
| `remoteOnly` | boolean | Only remote jobs. |
| `postedWithinDays` | number | Only jobs published or updated in the last N days. |
| `includeDescription` | boolean | Adds the full job description as plain text. Default on. |

Example:

```json
{
  "companies": ["ramp", "https://jobs.lever.co/palantir", "airbnb"],
  "titleInclude": ["engineer"],
  "remoteOnly": true,
  "maxItems": 500
}
```

### Output

One row per job:

| Field | Example |
|---|---|
| `ats` | `ashby` |
| `companySlug` / `companyName` | `ramp` |
| `jobId` | `34413f8d-26bf-...` |
| `title` | `Security Engineer, Cloud` |
| `location` | `New York, NY (HQ); Remote (US)` |
| `department` | `Engineering / Backend` |
| `employmentType` | `FullTime` |
| `workplaceType` | `Hybrid` |
| `isRemote` | `true` |
| `salary` | `$211.4K - $290.6K` |
| `postedAt` / `updatedAt` | ISO dates |
| `jobUrl` / `applyUrl` | Direct links to the posting and the application form |
| `description` | Plain-text job description |
| `scrapedAt` | When the row was collected |

### Pricing

Pay per event:

- **Actor start:** $0.005 per run
- **Job saved:** $0.002 ($2.00 per 1,000 jobs)

A 1,000-job pull costs about $2.01. Jobs removed by your filters cost nothing.

### Use cases

- **Recruiters and sourcers:** watch target companies for new openings in your niche.
- **Sales teams:** hiring is buying intent. A company opening 10 data engineering roles needs data tools.
- **Job seekers and job boards:** build a feed of remote roles from the companies you actually want.
- **Market and comp research:** collect posted salary ranges by role and company.
- **AI agents and LLM pipelines:** clean, uniform JSON with plain-text descriptions, ready to embed.

### FAQ

**How do I find a company's slug?** Open its careers page. If the jobs link goes to `boards.greenhouse.io/X`, `jobs.lever.co/X` or `jobs.ashbyhq.com/X`, `X` is the slug. You can also paste the whole URL.

**What if a company uses a custom careers domain?** Many custom pages (like careers.airbnb.com) still run on Greenhouse underneath. Try the company name as a slug; the actor checks all three ATS.

**What about Workday, iCIMS or SmartRecruiters?** Not yet. Greenhouse, Lever and Ashby cover a large share of tech and startup hiring. Tell us which ATS you need next in the Issues tab.

**Do I need a proxy or login?** No. These are the companies' public job boards.

**Why is it fresher than a jobs database?** It reads the company's live public job feed on every run, in one request, instead of serving a cached copy.

# Actor input Schema

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

Career page URLs (boards.greenhouse.io/airbnb, jobs.lever.co/palantir, jobs.ashbyhq.com/ramp) or bare company slugs (airbnb, ramp). Bare slugs are checked on all three ATS automatically.

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

Hard cap on jobs saved across all companies.

## `titleInclude` (type: `array`):

Keep jobs whose title contains at least one of these words.

## `titleExclude` (type: `array`):

Drop jobs whose title contains any of these words.

## `locationInclude` (type: `array`):

e.g. New York, London, Remote.

## `departmentInclude` (type: `array`):

e.g. Engineering, Sales.

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

Only jobs marked remote by the ATS or with Remote in the location.

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

Only jobs published or updated in the last N days. Leave empty for all.

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

Adds the full description as plain text.

## Actor input object example

```json
{
  "companies": [
    "ramp",
    "airbnb"
  ],
  "maxItems": 10,
  "titleInclude": [],
  "titleExclude": [],
  "locationInclude": [],
  "departmentInclude": [],
  "remoteOnly": false,
  "includeDescription": true
}
```

# Actor output Schema

## `results` (type: `string`):

One row per open job that matched your filters, normalized across Greenhouse, Lever and Ashby.

# 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": [
        "ramp",
        "airbnb"
    ],
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("red.cars/ats-jobs-scraper-pro").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": [
        "ramp",
        "airbnb",
    ],
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("red.cars/ats-jobs-scraper-pro").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": [
    "ramp",
    "airbnb"
  ],
  "maxItems": 10
}' |
apify call red.cars/ats-jobs-scraper-pro --silent --output-dataset

```

## MCP server setup

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

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/OEQmaUFb0xRMaEwDc/builds/XiXYbGPAf3k59KgnR/openapi.json
