# InfoJobs Job Scraper — Spain Jobs & Salary (`crawloop/infojobs-jobs-scraper`) Actor

InfoJobs Job Scraper for Spain: search InfoJobs.net by keyword, province, category, or start URLs. Export title, employer, city, contract, remote/hybrid, EUR salary, and descriptions as JSON.

- **URL**: https://apify.com/crawloop/infojobs-jobs-scraper.md
- **Developed by:** [Andrej Kiva](https://apify.com/crawloop) (community)
- **Categories:** Jobs, Lead generation, AI
- **Features:** Limited permissions
- **Stats:** 15 total users, 5 monthly users, 99.4% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.99 / 1,000 job listings

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

## InfoJobs Job Scraper — Spain Jobs & Salary

> **Disclaimer:** Unofficial tool — not affiliated with, sponsored by, or endorsed by InfoJobs / Adevinta or its affiliates. Data is read from publicly accessible pages only. No login. You are responsible for complying with applicable law (including GDPR where personal data appears) and the site’s terms. No warranty on accuracy or availability. Provided for informational and research use.

**InfoJobs scraper** for Spain’s largest job board (**InfoJobs.net** / **ofertas de empleo**). A practical **InfoJobs API alternative** and **Spain jobs scraper**: search by **keyword**, **province**, **category**, **teletrabajo** filters, or paste **listing start URLs**. Export **title**, **employer**, **city**, **contrato** (indefinido / temporal), **jornada**, **remote / hybrid / on-site**, **EUR salary (min/max + YEAR/MONTH/HOUR)**, **full description**, and **job URLs** as **JSON**, **CSV**, or **Excel** via fast **HTTP** — **no headless browser** and **no login**. Scrape InfoJobs with **Python**, **Node.js**, **cURL**, or **Apify MCP** / AI assistants.

Ideal for **Spanish job-board aggregation**, **salary benchmarking**, **teletrabajo / híbrido tracking**, **recruiting intelligence**, and **employer lead generation** across Madrid, Barcelona, Valencia, Andalucía, and nationwide.

| Actor | Focus |
| :--- | :--- |
| InfoJobs Job Scraper ◄── you are here | InfoJobs.net Spain job listings |
| [France Travail Scraper](https://apify.com/crawloop/france-travail-scraper) | Public France Travail job offers |
| [Welcome to the Jungle Jobs Scraper](https://apify.com/crawloop/welcome-to-the-jungle-jobs-scraper) | French and European startup job listings |
| [LinkedIn Jobs Scraper](https://apify.com/crawloop/linkedin-jobs-scraper) | Public LinkedIn job listings |
| [Upwork Jobs Scraper](https://apify.com/crawloop/upwork-jobs-scraper) | Freelance job listings and monitor |
| [Seek Jobs Scraper](https://apify.com/crawloop/seek-jobs-scraper) | Australia and New Zealand jobs |
| [Stepstone Jobs Scraper](https://apify.com/crawloop/stepstone-jobs-scraper) | DACH commercial job board |
| [Arbeitsagentur Jobs Scraper](https://apify.com/crawloop/arbeitsagentur-jobs-scraper) | Germany BA Jobsuche |
| [Glassdoor Scraper](https://apify.com/crawloop/glassdoor-scraper) | Employer reviews, salaries, and jobs |
| [Naukri Jobs Scraper](https://apify.com/crawloop/naukri-jobs-scraper) | India’s largest job board (Naukri.com) |
| [Foundit Jobs Scraper](https://apify.com/crawloop/foundit-jobs-scraper) | Foundit.in / Monster India job listings |

### When to use this Actor

- You need an **InfoJobs scraper** / **InfoJobs.net scraper** / **Spain jobs scraper** that returns structured JSON
- You want **keyword + province + category + InfoJobs filters** without maintaining your own crawler
- You need **EUR salary with YEAR/MONTH/HOUR period**, **contract**, **teleworking**, and **full description** as first-class fields
- You want to scrape InfoJobs with **Python**, **Node.js**, or **MCP** and export a dataset
- You run a **daily monitor** and only want **new offer codes** billed

### When not to use this Actor

- **Resume/CV database or candidate profiles** — this Actor reads public job/employer listings only and does not collect resumes.
- **Non-Spanish InfoJobs sites** — this Actor covers **infojobs.net** (Spain). InfoJobs Italy has shut down
- **Guaranteed emails or phones** — public listing cards rarely include direct contacts
- **Login-walled apply-form automation** — public search data only
- **Historical archives** — currently listed jobs only
- **DACH job boards** — use [Stepstone Jobs Scraper](https://apify.com/crawloop/stepstone-jobs-scraper) or [Arbeitsagentur Jobs Scraper](https://apify.com/crawloop/arbeitsagentur-jobs-scraper)

### Key Features

- **Keyword + province + category** — `position`, optional extra keywords, all 52 Spanish provinces (bilingual names), 21 InfoJobs categories
- **Start URL parsing** — paste `/ofertas-trabajo/madrid`, `/ofertas-trabajo/informatica-telecomunicaciones`, filtered query strings, or a single offer URL (`/of-i…`; the Actor pages search until that offer code is found)
- **Native InfoJobs filters** — teleworking (remote / hybrid / on-site), contract type, freshness (24h / 7d / 15d), sort, executive, jobs abroad
- **Structured salary** — EUR min/max plus `salaryPeriod` (`YEAR` / `MONTH` / `HOUR`) and gross/net when InfoJobs discloses a band — never a fake zero
- **Full description on the card** — no extra detail request; turn the field off only to shrink exports
- **HTTP JSON path** — Chrome TLS impersonation against InfoJobs’ public search JSON; 256 MB, no Playwright
- **Datacenter-friendly** — search API does not require a proxy in testing; leave proxy off unless you see blocks
- **Monitor mode** — named Key-Value store of seen offer codes; later scheduled runs emit only new jobs
- **Deduplicated offer codes** across pages, keywords, and multi-province runs
- **MCP / AI ready** — call from assistants via Apify MCP

### Use Cases

| Use case | What you get |
| :--- | :--- |
| **Job aggregation** | Fresh InfoJobs.net openings into a board / search index |
| **Salary benchmarking** | Disclosed EUR bands with pay period so yearly and monthly figures are not mixed |
| **Remote / hybrid tracking** | `workMode` + `teleworking` from the employer’s own facet, not a keyword guess |
| **Recruiting intelligence** | Who is hiring, contract mix, executive flag, competitor vacancies |
| **Employer lead gen** | Company name, profile URL, and logo for firms with open roles |
| **Daily “what’s new”** | `monitorMode` on a schedule — pay only for new offer codes |

### Quick Start

**Keyword + province:**

```json
{
  "position": "python",
  "location": "Madrid",
  "maxItems": 50,
  "sinceDate": "_7_DAYS",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

**Category browse + remote filter:**

```json
{
  "categorySlug": "informatica-telecomunicaciones",
  "location": "Barcelona",
  "workMode": "remote-hybrid",
  "maxItems": 100
}
```

**Listing start URL (filters in the query string are applied):**

```json
{
  "startUrls": [
    { "url": "https://www.infojobs.net/ofertas-trabajo?keyword=desarrollador&provinceIds=33&teleworkingIds=2&sinceDate=_7_DAYS&sortBy=PUBLICATION_DATE" }
  ],
  "maxItems": 100
}
```

### Input

| Field | Type | Description |
| :--- | :--- | :--- |
| `position` | string | Free-text keyword (e.g. `python`, `desarrollador`). Empty = province/category browse |
| `searchKeywords` | string\[] | Extra keyword queries, merged and deduplicated |
| `location` | string | Spanish province, or a well-known city mapped to its province (`Madrid`, `Getafe`, `Vigo`) |
| `locations` | string\[] | Extra provinces/cities, combined into one filter |
| `categorySlug` | enum | One of InfoJobs’ 21 top-level categories |
| `startUrls` | request list | Search or offer URLs |
| `workMode` | enum | Remote / hybrid / on-site / remote-or-hybrid |
| `contractType` | enum | InfoJobs contract facet |
| `sinceDate` | enum | `ANY`, last 24 hours, 7 days, or 15 days |
| `sortBy` | enum | Relevance (needs a keyword) or newest first |
| `companyName` | string | Employer substring filter |
| `salaryMin` | integer | Keep disclosed salaries at or above this EUR amount |
| `executiveOnly` | boolean | Executive segment only |
| `includeJobDescription` | boolean | Keep card description (on by default; no extra request) |
| `maxItems` / `maxPages` | integer | Caps (~20 jobs per page) |
| `monitorMode` | boolean | Charge only new offer codes after the baseline run |
| `proxyConfiguration` | object | Optional; default is no proxy |

### Output

One dataset row per job. Field names match the Jobs suite (camelCase).

| Field | Type | Description |
| :--- | :--- | :--- |
| `jobId` | string | Stable InfoJobs offer code (join key; ignore tracking params on `url`) |
| `title` | string | Listing title |
| `employer` | string | Hiring company |
| `employerUrl` / `employerLogoUrl` | string | Public company profile and logo |
| `city` / `location` | string | City shown on the card |
| `workMode` / `teleworking` / `workFromHome` | string / string / boolean | `remote` / `hybrid` / `office` plus original label |
| `contractType` / `workday` | string | e.g. Contrato indefinido, Jornada completa |
| `salaryNote` / `salaryMin` / `salaryMax` | string / integer | EUR when disclosed |
| `salaryPeriod` / `salaryType` | string | `YEAR` / `MONTH` / `HOUR` and GROSS/NET |
| `executive` / `featured` | boolean | Executive segment / promoted card |
| `description` | string | Full search-card description |
| `url` | string | Job page |
| `publishedAt` / `scrapedAt` | string | ISO-8601 UTC |

```json
{
  "source": "infojobs",
  "jobId": "bc8296fbb94a69a99c4da55574971e",
  "url": "https://www.infojobs.net/madrid/full-stack-developer-angular-python-java-ia-generativa-remoto/of-ibc8296fbb94a69a99c4da55574971e",
  "title": "Full Stack Developer (Angular + Python + Java) | IA Generativa - Remoto",
  "employer": "eXperience Ingeniería y Servicios",
  "city": "Madrid",
  "workMode": "remote",
  "teleworking": "Solo teletrabajo",
  "workFromHome": true,
  "contractType": "Contrato indefinido",
  "workday": "Jornada completa",
  "salaryMin": 36000,
  "salaryMax": 45000,
  "salaryPeriod": "YEAR",
  "salaryCurrency": "EUR",
  "salaryType": "GROSS",
  "salaryConfidential": false,
  "executive": false,
  "publishedAt": "2026-08-14T09:40:42Z"
}
```

### Integration examples

#### Node.js

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('crawloop/infojobs-jobs-scraper').call({
  position: 'python',
  location: 'Madrid',
  maxItems: 50,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.slice(0, 5));
```

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient(token)
run = client.actor("crawloop/infojobs-jobs-scraper").call(
    run_input={
        "position": "python",
        "location": "Madrid",
        "maxItems": 50,
    }
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item.get("title"), item.get("employer"), item.get("salaryNote"), item.get("url"))
```

#### cURL

```bash
curl "https://api.apify.com/v2/acts/crawloop~infojobs-jobs-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"position":"python","location":"Madrid","maxItems":50}'
```

### MCP and AI assistants

Use this Actor from AI tools via [Apify MCP](https://docs.apify.com/platform/integrations/mcp). Connect your Apify account, then call `crawloop/infojobs-jobs-scraper`.

Example prompts:

- "Run InfoJobs Jobs Scraper for python in Madrid, max 50, and return title, employer, salaryNote, workMode, url as JSON"
- "Scrape InfoJobs IT jobs in Barcelona posted in the last 7 days that are remote or hybrid"
- "Pull InfoJobs desarrollador openings in Madrid, then run Glassdoor Scraper for the top hiring employers"
- "Monitor InfoJobs python jobs in Madrid daily and return only new offer codes"

### Suite next step

InfoJobs is Spain’s high-volume general board (contract + teleworking + EUR salary on the card). For Australia and New Zealand, run [Seek Jobs Scraper](https://apify.com/crawloop/seek-jobs-scraper). For DACH commercial listings run [Stepstone Jobs Scraper](https://apify.com/crawloop/stepstone-jobs-scraper) next. For Germany’s public Jobsuche feed use [Arbeitsagentur Jobs Scraper](https://apify.com/crawloop/arbeitsagentur-jobs-scraper). For employer reviews and interview intel, use [Glassdoor Scraper](https://apify.com/crawloop/glassdoor-scraper).

### FAQ

**Is this an official InfoJobs API?**\
No. It calls the same public search JSON the website uses and returns structured dataset rows — a practical **InfoJobs API alternative** for pipelines. You do not need InfoJobs developer credentials.

**Can I paste an InfoJobs search URL?**\
Yes — `startUrls` accepts `/ofertas-trabajo`, province/category semantic paths, filtered query strings (`provinceIds`, `teleworkingIds`, `sinceDate`, `sortBy`), and individual offer URLs (`/of-i…`). Offer URLs are resolved by paging the public search until that offer code appears — they do not need to sit on page 1.

**Does InfoJobs require login?**\
No for public search results and listing cards. Personalized “my applications” feeds are not used.

**Do I need a residential proxy?**\
Usually not. InfoJobs’ search JSON is unauthenticated and worked over datacenter connections in testing. Leave `proxyConfiguration` off. Enable a proxy only if you start seeing HTTP 403/429 blocks.

**Is salary always present?**\
No. Many posters hide pay. `salaryConfidential: true` flags those rows. Numeric EUR fields appear only when the employer published a band. Always read `salaryPeriod` before comparing two numbers — 2,500 can be monthly while 27,000 is yearly.

**Does the Actor cover InfoJobs Italy?**\
No. InfoJobs.it is shut down. This Actor is **infojobs.net** (Spain) only.

**What is monitor mode?**\
With `monitorMode: true`, seen offer codes are stored in a named Key-Value store. The first run is the baseline (all matches are new). Later scheduled runs push and charge only codes not seen before.

**Can I export JSON, CSV, or Excel?**\
Yes — every run writes a dataset you can download as JSON / CSV / Excel, or pull with the Apify API, Python/Node clients, or MCP.

**Can I scrape InfoJobs with Python or Node.js?**\
Yes. Use the Apify client examples above, the REST API, or Apify MCP. Every run writes a dataset you can download as JSON, CSV, or Excel.

**How many jobs per search?**\
InfoJobs paginates about 20 jobs per page and caps a single search around 60k ofertas. Split nationwide sweeps by province or category.

### Related Actors

| Actor | Focus |
| :--- | :--- |
| InfoJobs Jobs Scraper ◄── you are here | InfoJobs.net Spain jobs |
| [France Travail Scraper](https://apify.com/crawloop/france-travail-scraper) | Public France Travail job offers |
| [Welcome to the Jungle Jobs Scraper](https://apify.com/crawloop/welcome-to-the-jungle-jobs-scraper) | French and European startup job listings |
| [LinkedIn Jobs Scraper](https://apify.com/crawloop/linkedin-jobs-scraper) | Public LinkedIn job listings |
| [Upwork Jobs Scraper](https://apify.com/crawloop/upwork-jobs-scraper) | Freelance job listings and monitor |
| [Seek Jobs Scraper](https://apify.com/crawloop/seek-jobs-scraper) | Australia and New Zealand jobs |
| [Stepstone Jobs Scraper](https://apify.com/crawloop/stepstone-jobs-scraper) | DACH job listings |
| [Arbeitsagentur Jobs Scraper](https://apify.com/crawloop/arbeitsagentur-jobs-scraper) | Germany BA Jobsuche |
| [Glassdoor Scraper](https://apify.com/crawloop/glassdoor-scraper) | Reviews, salaries, interviews, jobs |
| [Naukri Jobs Scraper](https://apify.com/crawloop/naukri-jobs-scraper) | Naukri.com India jobs |
| [Foundit Jobs Scraper](https://apify.com/crawloop/foundit-jobs-scraper) | Foundit.in / Monster India |

# Actor input Schema

## `position` (type: `string`):

Free-text job search (e.g. python, desarrollador, comercial, enfermero). Leave empty to browse a province or category.

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

Optional extra keyword queries. Each keyword is searched separately; results are merged and deduplicated by offer code.

## `location` (type: `string`):

Spanish province (Madrid, Barcelona, Valencia, Málaga…) or a well-known city mapped to that province (Getafe, Vigo, Cartagena). Unknown names are ignored — they are not sent as city IDs. Comma-separated provinces are combined into one filter. Bilingual names work (València, Bizkaia, Gipuzkoa).

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

Optional extra provinces or cities. Combined with Location into one multi-province search (not a cartesian product).

## `categorySlug` (type: `string`):

InfoJobs top-level job category. Combined with keyword if both are set.

## `startUrls` (type: `array`):

Optional InfoJobs search or offer URLs. Query filters (provinceIds, categoryIds, teleworkingIds, contractTypeIds, sinceDate, sortBy) are parsed automatically. Semantic paths such as /ofertas-trabajo/madrid or /ofertas-trabajo/informatica-telecomunicaciones also work. Individual /of-i… offer URLs are resolved by paging search until that offer code is found.

## `workMode` (type: `string`):

InfoJobs teleworking facet.

## `contractType` (type: `string`):

InfoJobs contract-type facet.

## `sinceDate` (type: `string`):

InfoJobs freshness window. Only ANY, last 24 hours, 7 days and 15 days are supported by the site.

## `sortBy` (type: `string`):

Relevance only applies when a keyword is set. Empty = relevance with keyword, otherwise newest first.

## `companyName` (type: `string`):

Optional case-insensitive substring match on the employer name (applied after search).

## `salaryMin` (type: `integer`):

Keep only offers whose disclosed salary max (or min) is at least this amount. Offers without a salary are dropped when this filter is set. Compare YEAR / MONTH / HOUR via salaryPeriod.

## `executiveOnly` (type: `boolean`):

Keep only InfoJobs Executive-segment postings.

## `onlyForeignCountry` (type: `boolean`):

Search InfoJobs listings flagged as outside Spain.

## `includeJobDescription` (type: `boolean`):

Keep the full description already present on the search card. No extra request. Turn off to shrink CSV/Excel exports.

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

Maximum job rows to collect across all searches. 0 = unlimited (subject to maxPages). One InfoJobs search tops out around 60k offers.

## `maxPages` (type: `integer`):

Safety cap on InfoJobs pagination (~20 jobs per page).

## `monitorMode` (type: `boolean`):

On a schedule, push and charge only offer codes not seen in a previous run. First run delivers the full match set (baseline). Pair with an Apify Schedule and a stable monitorStoreName.

## `monitorStoreName` (type: `string`):

Named Key-Value store for seen offer codes across scheduled runs. Use a distinct name per watch (e.g. python-madrid vs comercial-barcelona).

## `resetMonitorState` (type: `boolean`):

Clear the seen-job cache before this run (next run becomes a new baseline).

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

Leave proxy off. InfoJobs search JSON is public; datacenter is enough in testing. Enable a proxy only if you see HTTP 403/429.

## Actor input object example

```json
{
  "position": "python",
  "location": "Madrid",
  "categorySlug": "",
  "startUrls": [
    {
      "url": "https://www.infojobs.net/ofertas-trabajo/madrid?keyword=python"
    }
  ],
  "workMode": "",
  "contractType": "",
  "sinceDate": "",
  "sortBy": "",
  "executiveOnly": false,
  "onlyForeignCountry": false,
  "includeJobDescription": true,
  "maxItems": 100,
  "maxPages": 20,
  "monitorMode": false,
  "monitorStoreName": "infojobs-jobs-monitor",
  "resetMonitorState": false,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

Default dataset items.

# 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 = {
    "position": "python",
    "location": "Madrid",
    "startUrls": [
        {
            "url": "https://www.infojobs.net/ofertas-trabajo/madrid?keyword=python"
        }
    ],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawloop/infojobs-jobs-scraper").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 = {
    "position": "python",
    "location": "Madrid",
    "startUrls": [{ "url": "https://www.infojobs.net/ofertas-trabajo/madrid?keyword=python" }],
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("crawloop/infojobs-jobs-scraper").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 '{
  "position": "python",
  "location": "Madrid",
  "startUrls": [
    {
      "url": "https://www.infojobs.net/ofertas-trabajo/madrid?keyword=python"
    }
  ],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call crawloop/infojobs-jobs-scraper --silent --output-dataset

```

## MCP server setup

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

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/1MbybG8TUxmjqfCE4/builds/JZn7eSblyNRRVw30d/openapi.json
