# Freelancermap IT Projects & Freelancer Finder (`xyrelith-data/freelancermap-it-projects-and-freelancer-finder`) Actor

Search freelancermap.com IT freelance projects and freelancer profiles by category, workplace type, contract type, location, and skills, or fetch full detail by URL.

- **URL**: https://apify.com/xyrelith-data/freelancermap-it-projects-and-freelancer-finder.md
- **Developed by:** [Xyrelith Data](https://apify.com/xyrelith-data) (community)
- **Categories:** Jobs, Lead generation, Automation
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.49 / 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

## Freelancermap Projects & Freelancer Profiles

Scrape live IT project listings and freelancer profiles from **freelancermap.com**, one of Europe's largest freelance marketplaces. Search by keyword, skill, category, country, city, contract type and workplace setup, or paste project/profile URLs for a full detail export. Everything runs over plain HTTP with no account, cookies or proxy setup.

### Highlights

- **Four modes** — project search, freelancer search, project detail and freelancer profile detail.
- **Multiple queries per run** — `searchQueries` accepts a list and merges the results.
- **Paste any freelancermap URL** — search URLs keep their filters; direct project/profile URLs become detail records.
- **Far more than one results page** — anonymous freelancermap only serves page 1 per search, so this actor splits each query across the site's own facets (contract type, workplace, category, country, industry, date, language, rates, availability) and de-duplicates the merged pool.
- **Full project rows** — description, skills, industry, contract and remote share, budget amount/currency, start and duration, workload, status flags, dates, reference number, company link, poster/company block and locations.
- **Full freelancer rows** — rate and currency, experience, skills, spoken languages, availability, travel preference, certificates, project history, portfolio, recommendations, attachment file names, membership/freshness signals and avatar.
- **Omit-empty output** — fields the source does not publish are left out instead of being sent as `null`.
- **No credentials, no proxy** — freelancermap serves all of this publicly.

### Modes

| Mode | What it does |
|---|---|
| `projectSearch` | Search or browse IT projects. |
| `freelancerSearch` | Search or browse freelancer profiles. |
| `projectDetail` | Fetch full records for project URLs or slugs. |
| `freelancerProfile` | Fetch full records for freelancer profile URLs or slugs. |

### Project output fields

Search rows use `recordType: "projectListing"`; detail rows use `recordType: "project"`.

`projectId`, `slug`, `title`, `company`, `companyUrl`, `companyVerified` (only when true), `city`, `country`, `locations[]`, `additionalLocations[]`, `states[]`, `contractType`, `remotePercent`, `remoteType`, `industry`, `skills[]`, `budget`, `budgetAmount`, `budgetCurrency`, `startText`, `startYear`, `startMonth`, `startAvailability`, `duration`, `durationText`, `durationMonths`, `extensionPossible`, `workloadPercent`, `isEndClient`, `isEndcustomerProject`, `isTopProject`, `isActive`, `applicationsPaused`, `isArchived`, `updateCount`, `description`, `created`, `updated`, `postedLabel`, `expires`, `referenceNumber`, `posterName`, `posterId`, `posterCompany`, `posterCity`, `posterZip`, `posterCountry`, `posterWebsite`, `posterAccountType`, `posterMembership`, `posterMemberSince`, `searchQuery`, `sourceUrl`, `scrapedAt`.

- `remotePercent` is the published remote share (0, 20, 40, 60, 80 or 100); `remoteType` is `On-site`, `Hybrid` or `Remote`.
- `contractType` is `Freelance`, `Permanent` or `Agency contract`.
- `budget` keeps the source object for compatibility; `budgetAmount` is the amount in whole currency units and `budgetCurrency` is the ISO code.
- `startAvailability` and `postedLabel` are compatibility aliases (`startText` and the posting date). `duration` is the published duration text, as before.
- Dates are ISO 8601. `poster*` fields describe the recruiter/company account that published the listing, never a private email or phone number.

### Freelancer output fields

Search rows use `recordType: "freelancerListing"`; detail rows use `recordType: "freelancer"`.

`profileId`, `slug`, `name`, `headline`, `about`, `city`, `country`, `postalCode`, `rate`, `rateCurrency`, `experienceYears`, `freelancerSinceYear`, `graduation`, `skills[]`, `skillsCount`, `skillsSummary`, `languages[]`, `availability`, `availabilityPercent`, `unavailableUntil`, `profileCompletionPercent`, `isVerified`, `isActive`, `isAnonymousProfile`, `membershipTier`, `travelAvailability`, `certificates[]`, `projectHistory[]`, `portfolioItems[]`, `reviews[]`, `avatarUrl`, `websiteUrl`, `youtubeUrl`, `attachmentNames[]`, `subCategories[]`, `memberSince`, `profileUpdatedAt`, `lastLoginAt`, `hasAttachments`, `hasPortfolio`, `hasCertifications`, `hasRatings`, `permanentJobs`, `employeeLeasingJobs`, `searchQuery`, `sourceUrl`, `scrapedAt`.

- `languages[]` entries look like `{"language": "English", "code": "en", "level": 3}` (level 1-4).
- `rate` is the figure the freelancer published; freelancermap does not expose whether it is hourly or daily.
- `reviews[]` contains only public recommendations (`body`, `position`, `fullName`, `company`, `url`). Reviewer phone numbers are never exported.
- `attachmentNames[]` lists uploaded CV/portfolio file names; the download links themselves require a freelancermap login, so they are not included.
- `availabilityPercent` is 0, 20, 40, 60, 80 or 100 and `availability` is `Not available`, `Partially available` or `Available`.

### Input reference

| Field | Type | Default | Applies to |
|---|---|---|---|
| `mode` | select | `projectSearch` | all |
| `searchQueries` | string list | – | searches |
| `startUrls` | URL list | – | searches (search URLs or direct detail URLs) |
| `category` | select | – | searches |
| `country` | select (165 countries) | – | searches |
| `city` | text | – | searches |
| `radiusKm` | integer 1-500 | – | searches |
| `industry` | select | – | project search |
| `remoteType` | `onsite` / `hybrid` / `remote` | – | project search |
| `contractType` | `contracting` / `permanent_position` / `employee_leasing` | – | project search |
| `sortBy` | `newest` / `relevant` / `recentlyUpdated` / `lowestRate` | `newest` | searches |
| `postedWithinDays` | integer 1-365 | – | project search |
| `afterProjectId` | integer | – | project search |
| `endClientOnly` | boolean | `false` | project search |
| `includeDachRegion` | boolean | `false` | searches |
| `technologySlug` | text | – | searches |
| `minDurationMonths` | integer 0-120 | – | project search |
| `language` | select (43 languages) | – | freelancer search |
| `maxHourlyRate` | integer 1-2000 | – | freelancer search |
| `maxDailyRate` | integer 1-20000 | – | freelancer search |
| `updatedWithinDays` | integer 1-365 | – | freelancer search |
| `minAvailabilityPercent` | integer 1-100 | – | freelancer search |
| `hasAttachmentsOnly` | boolean | `false` | freelancer search |
| `openToPermanentJobs` | boolean | `false` | freelancer search |
| `openToAgencyContract` | boolean | `false` | freelancer search |
| `excludeUnavailable` | boolean | `false` | freelancer search |
| `recentlyActiveOnly` | boolean | `false` | freelancer search |
| `requireDisplayedName` | boolean | `false` | freelancer search |
| `verifiedOnly` | boolean | `false` | freelancer search/profile |
| `includeDetails` | boolean | `true` | searches |
| `projectSlugsOrUrls` | string list | – | project detail |
| `profileSlugsOrUrls` | string list | – | freelancer profile |
| `minExperienceYears` | integer 0-60 | – | freelancer profile |
| `availableOnly` | boolean | `false` | freelancer profile |
| `maxItems` | integer 1-1000 | `50` | all |

The prefill (one Python project, no detail enrichment) is the cheapest possible run and produces a result on the first request. Turn `includeDetails` off for fast, low-cost bulk listings; turn it on when you need descriptions, budgets and rates on every row.

### Examples

Search multiple skills and enrich the results:

```json
{
  "mode": "projectSearch",
  "searchQueries": ["python", "rust", "golang"],
  "country": "1",
  "includeDachRegion": true,
  "includeDetails": true,
  "maxItems": 100
}
```

Find available freelancers in Germany under a rate cap:

```json
{
  "mode": "freelancerSearch",
  "searchQueries": ["sap"],
  "country": "1",
  "language": "5",
  "maxHourlyRate": 90,
  "minAvailabilityPercent": 100,
  "maxItems": 50
}
```

Re-use a search you built on freelancermap:

```json
{
  "mode": "projectSearch",
  "startUrls": [
    {
      "url": "https://www.freelancermap.com/projects/python?projectContractTypes[]=contracting&remoteInPercent[]=100"
    }
  ],
  "maxItems": 80
}
```

Fetch exact projects and profiles:

```json
{
  "mode": "projectDetail",
  "projectSlugsOrUrls": [
    "https://www.freelancermap.com/project/data-scientist-3066110",
    "sc-cleared-devops-engineer-aws-azure-contract-inside-ir35-6-months-hybrid-london"
  ]
}
```

```json
{
  "mode": "freelancerProfile",
  "profileSlugsOrUrls": ["https://www.freelancermap.com/profile/jiri-lamos"],
  "minExperienceYears": 5
}
```

Incremental daily run:

```json
{
  "mode": "projectSearch",
  "searchQueries": ["java"],
  "includeDachRegion": true,
  "afterProjectId": 3065000,
  "includeDetails": false,
  "maxItems": 200
}
```

### How result coverage works

freelancermap shows anonymous visitors only the first results page per search (about 22 projects / 18 profiles), and the page number itself is ignored past page 1. To go deeper, this actor asks the same JSON endpoint for several facet slices of the query — different sort orders, contract types, workplace buckets, categories, countries, industries, posting dates, languages, rate caps and availability thresholds — then merges the slices and removes duplicates.

That is why a broad query can return hundreds of rows without an account. When the source genuinely runs out of matching records, the run stops with the real total; it never pads the dataset.

### Use cases

- Recruiters and staffing agencies monitoring fresh freelance IT demand.
- Sourcing shortlists of available freelancers by skill, language and rate.
- Rate and skill benchmarking across European IT markets.
- Lead generation from projects that disclose the hiring company and poster.

### Data source and limitations

freelancermap.com is a public marketplace. This actor is independent and not affiliated with freelancermap.

- Project budgets are published on a minority of listings; workload and some start dates are also optional. Missing fields are omitted.
- Placeholder locations such as `Not Specified` are omitted rather than emitted as a city. `city` + `radiusKm` keeps every result inside the radius even when the city name differs.
- Freelancer rates are published by roughly 85 % of profiles and the unit (hourly or daily) is not exposed by the source. The source offers one lower-rate ordering, exposed as `lowestRate`.
- Project category is not part of the public project payload; use the `category` search filter instead of expecting a category field on each row.
- Freelancer email, phone and attachment downloads require a paid freelancermap login and are deliberately not scraped.
- The `.de`, `.at` and `.ch` sites expose a regional slice of the same inventory; this actor queries `.com` with `includeDachRegion` so you get the full pool.

### FAQ

**Do I need a freelancermap account, cookies or a proxy?**
No. All four modes use public endpoints and pages. There is no login, cookie, API key or proxy option.

**How many records can one search return?**
Broad queries commonly return several hundred unique projects or profiles; narrow ones return only what the source has. `maxItems` is the hard cap (up to 1,000 per run). The actor stops honestly when the source is exhausted.

**Why is `description` missing on some rows?**
Search rows are enriched from the detail page when `includeDetails` is on. If a detail page is temporarily unavailable, the listing row is still emitted without the extra fields rather than failing the run.

**Why do some freelancer profiles have no name?**
Freelancers can hide their name from anonymous visitors; those rows omit `name` instead of writing a placeholder. Enable `requireDisplayedName` to skip them, or leave it off to keep the row with its headline and skills.

**Is the freelancer rate hourly or daily?**
The profile publishes one figure, and freelancermap does not expose its unit. The actor reports the figure in `rate` with `rateCurrency` and leaves the interpretation to you.

**Why is `budgetAmount` absent on most projects?**
Most posters do not disclose a budget publicly. When they do, both `budgetAmount` and `budgetCurrency` are filled alongside the source `budget` object.

**What does `includeDachRegion` change?**
freelancermap hides most Germany/Austria/Switzerland listings from its default international view. Enable it to search the full DACH pool, which is usually the largest part of the marketplace.

**How does `afterProjectId` help scheduled runs?**
Project IDs increase over time. Store the highest ID from one run and pass it as `afterProjectId` next time to keep only newer projects. IDs are sequential but not a guaranteed timestamp, so treat it as an incremental filter rather than an exact date boundary.

**Can I paste a search URL from the site?**
Yes. Put it in `startUrls`; the actor copies the supported query parameters. A URL pointing directly at a project or profile is emitted as a detail record.

**How fresh are profile activity fields?**
`profileUpdatedAt` and `lastLoginAt` come from the public profile payload. They are signals published by freelancermap, not a guarantee that the freelancer is currently taking work.

# Actor input Schema

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

What to fetch.

## `searchQueries` (type: `array`):

One or more keywords, job titles or technologies. Each query is searched separately and its results are merged (mode=projectSearch/freelancerSearch).

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

Optional freelancermap search URLs (filters in the URL are copied) or direct project/profile URLs, as {"url": "..."} entries. Direct detail URLs are emitted as detail records (mode=projectSearch/freelancerSearch).

## `category` (type: `string`):

Restrict results to one of freelancermap's professional fields (mode=projectSearch/freelancerSearch).

## `country` (type: `string`):

Restrict projects or freelancers to a country (mode=projectSearch/freelancerSearch).

## `city` (type: `string`):

City name, e.g. Berlin, London or Dublin (mode=projectSearch/freelancerSearch). Combine with radiusKm for a wider catchment area.

## `radiusKm` (type: `integer`):

Search radius around the city (mode=projectSearch/freelancerSearch). Only used together with city.

## `industry` (type: `string`):

Restrict projects to a client industry (mode=projectSearch).

## `remoteType` (type: `string`):

On-site, hybrid (any partial remote share) or fully remote projects (mode=projectSearch).

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

Freelance, permanent-position or agency/employee-leasing projects (mode=projectSearch).

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

Result ordering. Recently-updated and lowest-rate sorting apply to freelancer profiles; projects fall back to newest (mode=projectSearch/freelancerSearch).

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

Only projects published within this many days (mode=projectSearch).

## `afterProjectId` (type: `integer`):

Keep only projects whose freelancermap project ID is greater than this value, for incremental runs (mode=projectSearch).

## `endClientOnly` (type: `boolean`):

Only projects posted directly by the hiring company, excluding agency reposts (mode=projectSearch).

## `includeDachRegion` (type: `boolean`):

Include the much larger Germany/Austria/Switzerland pool that freelancermap hides from its default international view (mode=projectSearch/freelancerSearch).

## `technologySlug` (type: `string`):

A freelancermap skill tag slug, e.g. python-programming-language, sap-hana or amazon-web-services (mode=projectSearch/freelancerSearch). A full /projects/<slug> URL is also accepted.

## `minDurationMonths` (type: `integer`):

Drop projects whose disclosed duration is shorter than this. Projects without a duration are kept (mode=projectSearch).

## `language` (type: `string`):

Only freelancers who list this language (mode=freelancerSearch).

## `maxHourlyRate` (type: `integer`):

Only freelancers quoting at or below this hourly rate, in their own currency (mode=freelancerSearch).

## `maxDailyRate` (type: `integer`):

Only freelancers quoting at or below this daily rate, in their own currency (mode=freelancerSearch).

## `updatedWithinDays` (type: `integer`):

Only freelancer profiles updated within this many days (mode=freelancerSearch).

## `minAvailabilityPercent` (type: `integer`):

Only freelancers who report at least this much availability (mode=freelancerSearch).

## `hasAttachmentsOnly` (type: `boolean`):

Only freelancers who uploaded a CV/portfolio attachment (mode=freelancerSearch).

## `openToPermanentJobs` (type: `boolean`):

Only freelancers open to permanent-position offers (mode=freelancerSearch).

## `openToAgencyContract` (type: `boolean`):

Only freelancers open to agency/employee-leasing contracts (mode=freelancerSearch).

## `excludeUnavailable` (type: `boolean`):

Drop freelancers marked fully unavailable (mode=freelancerSearch).

## `recentlyActiveOnly` (type: `boolean`):

Only freelancers whose profiles were updated recently (mode=freelancerSearch).

## `requireDisplayedName` (type: `boolean`):

Skip profiles that hide the freelancer's name (mode=freelancerSearch).

## `verifiedOnly` (type: `boolean`):

Only profiles marked verified by freelancermap (mode=freelancerSearch/freelancerProfile).

## `includeDetails` (type: `boolean`):

Enrich every search result with its detail page (full description, skills, budget, rate, history and contact block). Turn off for the fastest, cheapest runs (mode=projectSearch/freelancerSearch).

## `projectSlugsOrUrls` (type: `array`):

Project URLs or slugs to fetch (mode=projectDetail).

## `profileSlugsOrUrls` (type: `array`):

Freelancer profile URLs or slugs to fetch (mode=freelancerProfile).

## `minExperienceYears` (type: `integer`):

Drop freelancer profiles with fewer disclosed years of experience. Profiles without the field are kept (mode=freelancerProfile).

## `availableOnly` (type: `boolean`):

Only emit profiles marked fully available (mode=freelancerProfile).

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

Hard cap on emitted records. Search modes split each query across freelancermap's own filters instead of page numbers, so broad queries can return well over one results page.

## Actor input object example

```json
{
  "mode": "projectSearch",
  "searchQueries": [
    "python"
  ],
  "startUrls": [],
  "category": "",
  "country": "",
  "city": "",
  "industry": "",
  "remoteType": "",
  "contractType": "",
  "sortBy": "newest",
  "endClientOnly": false,
  "includeDachRegion": false,
  "technologySlug": "",
  "language": "",
  "hasAttachmentsOnly": false,
  "openToPermanentJobs": false,
  "openToAgencyContract": false,
  "excludeUnavailable": false,
  "recentlyActiveOnly": false,
  "requireDisplayedName": false,
  "verifiedOnly": false,
  "includeDetails": false,
  "projectSlugsOrUrls": [],
  "profileSlugsOrUrls": [],
  "availableOnly": false,
  "maxItems": 1
}
```

# Actor output Schema

## `listings` (type: `string`):

Dataset containing all scraped freelancermap projects and freelancer profiles.

# 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": "projectSearch",
    "searchQueries": [
        "python"
    ],
    "startUrls": [],
    "category": "",
    "country": "",
    "city": "",
    "industry": "",
    "remoteType": "",
    "contractType": "",
    "sortBy": "newest",
    "endClientOnly": false,
    "includeDachRegion": false,
    "technologySlug": "",
    "language": "",
    "hasAttachmentsOnly": false,
    "openToPermanentJobs": false,
    "openToAgencyContract": false,
    "excludeUnavailable": false,
    "recentlyActiveOnly": false,
    "requireDisplayedName": false,
    "verifiedOnly": false,
    "includeDetails": false,
    "projectSlugsOrUrls": [],
    "profileSlugsOrUrls": [],
    "availableOnly": false,
    "maxItems": 1
};

// Run the Actor and wait for it to finish
const run = await client.actor("xyrelith-data/freelancermap-it-projects-and-freelancer-finder").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": "projectSearch",
    "searchQueries": ["python"],
    "startUrls": [],
    "category": "",
    "country": "",
    "city": "",
    "industry": "",
    "remoteType": "",
    "contractType": "",
    "sortBy": "newest",
    "endClientOnly": False,
    "includeDachRegion": False,
    "technologySlug": "",
    "language": "",
    "hasAttachmentsOnly": False,
    "openToPermanentJobs": False,
    "openToAgencyContract": False,
    "excludeUnavailable": False,
    "recentlyActiveOnly": False,
    "requireDisplayedName": False,
    "verifiedOnly": False,
    "includeDetails": False,
    "projectSlugsOrUrls": [],
    "profileSlugsOrUrls": [],
    "availableOnly": False,
    "maxItems": 1,
}

# Run the Actor and wait for it to finish
run = client.actor("xyrelith-data/freelancermap-it-projects-and-freelancer-finder").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": "projectSearch",
  "searchQueries": [
    "python"
  ],
  "startUrls": [],
  "category": "",
  "country": "",
  "city": "",
  "industry": "",
  "remoteType": "",
  "contractType": "",
  "sortBy": "newest",
  "endClientOnly": false,
  "includeDachRegion": false,
  "technologySlug": "",
  "language": "",
  "hasAttachmentsOnly": false,
  "openToPermanentJobs": false,
  "openToAgencyContract": false,
  "excludeUnavailable": false,
  "recentlyActiveOnly": false,
  "requireDisplayedName": false,
  "verifiedOnly": false,
  "includeDetails": false,
  "projectSlugsOrUrls": [],
  "profileSlugsOrUrls": [],
  "availableOnly": false,
  "maxItems": 1
}' |
apify call xyrelith-data/freelancermap-it-projects-and-freelancer-finder --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,xyrelith-data/freelancermap-it-projects-and-freelancer-finder"
        }
    }
}
```

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/PZaEPJPMb3jko1X4z/builds/rh3yK2XvhPq0FCUT8/openapi.json
