# Ats Jobs API (`jobo.world/ats-jobs-api`) Actor

Search for jobs directly from 75+ ATS platforms (Greenhouse, Lever, Ashby, Workday, iCIMS, Taleo, SuccessFactors, and dozens more). Supports advanced filters for skills, companies, salary, work model, employment type, and experience level. Zero ghost jobs, direct company sources.

- **URL**: https://apify.com/jobo.world/ats-jobs-api.md
- **Developed by:** [Enrico](https://apify.com/jobo.world) (community)
- **Categories:** Jobs, Developer tools, Automation
- **Stats:** 341 total users, 75 monthly users, 100.0% runs succeeded, 12 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $1.30 / 1,000 jobs

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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 API | Search Jobs Across 75+ ATS Platforms in One Call

Search **job listings** across **75+ ATS platforms** — Greenhouse, Lever, Ashby, Workday, iCIMS, Taleo, SuccessFactors, Workable, BambooHR, Personio, SmartRecruiters, and dozens more — in a single normalized response. Open the actor on Apify, hit **Try for free**, and run with the default input (`queries: ["Software Engineer", "Product Manager"]`). Use it to build job boards, power AI agents, run market research, or feed an HR tech product.

[![Run on Apify](https://img.shields.io/badge/Run%20on-Apify-blue)](https://apify.com/jobo.world/ats-jobs-api)
[![Service Status](https://img.shields.io/badge/Service%20Status-jobo.world%2Fstatus-brightgreen)](https://jobo.world/status)

---

### What can ATS Jobs API do?

- Query **75+ ATS platforms** at once with one normalized schema
- Filter by **work model, experience level, salary range, skills, and companies**
- **De-duplicate** the same role across sources before results return
- Exclude noise with **negative-keyword syntax** (prefix any query token with `-`)
- **Optionally** attach the full company profile — industries, funding, leadership, ratings, tech stack, H1B history
- Run on Apify with **scheduling, monitoring, and webhooks**, and integrate with **Zapier, Make, Slack, or HTTP**
- Download results as **JSON, CSV, or XLSX**

---

### Supported ATS platforms (75+)

| Category | Platforms |
|----------|-----------|
| **Tech / startup** | `greenhouse`, `lever`, `ashby`, `workable`, `polymer`, `rippling`, `gem`, `kula`, `joincom` |
| **Enterprise HCM** | `workday`, `successfactors`, `taleo`, `oraclecloud`, `csod`, `dayforce`, `kronos`, `ultipro`, `saashr`, `paycom`, `paycor`, `paylocity`, `adpmyjobs`, `adpworkforcenow`, `isolved`, `pageup`, `trinet`, `hibob` |
| **SMB / mid-market** | `bamboohr`, `breezy`, `jazzhr`, `personio`, `recruitee`, `smartrecruiters`, `freshteam`, `jobscore`, `recooty`, `zohorecruit`, `manatal`, `hireology`, `hirehive`, `hiringthing`, `homerun`, `gusto`, `onshift` |
| **AI / talent experience** | `eightfold`, `phenompeople`, `paradox` |
| **Specialty / public sector / other** | `acquiretm`, `applicantpro`, `applicantstack`, `applitrack`, `careerplug`, `careerpuck`, `comeet`, `deel`, `dover`, `fountain`, `gohire`, `governmentjobs`, `harri`, `hirebridge`, `hrmdirect`, `hrsmart`, `icims`, `joblinkapply`, `jobvite`, `peopleadmin`, `peoplematter`, `pinpoint`, `rival`, `talnet`, `teamtailor`, `trakstar`, `ttcportals`, `werecruit` |

Leave `sources` empty to use the full 75+ provider set. Set it to a subset (e.g. `["greenhouse", "lever", "ashby"]`) to scope a run.

---

### Input

Configure the actor on the **Input** tab in the Apify UI. Every field is optional; leaving them empty returns the broadest possible result set.

#### Search

The core of every run. `queries` accepts up to **5** titles or keywords (OR-ed together); adding more rarely helps — narrow with filters instead.

| Parameter | Type | Description |
|-----------|------|-------------|
| `queries` | Array (≤5) | Job titles or keywords. Multiple values are OR-ed. Prefix any entry with `-` to exclude (`["Software Engineer", "-staff"]`). |
| `locations` | Array | Cities, regions, or countries. Geocoded server-side for accurate matching. |
| `sources` | Array | ATS platforms to scope to. Leave empty for all 75+. |

#### Filters

Faceted filters that narrow the result set. Salary filters work in USD; jobs without a disclosed salary are excluded when either is set.

| Parameter | Type | Description |
|-----------|------|-------------|
| `work_models` | Array | `remote`, `hybrid`, `onsite`. |
| `employment_types` | Array | `full-time`, `part-time`, `contract`, `internship`, `freelance`, `temporary`. |
| `experience_levels` | Array | `intern`, `entry`, `mid`, `senior`, `lead`, `executive`. |
| `skills_include` | Array | Only return jobs requiring ANY of these skills. Matched against AI-extracted qualifications. |
| `skills_exclude` | Array | Exclude jobs requiring ANY of these skills. |
| `companies_include` | Array | Only return jobs from these company names. |
| `companies_exclude` | Array | Exclude jobs from these companies. |
| `min_salary_usd` | Integer | Minimum annual USD salary. |
| `max_salary_usd` | Integer | Maximum annual USD salary. |
| `posted_after` | String | ISO 8601 (`2025-01-01T00:00:00Z`) or relative (`7 days ago`, `1 month`). |

#### Company enrichment

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `include_company_details` | Boolean | `false` | **Off by default** — `company` carries a lightweight preview. Set `true` to replace it with the full enriched profile (companies are de-duplicated, fetched once per run; slower, more API calls). |

#### Pagination

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `page` | Integer | `1` | Page number (max **100**). |
| `page_size` | Integer | `50` | Results per page (max **100**). |

---

### Output

Each dataset row uses Jobo Connect's normalized, ATS-agnostic job shape; the `source` field tells you which of the 75+ ATSes the row came from. The full JSON Schema is on the **Dataset Schema** tab in the Apify UI.

The **Output** tab offers two views: *Job Listings* (jobs with a lightweight company preview) and *Company details* (the full company profile, populated when `include_company_details` is enabled).

#### Job fields

| Name | Description | Type |
|------|-------------|------|
| `id` | Stable Jobo job identifier | uuid |
| `title` | Raw job title | text |
| `normalized_title` | Canonical title for grouping across ATSes | text |
| `description` | Full job description, HTML stripped | text |
| `summary` | 2–3 sentence AI role recap | text |
| `listing_url` | Canonical listing URL on the source ATS | uri |
| `apply_url` | Direct apply URL | uri |
| `locations` | Array of `{location, city, region, country, latitude, longitude}` (geocoded when possible) | object[] |
| `compensation` | `{min, max, currency, period}` | object |
| `employment_type` | `full_time` / `part_time` / `contract` / `internship` / `freelance` / `temporary` | text |
| `workplace_type` | `remote` / `hybrid` / `onsite` | text |
| `experience_level` | `entry` / `mid` / `senior` / `lead` / `executive` | text |
| `qualifications` | `must_have` / `preferred`, each with typed `skills` (`{name, type: hard\|soft}`), `education`, `certifications` | object |
| `responsibilities` | Bullet list extracted from the description | text[] |
| `benefits` | Bullet list extracted from the description | text[] |
| `is_work_auth_required` | Work authorization required | bool |
| `is_h1b_sponsor` | Employer sponsors H1B | bool |
| `is_clearance_required` | Security clearance required | bool |
| `source` | ATS platform the job came from | text |
| `date_posted` | When the role was posted | timestamp |
| `valid_through` | Expiry timestamp (null in most cases) | timestamp |
| `created_at` | When Jobo first indexed the job | timestamp |
| `updated_at` | Last time Jobo refreshed the job | timestamp |

#### Company fields

`company` is always present. By default it carries only the **preview** fields below; set `include_company_details: true` to replace it with the full enriched profile.

**Preview (always present)**

| Name | Description | Type |
|------|-------------|------|
| `id` | Stable Jobo company identifier — use as your primary key | uuid |
| `name` | Trade name | text |
| `website` | Company marketing website | text |
| `logo_url` | Hosted logo URL | text |
| `summary` | Short company blurb | text |
| `industries` | Vertical industry labels | text[] |
| `details_url` | Link to `GET /api/companies/{id}` for the full profile | uri |

**Enriched (when `include_company_details` is on)**

| Name | Description | Type |
|------|-------------|------|
| `legal_name` | Registered legal entity name | text |
| `primary_industry` | Main industry label | text |
| `company_size` | Headcount band, e.g. `1001-5000` | text |
| `revenue` | Annual revenue band | text |
| `founding_year` | Year founded | text |
| `headquarters_location` | HQ city / region | text |
| `country_code` | HQ country code | text |
| `operating_status` | `active` / `closed` | text |
| `ipo_status` | `private` / `ipo` / `delisted` | text |
| `company_type` | `for_profit` / `non_profit` | text |
| `stock_symbol` | Ticker symbol | text |
| `stock_exchange` | Listing exchange | text |
| `funding_stage` | Latest funding stage | text |
| `total_funding` | Total funding raised | text |
| `investors` | Investor names | text[] |
| `funding_rounds` | Per-round detail (`investment_type`, `announced_on`, `raised_amount`, …) | object[] |
| `founders` | Founder names | text[] |
| `leadership` | `{name, title, linkedin_url, avatar_url}` | object[] |
| `ratings` | `{source, rating, url, review_count}` (Glassdoor, etc.) | object[] |
| `press_references` | `{url, posted_on, title, publisher}` | object[] |
| `h1b_annual_job_counts` | `{year, count}` H1B history | object[] |
| `technology_list` | Detected technologies | text[] |
| `tech_stack` | `{name, categories}` | object[] |
| `page_rank` | Domain authority score | number |
| `leadership_display` | Display tag — `"Name — Title"` | text[] |
| `ratings_display` | Display tag — `"Glassdoor 4.3 (2.1k)"` | text[] |
| `funding_display` | Display tag — `"Series F · $15.4B"` | text[] |

The complete company schema (every field) is on the **Dataset Schema** tab and at [docs.jobo.world/api-reference/companies/schema](https://docs.jobo.world/api-reference/companies/schema). Use `company.details_url` with your `X-Api-Key` to re-fetch a profile on demand.

---

### Quick-start input examples

**All ATSes, remote engineering roles**
```json
{
  "queries": ["Software Engineer"],
  "work_models": ["remote"],
  "page_size": 50
}
````

**Top three tech ATSes, senior+**

```json
{
  "queries": ["Backend Engineer"],
  "sources": ["greenhouse", "lever", "ashby"],
  "experience_levels": ["senior", "lead"],
  "page_size": 50
}
```

**Skills-filtered, US-only, $90k+**

```json
{
  "queries": ["Backend Engineer"],
  "skills_include": ["Go", "Kubernetes", "PostgreSQL"],
  "skills_exclude": ["PHP"],
  "locations": ["United States"],
  "min_salary_usd": 90000,
  "page_size": 100
}
```

**Negative-keyword filter**

```json
{
  "queries": ["Software Engineer", "-staff", "-principal"],
  "experience_levels": ["mid", "senior"],
  "page_size": 50
}
```

***

### Tips & advanced options

- **Pagination cap.** `page_size` maxes at 100 and `page` at 100, for up to 10,000 searchable rows. For bulk downloads (>10k rows) use **[ATS Jobs Feed](https://apify.com/jobo.world/ats-jobs-feed)** instead — it uses cursor pagination and pulls up to 1,000 rows per batch.
- **`source` field tells you the platform.** Each row carries `"source": "greenhouse"` (or whichever ATS) — useful for routing, analytics, or per-source weighting.
- **Scoping with `sources`.** Empty = all 75+ platforms. A subset narrows the search and usually speeds it up significantly.
- **`industries` empty for some companies.** Industries come from Jobo's enrichment pipeline; long-tail SMBs may show `industries: []`.
- **Geocoding is best-effort.** Loose strings like `"Remote"` or `"Worldwide"` won't geocode; the raw `location` string is always preserved.
- **Salary normalization.** All salary filters work in USD; source currencies (EUR, GBP, INR, etc.) are converted server-side using current FX.
- **One actor for everything.** Don't run separate single-ATS actors and merge results — this actor is built for cross-source queries with normalized output.

***

### Use cases

| Industry | Use case |
|----------|----------|
| **Job Boards** | Build cross-ATS aggregators with normalized data from every platform |
| **AI Agents** | Power career chatbots and résumé-matching agents with the broadest possible job dataset |
| **HR Tech** | Build market-intel dashboards across every ATS the market uses |
| **Recruiting** | Source candidates and roles regardless of which ATS the employer happens to use |
| **Salary Research** | Benchmark compensation across every major ATS and segment |
| **Market Research** | Track sector hiring velocity without per-ATS bias |

***

### Is it legal to scrape ATS job listings?

Our scrapers are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our scrapers, when used for ethical purposes by Apify users, are safe. However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

***

### FAQ

#### How many ATS platforms do you support?

**75+** — Greenhouse, Lever, Ashby, Workday, iCIMS, Taleo, SuccessFactors, Oracle Cloud, ADP, Paycom, Paylocity, Dayforce, UltiPro, isolved, Eightfold, Phenom People, BambooHR, Personio, SmartRecruiters, and many more. See the full list above.

#### Should I use this actor or one of the single-ATS actors?

Use **this actor** when you want broad coverage or compare jobs across multiple ATSes. Use a **single-ATS actor** (e.g. `bamboohr-jobs-scraper-api`) if you only ever care about one ATS — identical output, simpler input.

#### Should I use this actor or ATS Jobs Feed?

Use **ATS Jobs API** for filtered, paginated queries (job-board UIs, AI agents, real-time lookups). Use **[ATS Jobs Feed](https://apify.com/jobo.world/ats-jobs-feed)** for bulk download (data pipelines, full-inventory sync) — cursor pagination, 1,000 jobs per batch, built for high throughput.

#### How do I scope to a subset of ATSes?

Set `sources: ["greenhouse", "lever", "ashby"]` (or any subset of the 75+ supported platforms).

#### Are duplicates de-duped across sources?

Yes — Jobo Connect de-duplicates by (company + canonical title + listing URL) before returning results, so the same role posted on two ATSes won't appear twice.

#### Can I filter by salary?

Yes — `min_salary_usd` and `max_salary_usd`, normalized to USD server-side. Jobs without a disclosed salary are excluded when either filter is set.

#### How often is data updated?

Jobs are verified **daily** across every supported ATS. Expired listings are removed within 24 hours.

#### Where can I check if the Jobo API is up?

At **[jobo.world/status](https://jobo.world/status)** — the live status page for the Jobo Connect API behind this actor.

***

### Related actors

| Actor | Best for |
|-------|----------|
| **[ATS Jobs Feed](https://apify.com/jobo.world/ats-jobs-feed)** | Bulk download for data pipelines (cursor pagination, 1k/batch) |
| **[AI Deep Job Search](https://apify.com/jobo.world/ai-deep-job-search)** | AI-powered relevance scoring on top of this search |
| **[Workable Jobs Scraper](https://apify.com/jobo.world/workable-jobs-scraper-api)** | Global SMB + mid-market |
| **[Greenhouse Jobs Scraper](https://apify.com/jobo.world/greenhouse-jobs-scraper-api)** | US tech unicorns |
| **[Lever Jobs Scraper](https://apify.com/jobo.world/lever-jobs-scraper-api)** | VC-backed startups |
| **[Workday Jobs Scraper](https://apify.com/jobo.world/workday-jobs-scraper-api)** | Fortune 500 enterprises |
| **[Crunchbase Company Lookup](https://apify.com/jobo.world/crunchbase-company-lookup)** | Pair with `company.details_url` for funding / leadership data |

***

### Changelog

#### 2.2

- **Job description in the listing view.** The full `description` field now appears directly in the Job Listings view.
- **Company enrichment is opt-in.** `include_company_details` now defaults to off — the listing view carries a lightweight company preview, and the **Company details** view holds the full profile when enabled.

#### 2.1

- **Company enrichment (opt-in).** `include_company_details` replaces the lightweight preview with the full company profile — funding, leadership, ratings, tech stack, H1B sponsorship, acquisitions, investors, and more — fetched once per unique company. Off by default — enable it when you need company data.
- **New "Company details" output view**.

#### 2.0

- Expanded to **75+ ATS platforms**.
- Richer per-job shape: AI-extracted `qualifications` (typed hard/soft skills, education, certifications), `responsibilities[]`, `benefits[]`, `summary`, and `normalized_title`.
- Geocoded `locations[]` (resolved city / region / country / lat / lon).
- New filters: salary range (`min_salary_usd` / `max_salary_usd`), skills include/exclude, companies include/exclude, work model, experience level, employment type, and negative query syntax.
- Work-authorization signals: `is_work_auth_required`, `is_h1b_sponsor`, `is_clearance_required`.
- Existing inputs (`queries`, `locations`, `sources`, `posted_after`, `page`, `page_size`) are unchanged from v1.x.

***

### About Jobo

Jobo provides comprehensive job data infrastructure for developers and businesses. Our ATS Jobs Database powers job boards, AI agents, and HR tech platforms worldwide.

- **Website**: [jobo.world](https://jobo.world)
- **Enterprise API**: [jobo.world/enterprise](https://jobo.world/enterprise)
- **API status**: [jobo.world/status](https://jobo.world/status)
- **Support**: enrico@jobo.world

# Actor input Schema

## `queries` (type: `array`):

Job titles or keywords to search for. Multiple queries are OR'd together. Up to 5 keywords. Adding more rarely improves results — narrow your filters (skills, companies, locations) for better matches.

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

Cities, regions, or countries to filter by. The API performs server-side geocoding for accurate location matching.

## `sources` (type: `array`):

Filter by specific ATS platforms. Leave empty to search all 75+ platforms.

## `work_models` (type: `array`):

Filter by where the work is performed. Accepts: 'remote', 'hybrid', 'onsite'. Leave empty for all.

## `employment_types` (type: `array`):

Filter by employment type. Accepts: 'full-time', 'part-time', 'contract', 'internship', 'freelance', 'temporary'. Leave empty for all.

## `experience_levels` (type: `array`):

Filter by seniority. Accepts: 'intern', 'entry', 'mid', 'senior', 'lead', 'executive'. Leave empty for all.

## `skills_include` (type: `array`):

Only return jobs that require ANY of these skills (e.g., 'Python', 'React', 'AWS'). Matched case-insensitively against the job's extracted qualifications.

## `skills_exclude` (type: `array`):

Exclude jobs that require ANY of these skills. Useful for filtering out unwanted tech stacks.

## `companies_include` (type: `array`):

Only return jobs from these specific companies. Matched case-insensitively by company name.

## `companies_exclude` (type: `array`):

Exclude jobs from these companies. Useful for filtering out staffing agencies or companies you've already applied to.

## `min_salary_usd` (type: `integer`):

Minimum annual salary in USD. Jobs without salary data are excluded when this filter is set.

## `max_salary_usd` (type: `integer`):

Maximum annual salary in USD. Can be combined with min\_salary\_usd for a range.

## `posted_after` (type: `string`):

Only show jobs posted after this date. Accepts ISO 8601 dates (e.g., '2025-01-01T00:00:00Z') or relative strings (e.g., '7 days ago', '1 month').

## `page` (type: `integer`):

Page number for paginated results. Up to page 100.

## `page_size` (type: `integer`):

Number of results per page (max 100).

## `include_company_details` (type: `boolean`):

When enabled, replaces the lightweight company preview on each job with the fully enriched company profile (funding, leadership, ratings, tech stack, H1B stats, etc.) fetched from GET /api/companies/{id}. Companies are deduplicated, so each unique company is fetched only once per run. Slower and uses more API calls — leave off if you only need basic company info.

## Actor input object example

```json
{
  "queries": [
    "Software Engineer",
    "Product Manager"
  ],
  "locations": [
    "San Francisco",
    "New York",
    "Remote"
  ],
  "sources": [
    "greenhouse",
    "lever"
  ],
  "page": 1,
  "page_size": 50,
  "include_company_details": false
}
```

# Actor output Schema

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

No description

## `csv_export` (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 = {
    "queries": [
        "Software Engineer",
        "Product Manager"
    ],
    "locations": [
        "San Francisco",
        "New York",
        "Remote"
    ],
    "sources": [
        "greenhouse",
        "lever"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("jobo.world/ats-jobs-api").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 = {
    "queries": [
        "Software Engineer",
        "Product Manager",
    ],
    "locations": [
        "San Francisco",
        "New York",
        "Remote",
    ],
    "sources": [
        "greenhouse",
        "lever",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("jobo.world/ats-jobs-api").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 '{
  "queries": [
    "Software Engineer",
    "Product Manager"
  ],
  "locations": [
    "San Francisco",
    "New York",
    "Remote"
  ],
  "sources": [
    "greenhouse",
    "lever"
  ]
}' |
apify call jobo.world/ats-jobs-api --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Ats Jobs API",
        "description": "Search for jobs directly from 75+ ATS platforms (Greenhouse, Lever, Ashby, Workday, iCIMS, Taleo, SuccessFactors, and dozens more). Supports advanced filters for skills, companies, salary, work model, employment type, and experience level. Zero ghost jobs, direct company sources.",
        "version": "2.2",
        "x-build-id": "oxTFCcqDRXlB81ipx"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/jobo.world~ats-jobs-api/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-jobo.world-ats-jobs-api",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/jobo.world~ats-jobs-api/runs": {
            "post": {
                "operationId": "runs-sync-jobo.world-ats-jobs-api",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/jobo.world~ats-jobs-api/run-sync": {
            "post": {
                "operationId": "run-sync-jobo.world-ats-jobs-api",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "queries": {
                        "title": "Search Queries",
                        "maxItems": 5,
                        "type": "array",
                        "description": "Job titles or keywords to search for. Multiple queries are OR'd together. Up to 5 keywords. Adding more rarely improves results — narrow your filters (skills, companies, locations) for better matches.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "locations": {
                        "title": "Locations",
                        "type": "array",
                        "description": "Cities, regions, or countries to filter by. The API performs server-side geocoding for accurate location matching.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "sources": {
                        "title": "ATS Sources",
                        "type": "array",
                        "description": "Filter by specific ATS platforms. Leave empty to search all 75+ platforms.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "acquiretm",
                                "adpmyjobs",
                                "adpworkforcenow",
                                "applicantpro",
                                "applicantstack",
                                "applitrack",
                                "ashby",
                                "bamboohr",
                                "breezy",
                                "careerplug",
                                "careerpuck",
                                "comeet",
                                "csod",
                                "dayforce",
                                "deel",
                                "dover",
                                "eightfold",
                                "fountain",
                                "freshteam",
                                "gem",
                                "gohire",
                                "governmentjobs",
                                "greenhouse",
                                "gusto",
                                "harri",
                                "hibob",
                                "hirebridge",
                                "hirehive",
                                "hireology",
                                "hiringthing",
                                "homerun",
                                "hrmdirect",
                                "hrsmart",
                                "icims",
                                "isolved",
                                "jazzhr",
                                "joblinkapply",
                                "jobscore",
                                "jobvite",
                                "joincom",
                                "kronos",
                                "kula",
                                "lever",
                                "manatal",
                                "onshift",
                                "oraclecloud",
                                "pageup",
                                "paradox",
                                "paycom",
                                "paycor",
                                "paylocity",
                                "peopleadmin",
                                "peoplematter",
                                "personio",
                                "phenompeople",
                                "pinpoint",
                                "polymer",
                                "recooty",
                                "recruitee",
                                "rippling",
                                "rival",
                                "saashr",
                                "smartrecruiters",
                                "successfactors",
                                "taleo",
                                "talnet",
                                "teamtailor",
                                "trakstar",
                                "trinet",
                                "ttcportals",
                                "ultipro",
                                "werecruit",
                                "workable",
                                "workday",
                                "zohorecruit"
                            ]
                        }
                    },
                    "work_models": {
                        "title": "Work Model",
                        "type": "array",
                        "description": "Filter by where the work is performed. Accepts: 'remote', 'hybrid', 'onsite'. Leave empty for all.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "remote",
                                "hybrid",
                                "onsite"
                            ]
                        }
                    },
                    "employment_types": {
                        "title": "Employment Type",
                        "type": "array",
                        "description": "Filter by employment type. Accepts: 'full-time', 'part-time', 'contract', 'internship', 'freelance', 'temporary'. Leave empty for all.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "full-time",
                                "part-time",
                                "contract",
                                "internship",
                                "freelance",
                                "temporary"
                            ]
                        }
                    },
                    "experience_levels": {
                        "title": "Experience Level",
                        "type": "array",
                        "description": "Filter by seniority. Accepts: 'intern', 'entry', 'mid', 'senior', 'lead', 'executive'. Leave empty for all.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "intern",
                                "entry",
                                "mid",
                                "senior",
                                "lead",
                                "executive"
                            ]
                        }
                    },
                    "skills_include": {
                        "title": "Skills (Include)",
                        "type": "array",
                        "description": "Only return jobs that require ANY of these skills (e.g., 'Python', 'React', 'AWS'). Matched case-insensitively against the job's extracted qualifications.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "skills_exclude": {
                        "title": "Skills (Exclude)",
                        "type": "array",
                        "description": "Exclude jobs that require ANY of these skills. Useful for filtering out unwanted tech stacks.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "companies_include": {
                        "title": "Companies (Include)",
                        "type": "array",
                        "description": "Only return jobs from these specific companies. Matched case-insensitively by company name.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "companies_exclude": {
                        "title": "Companies (Exclude)",
                        "type": "array",
                        "description": "Exclude jobs from these companies. Useful for filtering out staffing agencies or companies you've already applied to.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "min_salary_usd": {
                        "title": "Minimum Salary (USD)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Minimum annual salary in USD. Jobs without salary data are excluded when this filter is set."
                    },
                    "max_salary_usd": {
                        "title": "Maximum Salary (USD)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum annual salary in USD. Can be combined with min_salary_usd for a range."
                    },
                    "posted_after": {
                        "title": "Posted After",
                        "type": "string",
                        "description": "Only show jobs posted after this date. Accepts ISO 8601 dates (e.g., '2025-01-01T00:00:00Z') or relative strings (e.g., '7 days ago', '1 month')."
                    },
                    "page": {
                        "title": "Page Number",
                        "minimum": 1,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Page number for paginated results. Up to page 100.",
                        "default": 1
                    },
                    "page_size": {
                        "title": "Page Size",
                        "minimum": 1,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Number of results per page (max 100).",
                        "default": 50
                    },
                    "include_company_details": {
                        "title": "Include full company details",
                        "type": "boolean",
                        "description": "When enabled, replaces the lightweight company preview on each job with the fully enriched company profile (funding, leadership, ratings, tech stack, H1B stats, etc.) fetched from GET /api/companies/{id}. Companies are deduplicated, so each unique company is fetched only once per run. Slower and uses more API calls — leave off if you only need basic company info.",
                        "default": false
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
