# ATS Jobs Feed: 350k+ Jobs from Greenhouse, Lever, Ashby (`best_apis/ats-jobs-feed`) Actor

- **URL**: https://apify.com/best_apis/ats-jobs-feed.md
- **Developed by:** [A Q](https://apify.com/best_apis) (community)
- **Categories:** Jobs, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## ATS Jobs Feed: 350k+ Jobs from Greenhouse, Lever, Ashby, Recruitee, Personio & SmartRecruiters

**ATS Jobs Feed** is a **pre-indexed, daily-refreshed database of open jobs from 12,000+ company career sites**. Instead of scraping live pages one by one, you query a ready-made index: filter by **keyword, country, remote, seniority, function, salary or company** and get clean JSON, CSV or Excel in **seconds**. It also tells you **which jobs were opened, closed or edited since yesterday** and gives you a **hiring signal per company**.

Covers **Greenhouse, Lever, Ashby, Recruitee, Personio and SmartRecruiters**, including many European employers. **$6 per 1,000 jobs.** No proxies, no browser, no waiting for crawls.

### What can this job data feed do?

- ⚡ **Instant results**: the crawl already happened. A 100-job query returns in a few seconds, even when the index holds 350,000+ open jobs.
- 🔎 **Rich filters**: keywords (title, department, company, skills), exclude words, country or city, remote / hybrid / on-site, seniority, job function, employment type, platform, company and **minimum salary**.
- 🏷️ **Structured fields that ATS pages don't give you**: normalized `country`, `seniority`, `function`, `workplace`, `skills`, `yearsExperience`, and salary converted to a yearly USD figure. Every derived field says where it came from in `tagSources`.
- 🔔 **Changes mode**: new, closed and edited jobs since the previous daily snapshot. Run it on a schedule to feed alerts, CRMs and job boards without re-reading the whole index.
- 🏢 **Companies mode**: one record per company with open roles, jobs posted in the last 7 / 30 days, top functions, countries and skills, remote share, median salary and a 7-day hiring trend. Built for sales prospecting and market research.
- 📝 **Descriptions your way**: none, truncated (default, 1,500 characters) or full text. E-mail addresses and phone numbers are removed.
- 🧭 **Honest freshness**: every record has `dataAsOf` and `snapshotId`, and `dataStale` turns true if a refresh was missed.

### Who is it for?

- **Job boards and aggregators** that need fresh, de-duplicated postings by niche or country.
- **Recruiters and staffing agencies** tracking who is hiring for what, right now.
- **Sales and revenue teams** using hiring as a buying signal ("20 new data roles at this company").
- **Analysts and investors** measuring hiring velocity, remote policy and pay transparency.
- **AI agents and automations** that need a fast, structured jobs API (works with the Apify API, Zapier, Make, n8n and the Apify MCP server).

### How to use it

1. Choose a **Mode**: `jobs`, `changes` or `companies`.
2. Set filters, for example keywords `data engineer`, location `Germany`, workplace `remote`.
3. Pick the **description** level and **Max items**.
4. Click **Start**, or call the Actor from the API and put it on a **schedule**.

Empty input returns the 100 newest software-engineering jobs, so you can see the format in seconds.

### Input

| Field | What it does |
|---|---|
| `mode` | `jobs` (default), `changes` or `companies` |
| `searchKeywords`, `excludeKeywords` | Terms matched against title, department, company and skills (any match). Companies mode matches the company name |
| `locations` | Country names or ISO codes (`Germany`, `DE`, `US`) or text in the location (`Berlin`, `Remote`) |
| `workplace`, `seniority`, `functions`, `employmentTypes`, `atsPlatforms` | Multi-select filters |
| `companies` | Company names or slugs (`stripe`, `greenhouse:stripe`) |
| `minSalaryUsd` | Only jobs with a published salary range whose top end reaches this yearly amount |
| `postedWithinDays` | Jobs mode: age window, default 30 (0 = any age). A narrow window is also the fastest |
| `changesSince`, `changeTypes` | Changes mode: date and `new` / `closed` / `changed` |
| `minOpenJobs` | Companies mode: minimum open roles |
| `descriptionMode`, `descriptionMaxChars` | `none`, `truncated` (default) or `full` |
| `includeAiOptOut` | Include Greenhouse postings flagged as opted out of AI use (off by default; their descriptions stay withheld) |
| `includeLowQuality` | Include boards flagged as spam-like or mass-repeated (off by default, see Data quality) |
| `maxItems` | Maximum records to return and pay for (default 100, up to 100,000) |

```json
{
  "mode": "jobs",
  "searchKeywords": ["data engineer", "machine learning"],
  "locations": ["Germany"],
  "workplace": ["remote", "hybrid"],
  "postedWithinDays": 14,
  "descriptionMode": "truncated",
  "maxItems": 500
}
```

### Output example

#### Job record (`mode: "jobs"`)

```json
{
  "id": "greenhouse:stripe:8238489",
  "ats": "greenhouse",
  "board": "stripe",
  "company": "Stripe",
  "title": "Engineering Manager, Self Serve Direct Onboarding",
  "jobUrl": "https://stripe.com/jobs/search?gh_jid=8238489",
  "applyUrl": "https://stripe.com/jobs/search?gh_jid=8238489",
  "location": "New York City, San Francisco, Seattle",
  "country": "US",
  "workplace": null,
  "employmentType": null,
  "department": "8216 Risk Onboarding and Trusted Users",
  "function": "engineering",
  "seniority": "manager",
  "yearsExperience": 4,
  "skills": [],
  "salaryMin": null,
  "salaryMax": null,
  "salaryCurrency": null,
  "salaryInterval": null,
  "salaryUsdYearMin": null,
  "salaryUsdYearMax": null,
  "salaryApproxFx": null,
  "postedAt": "2026-10-15T18:58:40Z",
  "firstSeen": "2026-10-16",
  "tagSources": {
    "seniority": "title",
    "function": "title"
  },
  "descriptionStatus": "ok",
  "descriptionChars": 4367,
  "qualityFlags": [],
  "description": "Who we are\n\nAbout Stripe\n\nStripe is a financial infrastructure platform for businesses. Millions of companies, from the world’s largest enterprises to the most ambitious startups, use Stripe to accept payments, grow their revenue, and accelerate new business opportunities. Our mission is to…",
  "snapshotId": "20261016-0005q",
  "dataAsOf": "2026-10-16T00:05:57Z",
  "dataStale": false
}
```

#### Change record (`mode: "changes"`)

```json
{
  "id": "greenhouse:stripe:8238489",
  "ats": "greenhouse",
  "board": "stripe",
  "company": "Stripe",
  "title": "Engineering Manager, Self Serve Direct Onboarding",
  "jobUrl": "https://stripe.com/jobs/search?gh_jid=8238489",
  "applyUrl": "https://stripe.com/jobs/search?gh_jid=8238489",
  "location": "New York City, San Francisco, Seattle",
  "country": "US",
  "workplace": null,
  "employmentType": null,
  "department": "8216 Risk Onboarding and Trusted Users",
  "function": "engineering",
  "seniority": "manager",
  "yearsExperience": 4,
  "skills": [],
  "salaryMin": null,
  "salaryMax": null,
  "salaryCurrency": null,
  "salaryInterval": null,
  "salaryUsdYearMin": null,
  "salaryUsdYearMax": null,
  "salaryApproxFx": null,
  "postedAt": "2026-10-15T18:58:40Z",
  "firstSeen": "2026-10-16",
  "tagSources": {
    "seniority": "title",
    "function": "title"
  },
  "descriptionStatus": "ok",
  "descriptionChars": 4367,
  "qualityFlags": [],
  "changeType": "new",
  "changedAt": "2026-10-16T00:05:57Z",
  "changedFields": [],
  "description": "Who we are\n\nAbout Stripe\n\nStripe is a financial infrastructure platform for businesses. Millions of companies, from the world’s largest enterprises to the most ambitious startups, use Stripe to accept payments, grow their revenue, and accelerate new business opportunities. Our mission is to…",
  "snapshotId": "20261016-0005q",
  "dataAsOf": "2026-10-16T00:05:57Z",
  "dataStale": false
}
```

#### Company hiring signal (`mode: "companies"`)

```json
{
  "id": "greenhouse:stripe",
  "company": "Stripe",
  "companyNameDerivedFromSlug": false,
  "ats": "greenhouse",
  "board": "stripe",
  "careersUrl": "https://stripe.com/jobs",
  "openJobs": 726,
  "openJobsIsLowerBound": null,
  "postedLast7d": 46,
  "postedLast30d": 261,
  "newSinceLastSnapshot": 2,
  "closedSinceLastSnapshot": 3,
  "openJobs7dAgo": null,
  "openJobsChange7d": null,
  "hiringTrend": null,
  "remoteShare": 0.16,
  "withSalaryShare": 0,
  "medianSalaryUsdYear": null,
  "topFunctions": [
    {
      "function": "engineering",
      "jobs": 196
    },
    {
      "function": "sales",
      "jobs": 136
    },
    {
      "function": "data",
      "jobs": 62
    }
  ],
  "topCountries": [
    {
      "country": "US",
      "jobs": 347
    },
    {
      "country": "IE",
      "jobs": 68
    },
    {
      "country": "SG",
      "jobs": 48
    }
  ],
  "topSkills": [
    {
      "skill": "sql",
      "jobs": 151
    },
    {
      "skill": "python",
      "jobs": 93
    },
    {
      "skill": "data science",
      "jobs": 82
    },
    {
      "skill": "java",
      "jobs": 67
    }
  ],
  "qualityFlags": [],
  "snapshotId": "20261016-0005q",
  "dataAsOf": "2026-10-16T00:05:57Z",
  "dataStale": false
}
```

Key fields: `qualityFlags` (empty for normal boards, see Data quality), `id` (`platform:board:jobId`, stable across days), `jobUrl` and `applyUrl` (the employer's own page), `postedAt` (UTC), `firstSeen` (first day our crawler saw the job), `salaryUsdYearMin/Max` (with `salaryApproxFx: true` when converted from another currency at approximate fixed rates), `descriptionStatus` (`ok`, `unavailable` or `withheld_ai_opt_out`).

### How much does it cost?

Pay per event. You only pay for what you get, and the **max cost per run** setting is respected exactly.

| Event | Price |
|---|---|
| Actor start | **$0.005** per run |
| Job record (`jobs` mode) | **$0.006** per job ($6 per 1,000) |
| Full job description (add-on) | **+$0.002** per job that has a description |
| Change record (`changes` mode) | **$0.004** per record ($4 per 1,000) |
| Company hiring signal (`companies` mode) | **$0.02** per company ($20 per 1,000) |

Example: 5,000 remote Germany jobs with truncated descriptions cost 5,000 × $0.006 + $0.005 = **$30.01**. A daily changes run returning 800 changes costs **about $3.20**.

### Data sources, coverage and freshness

- The index is rebuilt **once a day** from the **public job-board APIs** that Greenhouse, Lever, Ashby, Recruitee, Personio and SmartRecruiters publish so companies can show their jobs on their own sites. No logins, no paywalls, no candidate data.
- Coverage today: **12,000+ career sites and 350,000+ open jobs**. Workday, Workable and company-built career sites are not included. Boards we do not know about are not in the index, so use the sister Actor [Greenhouse, Lever & Ashby Jobs Scraper](https://apify.com/best_apis/ats-jobs-scraper) when you need one specific company live.
- SmartRecruiters and part of Personio expose descriptions only on request, so those jobs have `descriptionStatus: "unavailable"` and are never charged as full descriptions.
- Derived fields (seniority, function, workplace, skills, country) come from transparent rules, not from an AI guess. They are accurate for the large majority of jobs but not perfect: use `tagSources` to see how a value was derived. Country is empty when the location text is ambiguous.

### Data quality

Every board is scored at build time with simple, explainable rules, and the result is stored in `qualityFlags` on each job and company record:

- `spam_suspected`: a big board (500+ jobs) where one title makes up 40% or more of all postings, or a board that we reviewed by hand and found to be mass-posted or unrelated content.
- `repetitive_postings`: a big board (500+ jobs) with almost no distinct titles and templated descriptions, or 1,000+ jobs with at most 12% distinct titles. Typical examples are one posting per store or per region.
- `board_truncated`: we could not read the whole board because the platform limits how many jobs it lists. These boards stay in the results, but their `postedLast7d`, `postedLast30d`, `hiringTrend` and new/closed counts are left empty (`null`) and `openJobsIsLowerBound` is `true`, because a partial sample says nothing reliable about hiring speed. New and closed jobs on truncated boards are not reported in changes mode.

Boards flagged `spam_suspected` or `repetitive_postings` are **left out by default** (about 8% of the index). Set `includeLowQuality: true` to get them back. Small employers are never flagged. If your company was flagged by mistake, open an issue on the **Issues** tab and we will review it.

### Respecting employers

- Job descriptions belong to the employers. This Actor returns the posting together with the employer's own `jobUrl` and `applyUrl`, truncates descriptions by default and removes e-mail addresses and phone numbers.
- Greenhouse postings that carry an **AI opt-out flag** are excluded by default and their descriptions are never included.
- **Takedown requests**: if you represent an employer and want your company or a posting removed, open an issue on the **Issues** tab with the career-site URL. Blocklisted boards and jobs disappear from results within 48 hours (usually much sooner).
- This Actor is not affiliated with Greenhouse, Lever, Ashby, Recruitee, Personio or SmartRecruiters. All trademarks belong to their owners.

### How to use the API (Python, JavaScript, cURL)

Every run is available through the [Apify API](https://docs.apify.com/api/v2). Get your API token in **Apify Console → Settings → API & Integrations**.

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("best_apis/ats-jobs-feed").call(run_input={"mode": "jobs", "searchKeywords": ["data engineer"], "locations": ["Germany"], "workplace": ["remote"], "maxItems": 100})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

#### JavaScript / Node.js

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

const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('best_apis/ats-jobs-feed').call({"mode": "jobs", "searchKeywords": ["data engineer"], "locations": ["Germany"], "workplace": ["remote"], "maxItems": 100});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

#### cURL (run and get jobs in one request)

```bash
curl -X POST "https://api.apify.com/v2/acts/best_apis~ats-jobs-feed/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"mode": "jobs", "searchKeywords": ["data engineer"], "locations": ["Germany"], "workplace": ["remote"], "maxItems": 100}'
```

#### Integrations

Connect results to **Google Sheets, Slack, email, Zapier, Make, n8n, Airbyte, webhooks** or AI agents through the **Apify MCP server**. Use **Schedules** in Apify Console to run it hourly, daily or weekly. Export any dataset as **JSON, CSV, Excel, XML or HTML**.

### FAQ

**Is it legal?** This Actor only returns public job postings that employers publish through their ATS's public job-board feeds, with attribution links back to the employer. It contains no candidate or personal data. Laws differ by country and use case (for example copyright on full descriptions, and rules on commercial reuse), so check your own use and use `descriptionMode: "truncated"` or `"none"` if you only need the listings. Read more in Apify's [guide to the legality of web scraping](https://blog.apify.com/is-web-scraping-legal/).

**How fresh is the data?** Refreshed once a day. Each record has `dataAsOf`. If a refresh is missed for more than 36 hours the records are flagged `dataStale: true`.

**Why is a company I know missing?** It may use Workday, Workable or its own careers site, or its board slug is not in our index yet. Open an issue with the career-site URL and we will check it.

**What is the difference to the Greenhouse, Lever & Ashby Jobs Scraper?** That Actor scrapes the boards you give it live. This one answers questions across 12,000+ boards at once, from a daily index, much faster and with change tracking.

**Why are some big employers missing from the results?** Boards that post the same few titles thousands of times (for example one posting per store) are treated as low quality and hidden by default. Set `includeLowQuality: true` to include them.

**Why did my query return fewer jobs than expected?** Jobs mode only looks at jobs posted in the last `postedWithinDays` days (30 by default). Increase it or set it to 0.

**Can I get new jobs only?** Yes: use `mode: "changes"` with `changeTypes: ["new"]` on a daily schedule.

### Related Actors

- [Greenhouse, Lever & Ashby Jobs Scraper](https://apify.com/best_apis/ats-jobs-scraper): live per-company career-page scraper.
- [Government Tenders Scraper](https://apify.com/best_apis/government-tenders-scraper): UK, EU TED and SAM.gov tenders with daily alerts.
- [Federal Register API](https://apify.com/best_apis/federal-register-api): US rules, notices and presidential documents.

Questions, bugs or feature requests? Open an issue on the **Issues** tab. We usually reply within 24 hours.

# Actor input Schema

## `mode` (type: `string`):

**jobs**: search open jobs. **changes**: jobs that were opened, closed or edited since the previous daily snapshot(s). **companies**: one hiring-signal record per company (open roles, 7/30-day activity, top functions, countries and skills).

## `searchKeywords` (type: `array`):

Match jobs whose title, department, company name or extracted skills contain **any** of these terms (case-insensitive). In companies mode they match the company name. Leave empty for no keyword filter.

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

Drop jobs whose title or department contains any of these terms.

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

Match any: a country name or ISO code (`Germany`, `DE`, `US`) or text inside the job's location (`Berlin`, `Remote`).

## `workplace` (type: `array`):

Only these work arrangements.

## `seniority` (type: `array`):

Only these levels (derived from the title; jobs without a recognisable level never match when this is set).

## `functions` (type: `array`):

Only these job families (derived from the title or department).

## `employmentTypes` (type: `array`):

Only these contract types.

## `atsPlatforms` (type: `array`):

Only jobs from these career-site platforms. Leave empty for all six.

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

Only these companies. Use the company name or its career-site slug (`stripe`, `Notion`, `greenhouse:stripe`). Companies that are not in the index are reported in the log.

## `minSalaryUsd` (type: `integer`):

Only jobs that publish a salary range whose top end is at least this much per year. Non-USD and hourly/monthly pay is converted with approximate fixed rates (see `salaryApproxFx`).

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

Jobs mode: only jobs posted in the last N days (0 = any age). Reading stops as soon as `Max items` is reached, so a narrow window is also the fastest.

## `changesSince` (type: `string`):

Changes mode: include the daily change files created on or after this date (`YYYY-MM-DD`). Empty = only the latest daily change file. Up to 7 days of history are kept.

## `changeTypes` (type: `array`):

Changes mode: which events to return. Empty = all.

## `minOpenJobs` (type: `integer`):

Companies mode: only companies with at least this many open jobs.

## `descriptionMode` (type: `string`):

**none**: no description. **truncated**: first N characters (billed as a normal job record). **full**: complete text, billed as an additional `Full job description` event for every job that has one. Descriptions are plain text with e-mails and phone numbers removed.

## `descriptionMaxChars` (type: `integer`):

Characters kept in `truncated` mode.

## `includeAiOptOut` (type: `boolean`):

Some Greenhouse employers flag postings as opted out of AI processing. They are excluded by default; if included, their descriptions are still withheld.

## `includeLowQuality` (type: `boolean`):

By default the feed leaves out boards that look like spam or mass-repeated postings (for example one title posted thousands of times, or one posting per store). Turn this on to include them; every record then carries `qualityFlags` explaining why.

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

Maximum records to return (and pay for). Also respects the run's maximum charge.

## Actor input object example

```json
{
  "mode": "jobs",
  "searchKeywords": [
    "data engineer",
    "machine learning"
  ],
  "excludeKeywords": [
    "intern",
    "manager"
  ],
  "locations": [
    "Germany",
    "London"
  ],
  "companies": [
    "stripe",
    "notion"
  ],
  "minSalaryUsd": 120000,
  "postedWithinDays": 30,
  "minOpenJobs": 1,
  "descriptionMode": "truncated",
  "descriptionMaxChars": 1500,
  "includeAiOptOut": false,
  "includeLowQuality": false,
  "maxItems": 100
}
```

# Actor output Schema

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

No description

## `companies` (type: `string`):

No description

## `full` (type: `string`):

No description

## `summary` (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 = {
    "mode": "jobs",
    "searchKeywords": [
        "software engineer"
    ],
    "postedWithinDays": 30,
    "descriptionMode": "truncated",
    "maxItems": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("best_apis/ats-jobs-feed").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 = {
    "mode": "jobs",
    "searchKeywords": ["software engineer"],
    "postedWithinDays": 30,
    "descriptionMode": "truncated",
    "maxItems": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("best_apis/ats-jobs-feed").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 '{
  "mode": "jobs",
  "searchKeywords": [
    "software engineer"
  ],
  "postedWithinDays": 30,
  "descriptionMode": "truncated",
  "maxItems": 100
}' |
apify call best_apis/ats-jobs-feed --silent --output-dataset

```

## MCP server setup

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

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/d9Pyqxdswd0oxjJ0n/builds/j7l2jdM8dX22M0O2O/openapi.json
