# Ats Jobs API (`crawl_craft/ats-jobs-api`) Actor

Hiring data spread across hundreds of career pages? Paste Greenhouse, Lever or Ashby board links and get every open job as clean JSON: title, salary, location, skills, requirements, benefits and company profile. Ready for job boards and AI. No API key.

- **URL**: https://apify.com/crawl_craft/ats-jobs-api.md
- **Developed by:** [Crawl Craft](https://apify.com/crawl_craft) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

### What is Ats Jobs API?

Ats Jobs API is an Apify Actor and job board scraper that reads Greenhouse, Lever and Ashby boards and returns the jobs they list in one consistent format. Each job comes with title, location, salary when published, skills, requirements, benefits and an optional full company profile. You need no API key.

- **One format for three platforms:** paste Greenhouse, Lever and Ashby links together and get the same fields back for every job.
- **Filters before saving:** narrow jobs by keywords, locations, work model, employment type, experience level, skills, companies, salary and posting dates.
- **Company profile on every job:** legal name, founding year, headquarters, size, industries, leadership, investors, tech stack and more, where available.
- **Ready to export:** download results as JSON, CSV or Excel, or read them through the Apify API.

To start, click **Try for free**, paste one or more job-board links and press **Start**.

### What data can you extract from job boards?

Ats Jobs API saves one dataset item per job, so you can export job postings to CSV, JSON or Excel. The table lists every field of the job record. Example values come from the Actor's dataset schema.

| Field | Description | Example |
|---|---|---|
| `id` | Unique job ID: platform, company slug and the board's own job ID. | `greenhouse:stripe:8172487` |
| `title` | Job title as published on the board. | `Abuse Investigator` |
| `normalized_title` | Job title with commas and extra spaces removed. | `Software Engineer Level 3` |
| `company` | Company profile: name, website, board, logo, social links, headquarters, size, industries, people, funding, stock, tech stack, press, H-1B filings and the source of every filled field (`field_coverage`). | — |
| `description` | Full job description as plain text (or HTML when Keep description HTML is on). | — |
| `summary` | Short summary taken from the posting's own opening text. | — |
| `listing_url` | Link to the job posting. | `https://stripe.com/jobs/search?gh_jid=8172487` |
| `apply_url` | Link to the application form (the job link when there is no separate form). | — |
| `locations` | Every location of the job: original text plus city, region, country, latitude and longitude when resolved. | — |
| `compensation` | Published salary range: min, max, currency and period. Null when the board does not publish one. | — |
| `employment_type` | full-time, part-time, contract, internship, freelance or temporary. | `full-time` |
| `workplace_type` | remote, hybrid or onsite when stated. | `remote` |
| `experience_level` | intern, entry, mid, senior, lead or executive. | `mid` |
| `source` | Job-board platform the job came from: greenhouse, lever or ashby. | `greenhouse` |
| `created_at` | When the job was first published (ISO 8601). | `2026-09-03T13:30:34-04:00` |
| `updated_at` | When the job was last updated (ISO 8601); the publish date when the board gives no update date. | — |
| `date_posted` | Posting date (ISO 8601). | — |
| `valid_through` | Closing date. The supported boards do not publish one, so it is null. | — |
| `qualifications` | Must-have and preferred education, certifications and skills (each skill typed hard or soft), read from the posting. | — |
| `responsibilities` | Responsibility bullets from the posting. | — |
| `benefits` | Benefit bullets from the posting. | — |
| `is_work_auth_required` | True when the posting requires existing work authorization; null when it does not say. | — |
| `is_h1b_sponsor` | True when the posting offers visa sponsorship, false when it rules it out, null when it does not say. | — |
| `is_clearance_required` | True when the posting asks for a security clearance; null when it does not say. | — |
| `department` | Department or team group published by the board. | — |
| `office` | Office name (Greenhouse boards). | — |
| `team` | Team name (Lever and Ashby boards). | — |
| `_scrape_meta` | Run ID and the time the job was saved. | — |

### Use cases for job postings data

Use job posting data from company boards for projects like these.

- **Build a job board:** combine `title`, `locations`, `employment_type`, `apply_url` and `description` from many companies into your own job listing site.
- **Collect job market data:** compare `department`, `experience_level` and `workplace_type` across companies to see what the job market asks for.
- **Analyze salary data from job postings:** read the `compensation` range (min, max, currency, period) where a board publishes it.
- **Find visa sponsorship jobs:** read the `is_h1b_sponsor` output field to see which postings offer visa sponsorship, and check the company's H-1B filing history in the `company` profile where available. The Actor has no input filter for it, so filter the exported data yourself.
- **Track company hiring:** pull all open jobs of a list of companies and compare their teams, locations and skills.
- **Competitor hiring analysis:** compare the job openings of two rival companies side by side.
- **Source recruiting data:** match candidates to jobs with `qualifications`, `responsibilities` and `benefits`.
- **Feed apps and AI tools:** use clean, structured job records as input for your own product through the Apify API.

### How to scrape job postings

Follow these steps to scrape job postings from company boards:

1. Create a free Apify account.
2. Open Ats Jobs API in Apify Console.
3. Add the links of the company job boards you want, one per line, under **Job-board links** (`urls`), for example `https://boards.greenhouse.io/stripe` or `greenhouse:stripe`.
4. Optionally add filters such as **Job titles or keywords** (`queries`), **Locations** (`locations`) or **Work model** (`work_models`).
5. Click **Start** and wait for the run to finish.
6. Download the dataset as JSON, CSV or Excel.

#### How to find job board links for Greenhouse, Lever and Ashby

Paste the board link of the company. A job link from the board also works. To add a company name and website, write them after the link and separate the parts with `|`, for example `https://jobs.ashbyhq.com/ramp | Ramp | ramp.com`. A website gives a richer company profile for Lever and Ashby boards.

- **Greenhouse:** scrape Greenhouse jobs from board links like `https://boards.greenhouse.io/stripe`.
- **Lever:** scrape Lever jobs from board links like `https://jobs.lever.co/palantir`.
- **Ashby:** scrape Ashby jobs from board links like `https://jobs.ashbyhq.com/ramp`.

#### How to extract job listings to Excel

Run the Actor, open the **Storage** tab, choose the dataset and export it as Excel. Use the same export for CSV and JSON.

#### How to filter jobs by skills, level or salary

Use `skills_include` and `skills_exclude` for skills, `experience_levels` for seniority, and `min_salary_usd` and `max_salary_usd` for pay. Salary values are compared as published, with no currency or pay-period conversion, and jobs without salary data are left out when a salary filter is set.

### How much does it cost to scrape job boards?

Ats Jobs API uses the pay-per-event model: you pay **$3 per 1,000 results on the Free plan and less on paid plans**, and each saved job is one `main_result` event. Each run also has a small start charge of $0.00005 (the Actor Start event). Free plan runs are limited to 10 jobs per run. See the Pricing tab for current rates.

| Apify plan | Price per 1,000 results |
|---|---|
| Free | $3 |
| Bronze | $2.7 |
| Silver | $2.4 |
| Gold / Platinum / Diamond | $2 |

For example, on the Free plan 1,000 saved jobs cost $3. Set **Maximum jobs per company** (`max_jobs_per_company`) to cap the jobs saved from every board, or **Maximum jobs** (`max_items`) for a total. When Maximum jobs per company is set, Maximum jobs is ignored.

### ⬇️ Input

Ats Jobs API needs only one input: **Job-board links** (`urls`), one Greenhouse, Lever or Ashby company board per line. All filters are optional. See the Input tab for every option.

![Ats Jobs API input form with job-board links for the job board scraper](IMAGE_URL_PLACEHOLDER "ats-jobs-api-input-form.png")

Example input (values from the input schema prefill and defaults):

```json
{
  "urls": [
    "https://boards.greenhouse.io/stripe",
    "https://jobs.lever.co/palantir | Palantir | palantir.com",
    "https://jobs.ashbyhq.com/ramp | Ramp | ramp.com"
  ],
  "search_description": true,
  "max_jobs_per_company": 10,
  "dedupe_jobs": true,
  "include_company_details": true
}
```

💡 When **Maximum jobs per company** is set, up to that many jobs are saved from every board and **Maximum jobs** is ignored.

#### Company details options

Turn parts of the company profile off for faster runs: `enrich_company_website`, `enrich_company_knowledge`, `enrich_company_filings`, `enrich_company_press` and `enrich_company_h1b`. Set `include_company_details` to false to keep only basic company info. `geocode_locations` turns job and headquarters locations into city, region, country and coordinates.

### ⬆️ Output

The scraped results are shown as a dataset in the **Storage** tab. The table view is for convenience and doesn't show **all the fields**.

![Ats Jobs API output table with job posting data from job boards](IMAGE_URL_PLACEHOLDER "ats-jobs-api-output-table.png")

You can export the dataset as JSON, CSV or Excel, and view it in sections: job overview, salary and location, skills and requirements, responsibilities and benefits, description, company profile, company links, leadership and funding, tech stack and H-1B, and run details. A separate run summary record lists counts for the run.

Example output (only fields that have an example value in the dataset schema; values are examples, not a captured run):

```json
{
  "id": "greenhouse:stripe:8172487",
  "title": "Abuse Investigator",
  "listing_url": "https://stripe.com/jobs/search?gh_jid=8172487",
  "employment_type": "full-time",
  "workplace_type": "remote",
  "experience_level": "mid",
  "source": "greenhouse",
  "created_at": "2026-09-03T13:30:34-04:00"
}
```

Every real item also contains the other fields listed in the table above, including the `company` profile.

### Limitations and error handling

- Ats Jobs API is not a job scraper for other job sites. It supports three ATS job boards: Greenhouse, Lever and Ashby.
- It returns jobs the boards publish publicly. It does not return private data.
- Free plan runs save at most 10 jobs per run. On paid plans, **Maximum jobs per company** (10 by default) caps every board. If you clear it, **Maximum jobs** sets the total, and 150 jobs are saved when you leave that empty too.
- Salaries are mostly published on Ashby boards.
- Jobs whose board does not state a work model are left out when you set the **Work model** filter.
- `valid_through` is always null because the supported boards do not publish a closing date.
- Company profile fields are filled where data is available, so some can be empty.
- If no link is usable, the run stops and asks for links like `https://boards.greenhouse.io/stripe`. Links that cannot be used are skipped, and the log shows why.
- If a job board cannot be loaded, the run continues with the other boards. The run summary lists counts for boards read, jobs found, filtered and saved, and any non-fatal issues.

### Integrating Ats Jobs API with other apps

Ats Jobs API runs on Apify, so you can start it from your code and read its dataset like a job postings API. The dataset can be read as a whole or by section using the output views. Open the API tab of this Actor for ready-made code samples.

### More Apify Actors by crawl_craft

These Actors cover other data sources and are not job-data tools. Use them when your project needs that data.

| Actor | What it extracts | When to use it |
|---|---|---|
| [TikTok Video Scraper](https://apify.com/crawl_craft/tiktok-video-scraper) | Captions, hashtags, views, likes, comments, shares, author and music data from TikTok videos | Use it when you need TikTok video data instead of job postings. |
| [TikTok User Search Scraper](https://apify.com/crawl_craft/tiktok-user-search-scraper) | TikTok profiles found by keyword search | Use it when you need to find TikTok creators in bulk. |
| [TikTok Transcript Scraper](https://apify.com/crawl_craft/tiktok-transcript-scraper) | Timestamped TikTok transcripts and subtitles | Use it when you need the spoken text of TikTok videos. |

### Is it legal to scrape job boards?

Ats Jobs API only extracts job data that companies have made publicly available on their Greenhouse, Lever or Ashby job boards. Results may still contain personal data, for example names of founders or leaders in the company profile. Only collect personal data with a legitimate reason, consider GDPR (Regulation (EU) 2016/679) and the terms of each platform, and consult a lawyer if you are unsure. Read Apify's posts on [the legality of web scraping](https://blog.apify.com/is-web-scraping-legal/) and [ethical web scraping](https://blog.apify.com/what-is-ethical-web-scraping-and-how-do-you-do-it/).

### ❓ FAQ

#### How much does Ats Jobs API cost?

It costs $3 per 1,000 results on the Free plan and less on paid plans, with pay-per-event pricing. See the Pricing tab for current rates.

#### Do I need an API key or account on Greenhouse, Lever or Ashby?

No. You need no API key, and job scraping needs no account on Greenhouse, Lever or Ashby. You only need an Apify account to run the Actor.

#### How many jobs can I get?

Free plan runs save up to 10 jobs per run. On paid plans, **Maximum jobs per company** (10 by default) caps every board. If you clear it, **Maximum jobs** sets the total, and 150 jobs are saved when you leave that empty too. **Maximum jobs** is ignored while **Maximum jobs per company** is set.

#### Can I scrape private data?

No. Ats Jobs API returns only data published on the company job boards.

#### Do I need proxies?

No. The Actor works without a proxy. The **Proxy** field is optional.

#### How to find H1B sponsor jobs?

Run the Actor on the boards of companies you are interested in and look at the `is_h1b_sponsor` field. It is true when the posting offers visa sponsorship, false when it rules it out and null when the posting does not say. The `company` profile can also include H-1B filing history where available.

#### Can I get a job board API without writing code?

Yes. Ats Jobs API returns structured jobs from Greenhouse, Lever and Ashby. Add links in Apify Console, click **Start** and export the results.

#### Can I use it instead of a Greenhouse jobs API?

Yes, for public boards. Add the Greenhouse board links of the companies you follow and run the Actor. Lever and Ashby boards work the same way in the same run.

#### Can I use it to build a job board?

Yes. Ats Jobs API returns job board data such as `title`, `locations`, `apply_url` and `description` for every job, so you can load it into your own job board.

#### Can I search jobs by keyword or exclude words?

Yes. Add words to **Job titles or keywords** (`queries`) to keep jobs that mention any of them. Start a word with `-` to leave out jobs that contain it, and wrap a phrase in double quotes to match it as one phrase.

### Your feedback

Found a bug or want a new feature? Open an issue in the Issues tab of this Actor. For custom solutions, write to hello.crawlcraft@gmail.com.

# Actor input Schema

## `urls` (type: `array`):

One company job board per line. Supported: Greenhouse (boards.greenhouse.io/stripe or job-boards.greenhouse.io/stripe), Lever (jobs.lever.co/palantir) and Ashby (jobs.ashbyhq.com/ramp). A job link from the board also works, and so does the short form greenhouse:stripe. Optionally add the company name and website after the link, separated by |, for example: https://jobs.ashbyhq.com/ramp | Ramp | ramp.com. Adding the website gives a richer company profile for Lever and Ashby boards. Use Bulk edit to paste many links at once.

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

Optional. The same as the links above, as a JSON list of objects with platform (greenhouse, lever or ashby), token (the company slug from the board link), and optional name and website. Example: \[{"name": "Linear", "platform": "ashby", "token": "linear", "website": "linear.app"}]. Entries are added after the links; duplicates are skipped.

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

Keep only jobs that mention ANY of these words (case-insensitive). By default the title and the full description are searched. Start a word with - to leave out jobs that contain it (for example -intern). Wrap a phrase in double quotes to match it as one phrase. Leave empty to keep every job.

## `search_description` (type: `boolean`):

On (default): your keywords are matched against the job title and the full job description. Off: keywords are matched against the job title only, for tighter results.

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

Keep only jobs whose location text contains ANY of these words, for example London, Remote, New York or Germany (case-insensitive).

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

Keep only remote, hybrid or on-site jobs. Jobs whose board does not state a work model are left out when this filter is set. Leave empty for all.

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

Keep only these employment types. Leave empty for all.

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

Keep only these seniority levels, read from the job title or the years of experience the posting asks for. Leave empty for all.

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

Keep only jobs whose listed skills include ANY of these, for example Python, React or AWS (case-insensitive, whole skill name).

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

Leave out jobs whose listed skills include ANY of these.

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

Keep only jobs from these companies. Each entry can be the company name, its board slug or its website domain (for example stripe.com). Whole-name match, case-insensitive.

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

Leave out jobs from these companies (name, board slug or website domain).

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

Keep only jobs whose published salary reaches at least this amount. Amounts are compared as published, with no currency or pay-period conversion. Jobs without salary data are left out when a salary filter is set. Salaries are mostly published on Ashby boards.

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

Keep only jobs whose published salary starts at or below this amount, compared as published (no currency or pay-period conversion). Can be combined with the minimum for a range.

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

Keep only jobs first published after this date. Pick a date, or a relative value such as 7 days or 1 month.

## `posted_before` (type: `string`):

Keep only jobs first published before this date. Pick a date, or a relative value such as 1 day.

## `max_items` (type: `integer`):

Total number of jobs to save, taken in the order of your boards. Free plan users are limited to 10 jobs per run.

## `max_jobs_per_company` (type: `integer`):

Optional. When set, up to this many jobs are saved from EVERY board and Maximum jobs is ignored (the free-plan cap of 10 jobs per run still applies).

## `dedupe_jobs` (type: `boolean`):

Save each job only once, even when the same board is listed twice.

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

On (default): every job carries a rich company profile (legal name, founding year, headquarters, size, industries, founders and leadership, investors, stock ticker, social links, logo, tech stack, recent press and H-1B visa filing history where available). Off: only basic company info, which is faster.

## `enrich_company_website` (type: `boolean`):

Read the company's own website for its description, social links, logo, phone, email and tech stack.

## `enrich_company_knowledge` (type: `boolean`):

Add public facts: legal name, founding year, headquarters, industries, founders, CEO, investors, products, subsidiaries, stock ticker and a short company description.

## `enrich_company_filings` (type: `boolean`):

For US-listed companies: ticker, exchange, industry codes, phone and headquarters address from official filings.

## `enrich_company_press` (type: `boolean`):

Add up to 10 recent news articles that name the company.

## `enrich_company_h1b` (type: `boolean`):

Add the company's H-1B visa filings per year and the most common job titles in them.

## `geocode_locations` (type: `boolean`):

Turn job and headquarters locations into city, region, country and coordinates.

## `geocode_delay_seconds` (type: `number`):

Seconds to wait between two location lookups (at least 1).

## `contact_email` (type: `string`):

Optional. Some free public data sources ask callers to share a contact address. If you add yours, it is sent with the Actor's requests; leave empty to use a generic one.

## `include_html` (type: `boolean`):

Off (default): job descriptions are clean plain text. On: descriptions keep the original HTML formatting.

## `concurrency` (type: `integer`):

How many boards and company lookups run at the same time.

## `max_retries` (type: `integer`):

How many times a request is tried before it is given up.

## `request_delay` (type: `number`):

Optional pause in seconds after each job board is read.

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

Optional. Choose the proxy settings for your run. Leave the default if you are unsure.

## Actor input object example

```json
{
  "urls": [
    "https://boards.greenhouse.io/stripe",
    "https://jobs.lever.co/palantir | Palantir | palantir.com",
    "https://jobs.ashbyhq.com/ramp | Ramp | ramp.com"
  ],
  "queries": [],
  "search_description": true,
  "max_jobs_per_company": 10,
  "dedupe_jobs": true,
  "include_company_details": true,
  "enrich_company_website": true,
  "enrich_company_knowledge": true,
  "enrich_company_filings": true,
  "enrich_company_press": true,
  "enrich_company_h1b": true,
  "geocode_locations": true,
  "geocode_delay_seconds": 1.1,
  "include_html": false,
  "concurrency": 5,
  "max_retries": 3,
  "request_delay": 0,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

Title, company, location, employment type, work model, level, department, platform, posting date and links.

## `salary_location` (type: `string`):

Published salary range and every resolved location (city, region, country, coordinates).

## `skills_requirements` (type: `string`):

Must-have and nice-to-have skills, education, certifications, visa and clearance signals.

## `responsibilities_benefits` (type: `string`):

Short summary, responsibilities and benefits of each job.

## `description` (type: `string`):

Full job description.

## `company_profile` (type: `string`):

Logo, legal name, website, founding year, size, industries, headquarters, stock ticker and status.

## `company_links` (type: `string`):

Careers page, social profiles, phone and email.

## `company_people_funding` (type: `string`):

Founders, leaders, investors, funding stage and related organizations.

## `company_tech_h1b` (type: `string`):

Technologies, H-1B visa filings and recent press.

## `run_details` (type: `string`):

Job IDs, publish and update dates, run ID and save time.

## `allData` (type: `string`):

Every field of every job, including the full company profile.

## `runSummary` (type: `string`):

Counts for the run: boards read, jobs found, filtered, saved, companies profiled, locations resolved and any non-fatal issues.

# 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 = {
    "urls": [
        "https://boards.greenhouse.io/stripe",
        "https://jobs.lever.co/palantir | Palantir | palantir.com",
        "https://jobs.ashbyhq.com/ramp | Ramp | ramp.com"
    ],
    "queries": [],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawl_craft/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 = {
    "urls": [
        "https://boards.greenhouse.io/stripe",
        "https://jobs.lever.co/palantir | Palantir | palantir.com",
        "https://jobs.ashbyhq.com/ramp | Ramp | ramp.com",
    ],
    "queries": [],
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("crawl_craft/ats-jobs-api").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 '{
  "urls": [
    "https://boards.greenhouse.io/stripe",
    "https://jobs.lever.co/palantir | Palantir | palantir.com",
    "https://jobs.ashbyhq.com/ramp | Ramp | ramp.com"
  ],
  "queries": [],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call crawl_craft/ats-jobs-api --silent --output-dataset

```

## MCP server setup

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

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/20h4eHjqTp9P8rLdK/builds/EHOqp5LABHKuHLRu5/openapi.json
