# ATS Jobs: Greenhouse, Lever, Ashby & 3 more (`digitalni.produkty.pro.zivot/ats-jobs`) Actor

Get all open jobs from company career sites on Greenhouse, Lever, Ashby, SmartRecruiters, Recruitee and Personio in one clean schema, straight from their official public job board APIs. Salary, remote, filters and new-job monitoring.

- **URL**: https://apify.com/digitalni.produkty.pro.zivot/ats-jobs.md
- **Developed by:** [Digitální produkty pro život](https://apify.com/digitalni.produkty.pro.zivot) (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.50 / 1,000 job listings

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: Greenhouse, Lever, Ashby, SmartRecruiters, Recruitee & Personio

Get **every open job** from company career sites that run on **Greenhouse, Lever, Ashby, SmartRecruiters, Recruitee or Personio**, in **one clean, unified schema**. Data comes straight from each platform's **official public job board API**, the same feed companies use for their own careers pages. It is fast, complete and reliable, with no browser, no proxies and no blocking.

Paste careers page links or just company names. The ATS is **detected automatically**.

### Why this Actor

- **6 ATS in one schema**: no need to merge different formats.
- **Auto-detection**: type `ramp` or `notion` and the Actor finds the right job board.
- **Salary** where the company publishes it (min, max, currency, interval), very common on Ashby, Lever and Recruitee.
- **Remote / hybrid / onsite** flag and all job locations.
- **Filters**: title keywords, excluded words, locations, departments, remote only, posted within N days.
- **New-job monitoring**: turn on *Only new jobs*, schedule daily and get only fresh postings.
- **Pay per job**: you pay only for jobs saved after filtering.

### Output

```json
{
  "ats": "ashby",
  "company": "ramp",
  "id": "34413f8d-26bf-4bbc-8ade-eb309a0e2245",
  "title": "Security Engineer, Cloud",
  "department": "Engineering",
  "team": "Backend",
  "location": "New York, NY (HQ)",
  "locations": ["New York, NY (HQ)", "Remote (Canada)", "Remote (US)", "Miami, FL"],
  "country": "USA",
  "workplaceType": "hybrid",
  "remote": true,
  "employmentType": "FullTime",
  "salaryMin": 211400,
  "salaryMax": 290600,
  "salaryCurrency": "USD",
  "salaryInterval": "year",
  "salaryText": "$211.4K - $290.6K",
  "postedAt": "2026-04-07T17:12:35.753Z",
  "url": "https://jobs.ashbyhq.com/ramp/34413f8d-...",
  "applyUrl": "https://jobs.ashbyhq.com/ramp/34413f8d-.../application",
  "descriptionText": "About Ramp ..."
}
```

A `SUMMARY` record shows which ATS was found for each company and how many jobs were saved.

### Supported inputs

| ATS | Example input |
|---|---|
| Greenhouse | `https://boards.greenhouse.io/airbnb`, `job-boards.greenhouse.io/stripe` |
| Lever | `https://jobs.lever.co/palantir` |
| Ashby | `https://jobs.ashbyhq.com/ramp` |
| SmartRecruiters | `https://careers.smartrecruiters.com/BoschGroup` |
| Recruitee | `bunq.recruitee.com` |
| Personio | `personio.jobs.personio.de` |
| Any of them | just the company name, e.g. `ramp`, or `lever:netflix` |

### Use cases

- **Job boards and aggregators**: feed niche job sites with fresh postings from hundreds of companies.
- **Recruiters and sales teams**: see which companies are hiring for which roles (hiring signals).
- **Job seekers**: monitor dream companies and get new matching jobs every morning.
- **Market research**: salary ranges, remote share and hiring trends by company or department.

### Tips

- Combine **titleKeywords** and **locations** to get, for example, all data jobs in Germany or remote.
- For monitoring, set **Only new jobs**, choose a **Monitor name** and create a daily schedule.
- If a company is not found, open its careers page, click a job and paste that link. It shows which ATS the company uses.

### Data and legal notes

Only publicly published job postings are collected, from the official public APIs these platforms provide for displaying jobs. No login, no personal profiles. Job descriptions are the companies' content, so use them in line with applicable law and the companies' rights.

### Questions or ideas?

Open an issue on the **Issues** tab. Requests for more ATS platforms are welcome.

### How to use it via API

You can run the Actor from the Apify Console, on a schedule, or from your own code. Get your API token in Apify Console → Settings → Integrations.

**Python**

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("digitalni.produkty.pro.zivot/ats-jobs").call(run_input={
    "companies": [
        "https://boards.greenhouse.io/airbnb",
        "ramp"
    ]
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

**JavaScript / Node.js**

```js
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });
const run = await client.actor('digitalni.produkty.pro.zivot/ats-jobs').call({
    "companies": [
        "https://boards.greenhouse.io/airbnb",
        "ramp"
    ]
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

### Integrations and AI agents

- Export results as **JSON, CSV, Excel, XML or HTML**, or open them directly in **Google Sheets**.
- Connect to **Make, Zapier, n8n, Slack, Google Drive, Airbyte** or any **webhook** to get job listings from company career sites on Greenhouse, Lever, Ashby, SmartRecruiters, Recruitee and Personio into your workflow automatically.
- Use it from **AI agents and LLM apps** (Claude, ChatGPT, Cursor, LangChain…) through the **Apify MCP server**: the agent can call this Actor as a tool.
- **Schedule** runs (hourly, daily, weekly) to keep data fresh without any code.

### FAQ

**How much does it cost?**
$1.50 per 1,000 job listings. Tracking 50 companies with ~40 open roles each costs about $3 per full run.

**Where does the data come from?**
From the official public job board APIs that these ATS providers offer for publishing jobs, not from scraping HTML.

**Can I get only new jobs?**
Yes. Turn on new-job monitoring and schedule the Actor. Each run returns only listings it has not seen before.

**I only know the company name. Will it work?**
Often yes. The Actor tries to auto-detect which ATS a company uses from its name or careers page.

### More tools from the same developer

All tools with code examples: [github.com/Phenixik/apify-actors](https://github.com/Phenixik/apify-actors)

- [Sitemap URL Extractor](https://apify.com/digitalni.produkty.pro.zivot/sitemap-url-extractor): every URL from a website's sitemaps
- [Broken Link Checker](https://apify.com/digitalni.produkty.pro.zivot/broken-link-checker): find 404s and dead links on your site
- [PageSpeed & Lighthouse Audit](https://apify.com/digitalni.produkty.pro.zivot/pagespeed-audit): bulk Core Web Vitals and SEO scores
- [Website Screenshot](https://apify.com/digitalni.produkty.pro.zivot/website-screenshot): full-page, mobile and PDF screenshots
- [Domain WHOIS & DNS Lookup](https://apify.com/digitalni.produkty.pro.zivot/domain-whois-lookup): expiry, DNS, SPF/DMARC and SSL for many domains
- [PDF Text Extractor](https://apify.com/digitalni.produkty.pro.zivot/pdf-text-extractor): text, Markdown and RAG chunks from PDFs
- [AI Image Upscaler](https://apify.com/digitalni.produkty.pro.zivot/ai-image-upscaler): 4x Real-ESRGAN upscaling, no GPU
- [RSS Feed Reader & Monitor](https://apify.com/digitalni.produkty.pro.zivot/rss-feed-reader): only-new-items feed monitoring
- [App Store Reviews](https://apify.com/digitalni.produkty.pro.zivot/app-store-reviews): iOS reviews from 50+ countries

# Actor input Schema

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

One per line. Paste a careers page link (boards.greenhouse.io/airbnb, jobs.lever.co/palantir, jobs.ashbyhq.com/ramp, careers.smartrecruiters.com/BoschGroup, bunq.recruitee.com, personio.jobs.personio.de) or just a company name like "ramp" and the ATS is detected automatically. You can also write "lever:netflix".

## `titleKeywords` (type: `array`):

Keep only jobs whose title contains at least one of these words, e.g. engineer, data, sales. Empty = all jobs.

## `excludeKeywords` (type: `array`):

Drop jobs whose title contains any of these words, e.g. intern, senior.

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

Keep only jobs in these places, matched against city, country and all job locations, e.g. London, Germany, US. Add "remote" to also keep remote jobs.

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

Keep only jobs in matching departments or teams, e.g. Engineering, Marketing.

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

Keep only jobs marked as remote.

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

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

## `onlyNewJobs` (type: `boolean`):

Return only jobs that were not returned by earlier runs with the same monitor name. Schedule the Actor daily to get a feed of new postings. The first run returns all current jobs.

## `monitorName` (type: `string`):

Separate name for each list you monitor, so their histories do not mix.

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

Add the full job description as clean text.

## `includeDescriptionHtml` (type: `boolean`):

Also add the original HTML of the description.

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

Safety limit per company.

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

Safety limit for the whole run.

## Actor input object example

```json
{
  "companies": [
    "https://boards.greenhouse.io/airbnb",
    "https://jobs.lever.co/palantir",
    "ramp"
  ],
  "remoteOnly": false,
  "postedWithinDays": 0,
  "onlyNewJobs": false,
  "monitorName": "default",
  "includeDescription": true,
  "includeDescriptionHtml": false,
  "maxJobsPerCompany": 1000,
  "maxJobs": 10000
}
```

# Actor output Schema

## `jobs` (type: `string`):

Title, company, locations, remote, department, employment type, salary, dates, links and description.

## `summary` (type: `string`):

Which ATS was found for each company and how many jobs were saved.

# 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": [
        "https://boards.greenhouse.io/airbnb",
        "https://jobs.lever.co/palantir",
        "ramp"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("digitalni.produkty.pro.zivot/ats-jobs").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": [
        "https://boards.greenhouse.io/airbnb",
        "https://jobs.lever.co/palantir",
        "ramp",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("digitalni.produkty.pro.zivot/ats-jobs").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": [
    "https://boards.greenhouse.io/airbnb",
    "https://jobs.lever.co/palantir",
    "ramp"
  ]
}' |
apify call digitalni.produkty.pro.zivot/ats-jobs --silent --output-dataset

```

## MCP server setup

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

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/55bjQaLQfhd9JaETw/builds/MOxpwW2PBl60hUnWG/openapi.json
