# Airbnb Scraper — Stays, Reviews & Availability (`shadowextractor/airbnb-stays-scraper`) Actor

Three focused modes for Airbnb stay research: search cards, full search and listing URLs. Collect available prices, public host details, reviews, calendars, contacts and labelled revenue estimates. Platform usage included.

- **URL**: https://apify.com/shadowextractor/airbnb-stays-scraper.md
- **Developed by:** [Shadow Extractor](https://apify.com/shadowextractor) (community)
- **Categories:** Travel, Real estate
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 search listings

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

## 🏡 Airbnb Scraper — Stays, Reviews & Availability

![Airbnb stay research — structured listing example](https://api.apify.com/v2/key-value-stores/WHMdnNa73N22xHYZv/records/AIRBNB_DARK)

Research Airbnb stays by location or inspect listing URLs you already have. Collect **listing cards, prices, photos, amenities, house rules, public host profiles, guest reviews and day-by-day availability**, with optional public business contacts and clearly labelled revenue estimates.

**Three modes. Native search filters. One listing per main row.** Completed listings appear as they finish, and detailed export tables keep hosts, amenities, reviews, calendar days and contact evidence easy to use.

💰 **Platform usage is included.** Fast search costs **$2 per 1,000 saved listing cards**. Full search and Listing URLs cost **$8 per 1,000 saved detailed listings**, including selected available reviews, calendars, public contacts and revenue estimates. Actor Start is **$0.00005 per started GB**, minimum one event.

### 📖 On this page

- [Quick start](#-quick-start)
- [Three collection modes](#-three-collection-modes)
- [Useful filters](#-useful-filters)
- [Ready-to-use inputs](#-ready-to-use-inputs)
- [Public contacts](#-emails-phones-and-social-profiles)
- [Host profiles](#-public-host-profile-fields)
- [Output tables](#-where-to-find-your-data)
- [Revenue estimates](#-read-revenue-estimates-correctly)
- [Pricing](#-pricing)
- [API and exports](#-api-and-exports)
- [FAQ](#-practical-questions)

### 🚀 Quick start

1. Select **Fast search** for a first sample.
2. Enter one city or neighborhood per line in **Locations or Airbnb listing URLs**, for example `Prague` or `Lisbon`.
3. Start with a listing limit of **3**. Dates are optional; supply both dates for a specific stay context.
4. Open **Output → Listings** while the run is working.
5. Choose Full search for property/host details and the extras you need. Choose Listing URLs when you already have listing links.
6. Export the main listing table or a focused table to CSV, Excel or JSON.

```json
{
  "mode": "search-fast",
  "queries": ["Prague"],
  "maxItemsPerQuery": 3
}
```

Use locations or listing URLs in one run. Search modes accept locations; Listing URLs accepts public `airbnb.com/rooms/...` links. An explicit search mode does not silently upgrade itself to a paid detail lookup when given a URL.

### 🧭 Three collection modes

| Mode | JSON value | Available field groups |
|---|---|---|
| ⚡ **Fast search** | `search-fast` | Search cards: IDs, titles, URLs, photos, displayed/numeric prices, ratings and available room/capacity fields |
| 🏡 **Full search** | `search-full` | Location search plus property descriptions, amenities, rules, safety information and public host-profile details; selected extras below |
| 🔗 **Listing URLs** | `urls` | The same detail collection for specific listings, without searching a city first; selected extras below |

**Selected extras:** review text, calendar availability, public contacts and revenue estimates. They run only in Full search or Listing URLs and are included in that listing price. Turn them off when you do not need their data. Revenue analysis also requests the calendar because its estimates require calendar evidence.

A source may publish only some fields. The Actor preserves real zeros and false flags, leaves unknown fields empty and provides coverage/status fields. A complete failure to load detail data in Full search retains a usable search card at the **Fast search price**, rather than calling it a detailed result.

### 🎯 Useful filters

| Setting | Purpose |
|---|---|
| Check-in and check-out | A specific stay context; enter both or leave both empty |
| Adults | Required guest capacity and quote context; defaults to 2 |
| Minimum/maximum search price | Native Airbnb price selection in the chosen currency and travel context |
| Room type | Entire home/apartment, private room, shared room or hotel room |
| Minimum bedrooms | A simple room-count constraint for location searches |
| Currency | USD or EUR for the implemented source paths |

These are **native location-search constraints**. A direct URL identifies a listing explicitly, so price/room-count search filters do not discard direct URLs; the run warns if those settings were supplied. Dates and guests can still affect a listing's quote and availability.

The price shown in a search, the nightly rate and the final total can differ because of dates, length of stay, discounts and fees. The Actor preserves the returned price fields rather than forcing them into one guessed number.

### ▶️ Ready-to-use inputs

#### 1. Find stays quickly ⚡

```json
{
  "mode": "search-fast",
  "queries": ["Lisbon"],
  "maxItemsPerQuery": 10,
  "currency": "EUR"
}
```

#### 2. Full property and host details 🏡

```json
{
  "mode": "search-full",
  "queries": ["Prague"],
  "maxItemsPerQuery": 3
}
```

#### 3. Add reviews and availability 📅

```json
{
  "mode": "search-full",
  "queries": ["Prague"],
  "maxItemsPerQuery": 3,
  "includeReviews": true,
  "maxReviewsPerListing": 20,
  "includeCalendar": true
}
```

#### 4. Inspect known listing URLs 🔗

Replace the illustrative ID with a live URL from your search results:

```json
{
  "mode": "urls",
  "queries": ["https://www.airbnb.com/rooms/123456789"],
  "maxItemsPerQuery": 1,
  "includeReviews": true,
  "maxReviewsPerListing": 5,
  "includeCalendar": true,
  "includeContacts": true,
  "analyzeRevenue": true
}
```

The source can omit an undated direct-URL quote. Provide travel dates when an exact stay price is important. Missing price data is not fabricated from another property's price.

#### 5. Apply useful location filters 🎯

```json
{
  "mode": "search-fast",
  "queries": ["Prague"],
  "maxItemsPerQuery": 10,
  "adults": 2,
  "roomType": "Entire home/apt",
  "minBedrooms": 1,
  "minPrice": 30,
  "maxPrice": 300,
  "currency": "EUR"
}
```

### ⚙️ Input reference

| Key | Meaning |
|---|---|
| `mode` | `search-fast`, `search-full` or `urls` |
| `queries` | One city/neighborhood per entry for search, or one listing URL per entry in Listing URLs |
| `maxItemsPerQuery` | Saved unique listings per location; in Listing URLs it caps the whole URL run. Default 10, maximum 270 |
| `checkIn`, `checkOut` | Both future/current travel dates in the form's date format |
| `adults` | Adult guests, default 2 |
| `minPrice`, `maxPrice` | Optional native location-search price bounds |
| `roomType`, `minBedrooms` | Optional native search room constraints |
| `currency` | USD or EUR |
| `includeReviews`, `maxReviewsPerListing` | Request review texts, with up to 100 per listing |
| `includeCalendar` | Request the published day-by-day calendar and its summaries |
| `includeContacts` | Check available public listing/host text and identity-matched official websites |
| `analyzeRevenue` | Derive labelled estimates from calendar evidence; also requests the calendar |
| `proxy` | Standard connection editor, with a useful default |

Additional JSON options retain `children`, `infants`, `pets`, `minBeds`, `minBathrooms`, `locale`, `maxConcurrency`, `maxRetries`, `contactWebsites`, `rawOutput` and `debugLog`. Existing `locationQueries` and `startUrls` API inputs remain accepted. They provide the same source types as the simpler `queries` field.

Filtered and duplicate search candidates do not consume the saved-listing allowance. The source's available result window still limits how much a location can return. Multiple overlapping locations can produce fewer new listings because a listing is saved only once across the run.

### 📬 Emails, phones and social profiles

Enable `includeContacts` to check the listing's own public text and matching official property/operator websites. The Actor checks business identity and location before accepting a discovered website. It does not guess an email address or turn an unrelated company into the listing's owner.

```text
Public listing / host text
          ↓
Published contacts or identity-matched official business website
          ↓
Email · phone · social profiles → contact value + source URL
```

| Field | Meaning |
|---|---|
| `email`, `emails` | One email for a compact table cell and all distinct published emails found. |
| `phone`, `phoneNumbers` | One phone for a compact table cell and all valid published numbers, normalized with international prefixes. |
| `instagramUrls`, `facebookUrls`, `linkedinUrls` | Published social/business profiles. |
| `xUrls`, `youtubeUrls`, `tiktokUrls`, `pinterestUrls` | Additional published profiles/channels. |
| `whatsappUrls`, `telegramUrls` | Published messaging links. |
| `contactBusinessName`, `contactWebsite` | The identified business and its verified website, when found. |
| `contactSourceUrls`, `contactMatchMethod` | Evidence links and the method used to associate the website. |
| `contactStatus` | `found`, `not_publicly_found`, or `lookup_failed`. |
| `contactsFoundCount`, `contactPagesChecked` | Contact and checked-website-page counts for that listing. |

**These are public contacts, often for a professional operator—not necessarily a private host's personal details.** Airbnb's booking-only email/phone details are not included. A social-network homepage or sharing button is not treated as a profile. A missing contact stays empty; it is not fabricated. Country-less local telephone numbers may be omitted rather than assigned an invented country code.

If you know an official website, you can supply an optional `contactWebsites` mapping of listing ID to website. The website must still match the business and location or link to that exact listing. This is a hint, not permission to attach arbitrary contacts.

### 👤 Public host-profile fields

Full search and Direct URLs also read the public host profile linked to each listing. The listing row and the separate **Hosts** table can include:

- Host ID and profile URL, name, photo and published location.
- Superhost and identity/verification badges, verification types and “verified since” text.
- Hosting tenure, Airbnb-user tenure, past-trip count and received-review counts.
- Public work, languages, “lives in” value, profile prompts and selected interests.
- Public managed-listing count and listing summaries, including beds, bedrooms, bathrooms and Instant Book where published.
- `hostProfileStatus`: `available`, `unavailable`, or `failed`.

These fields are conditional. Some listings expose a host card but no public profile ID; those rows keep their listing data and report `hostProfileStatus: unavailable` rather than inventing profile values.

### 📦 Where to find your data

The **default dataset has one row per listing**. Existing structured details remain in JSON; the tables organize them without removing fields.

| Output table | Contents |
|---|---|
| Listings | ID, name, photo, location, price, rating, room type, capacity, available bedroom/bed/bathroom counts, URL and collection time. |
| Pricing | Displayed price, numeric nightly/total prices, currency and available price information. |
| Hosts & ratings / Hosts | Host profile URL, verification types, published location/work/languages, hosting and user tenure, trip/review counts, interests, managed listings, response information and co-host data. |
| Amenities / House rules | Amenity groups, availability flags, house rules, safety information and listing highlights. |
| Public contacts | Emails, phones, social profiles, business website and contact status. |
| Contact sources | One contact/evidence row at a time, with its listing and source URL. |
| Reviews / Review summary | Review text, localized date/text, reviewer and host profile links, public reviewer tenure/location, highlights, media, ratings, available host replies and summaries of the fetched sample. |
| Calendar metrics | Date coverage and 30/60/90/365-day availability and occupancy-estimate summaries. |
| Calendar days | One row per public calendar day: availability, check-in/check-out eligibility, bookable flag, minimum/maximum nights and price when Airbnb publishes one. |
| Revenue estimates | Estimated occupancy, ADR, RevPAR and projected monthly revenue. |
| Run summary | Saved counts, contact coverage, partial results and any correction needed. |

Review summaries describe only the reviews collected in that run. They are not a replacement for every review ever published.

#### Example listing

This abbreviated example is fictional. Its ID, business, phone and email are placeholders—not real contact data.

```json
{
  "recordType": "listing",
  "id": "123456789",
  "name": "Demo Rentals | Riverside apartment",
  "detailStatus": "complete",
  "bedrooms": 1,
  "beds": 2,
  "bathrooms": 1,
  "instantBookEnabled": true,
  "isGuestFavorite": true,
  "registrationNumber": "DEMO-REG-123",
  "displayLocation": "Demo District",
  "displayPrice": "$145 per night",
  "pricePerNight": 145,
  "email": "hello@example.com",
  "emails": ["hello@example.com"],
  "phone": "+442079460018",
  "phoneNumbers": ["+442079460018"],
  "contactWebsite": "https://example.com/",
  "contactSourceUrls": ["https://example.com/contact"],
  "contactStatus": "found",
  "hostProfileStatus": "available",
  "hostUrl": "https://www.airbnb.com/users/show/12345",
  "hostManagedListingsTotalCount": 3,
  "hostLanguages": "English and Spanish",
  "url": "https://www.airbnb.com/rooms/123456789"
}
```

### 💰 Read revenue estimates correctly

Revenue analysis adds a `revenue` block with 30/60/365-day occupancy windows, counted/available/blocked nights, `adr`, `adrSource`, `revPar`, `estimatedMonthlyRevenue`, `minNightsTypical` and monthly `seasonality`, where the underlying data permits them. The most useful values are also exposed as flat `estimated...` and `...Next60` fields for CSV and table exports.

**Unavailable does not mean confirmed booked.** Hosts can block their calendars. These are forward-looking estimates, not verified occupancy, sales or income. Short calendar samples do not receive an occupancy projection. Missing price data does not receive a made-up ADR or revenue value.

The separate `revenue` dataset and `REVENUE_SUMMARY` record contain sample medians. Per-listing market comparisons require at least five analyzed listings. They describe your collected sample, not the entire city.

### 💳 Pricing

| Event | Price |
|---|---:|
| Fast search listing card | **$2.00 / 1,000 saved cards** |
| Detailed listing in Full search or Listing URLs | **$8.00 / 1,000 saved listings** |
| Actor Start | **$0.00005 per started GB**, minimum one event |
| Platform usage | **Included** |

Selected available review text, calendar data, public contacts and revenue estimates have **no separate add-on event**. Copies in host, review, amenity, calendar, contact and revenue export tables are not billed again as listing results.

Useful partial detail results can be charged at the detailed-listing price. If detail loading completely fails and Full search can retain only its search card, that result uses the card price. Failed or empty records and duplicate listings do not trigger a listing event. The small startup event still applies when the Actor starts.

The [Pricing tab](https://apify.com/shadowextractor/airbnb-stays-scraper/pricing) is authoritative for the current rates. Set a suitable maximum charge in Apify and start with a small sample. Collection stops when another selected listing cannot fit the remaining allowance; saved records remain available.

### ❓ Practical questions

**Why is a field empty?**

A listing may not publish it, an optional extra may be off, or a source may be temporarily unavailable. Check `detailStatus`, `hostProfileStatus`, `reviewsStatus`, `calendarStatus` and `contactStatus`. A missing value is not a zero or proof of absence.

**What does a price represent?**

Dates and guest counts can change it. `pricePerNight` is the published nightly rate, which may precede a stay discount. `priceTotal` uses an exact total when published; `priceEffectivePerNight` divides it by a known `priceNightCount`. A `price.priceSource` of `search_baseline` is undated search context, not an exact quote for a different stay.

**Does an unavailable calendar day mean a confirmed booking?**

No. Hosts can block dates. Occupancy and revenue estimates are explicitly labelled projections and include notes; they are not verified income or a guarantee of rental performance.

**Are private host emails or booking-only phones included?**

No. Contacts are public observations, often for a professional property operator. Identity-matched source links explain each accepted contact. Missing contacts are not guessed.

**Do all settings apply to listing URLs?**

Dates, guests and selected detail extras can apply. Native location-search price and room filters do not remove explicit URLs; the run warns about this accepted-but-inactive combination.

**What happens with invalid input or a small budget?**

Invalid input finishes with a correction and no source collection. Insufficient allowance stops before new source work. Incomplete/failed items are not saved as empty paid listings. The Actor Start event may still apply.

**What if an optional export table fails?**

The main saved listing stays available. The run summary reports an issue rather than discarding the already delivered paid record.

**Do I need an Airbnb account?**

No login is required for the public source data implemented here.

### 🔌 API and exports

Keep your token in the `APIFY_TOKEN` environment variable:

```bash
curl --request POST \
  "https://api.apify.com/v2/acts/shadowextractor~airbnb-stays-scraper/runs?build=latest&memory=512&timeout=300&maxTotalChargeUsd=1" \
  --header "Authorization: Bearer $APIFY_TOKEN" \
  --header "Content-Type: application/json" \
  --data '{"mode":"search-fast","queries":["Prague"],"maxItemsPerQuery":3}'
```

Read the returned run's default dataset for the main listing records. `OUTPUT` in the default key-value store contains saved counts, duplicate skips, partial coverage, billing-event counts, selected extras and warnings.

JSON retains structured details and nested source data. Focused tables make CSV and Excel exports easier. Reviews, calendar days, amenities and contact evidence can be exported from their separate named datasets without paying for the listing a second time.

# Actor input Schema

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

Fast searches locations for listing cards. Full searches locations and adds available property/host details plus selected extras. Listing URLs collects details for your own Airbnb URLs.

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

One target per entry: a city/neighborhood for search modes, or an airbnb.com/rooms/... URL in Listing URLs. Use locations or listing URLs in a run, not a mixture.

## `maxItemsPerQuery` (type: `integer`):

Successfully saved unique listings per location search. In Listing URLs mode this caps the whole URL run. Missing, failed or duplicate listings do not use the saved-listing allowance.

## `checkIn` (type: `string`):

Add a future date when you need date-aware prices and availability.

## `checkOut` (type: `string`):

Must be later than check-in.

## `adults` (type: `integer`):

Number of adult guests.

## `currency` (type: `string`):

Currency used for price fields.

## `minPrice` (type: `integer`):

Native Airbnb lower price filter for location searches, in the selected currency and travel context. It is not a promise that every displayed price excludes or includes all fees.

## `maxPrice` (type: `integer`):

Maximum price filter in the selected currency.

## `roomType` (type: `string`):

Filter listings by stay type.

## `minBedrooms` (type: `integer`):

Keep listings with at least this many bedrooms.

## `includeReviews` (type: `boolean`):

Save guest review text, star ratings and Review summary analytics. Available in Full search and Listing URLs.

## `maxReviewsPerListing` (type: `integer`):

Maximum guest reviews to save per listing when reviews are enabled. Use 1 or 10 for quick tests, 50 for deeper analysis.

## `includeCalendar` (type: `boolean`):

Save up to 12 months of availability when Airbnb returns them. Available in Full search and Listing URLs.

## `includeContacts` (type: `boolean`):

Check public listing text and identity-matched official business websites in Full search or Listing URLs. Includes source links when contacts are found. Private booking-only contacts are not exposed. Included in the detailed-listing price.

## `analyzeRevenue` (type: `boolean`):

Use the available calendar and published prices for projections. This also requests the calendar. Unavailable nights may be booked or host-blocked; estimates are not confirmed income. No additional event fee.

## `proxy` (type: `object`):

Default connection settings work for most runs. Advanced users can customize them here.

## Actor input object example

```json
{
  "mode": "search-fast",
  "queries": [
    "Prague"
  ],
  "maxItemsPerQuery": 3,
  "adults": 2,
  "currency": "USD",
  "roomType": "",
  "includeReviews": false,
  "maxReviewsPerListing": 50,
  "includeCalendar": false,
  "includeContacts": false,
  "analyzeRevenue": false,
  "proxy": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

No description

## `pricing` (type: `string`):

No description

## `host_ratings` (type: `string`):

No description

## `hosts` (type: `string`):

No description

## `amenities` (type: `string`):

No description

## `property_info` (type: `string`):

No description

## `calendar_metrics` (type: `string`):

No description

## `calendar_days` (type: `string`):

No description

## `review_rows` (type: `string`):

No description

## `review_summary` (type: `string`):

No description

## `contacts` (type: `string`):

No description

## `contact_sources` (type: `string`):

No description

## `revenue` (type: `string`):

No description

## `run_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": "search-fast",
    "queries": [
        "Prague"
    ],
    "maxItemsPerQuery": 3,
    "adults": 2,
    "currency": "USD",
    "includeReviews": false,
    "maxReviewsPerListing": 50,
    "includeCalendar": false,
    "includeContacts": false,
    "analyzeRevenue": false,
    "proxy": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("shadowextractor/airbnb-stays-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 = {
    "mode": "search-fast",
    "queries": ["Prague"],
    "maxItemsPerQuery": 3,
    "adults": 2,
    "currency": "USD",
    "includeReviews": False,
    "maxReviewsPerListing": 50,
    "includeCalendar": False,
    "includeContacts": False,
    "analyzeRevenue": False,
    "proxy": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("shadowextractor/airbnb-stays-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 '{
  "mode": "search-fast",
  "queries": [
    "Prague"
  ],
  "maxItemsPerQuery": 3,
  "adults": 2,
  "currency": "USD",
  "includeReviews": false,
  "maxReviewsPerListing": 50,
  "includeCalendar": false,
  "includeContacts": false,
  "analyzeRevenue": false,
  "proxy": {
    "useApifyProxy": true
  }
}' |
apify call shadowextractor/airbnb-stays-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,shadowextractor/airbnb-stays-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/NDcu5JLAZocGVRjN1/builds/aeNLziB59lDegha9M/openapi.json
