# Booking.com Scraper - Hotel Prices, Availability & Reviews (`scrapewise/booking-scraper`) Actor

Scrape Booking.com without login: hotels for any destination and dates with 50+ fields (total and nightly price, rating, reviews, stars, distance, room, free cancellation, breakfast, coordinates), plus guest reviews of any hotel. US$ 3.50 per 1,000 hotels, errors free.

- **URL**: https://apify.com/scrapewise/booking-scraper.md
- **Developed by:** [Scrapewise Data](https://apify.com/scrapewise) (community)
- **Categories:** Travel, E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.85 / 1,000 hotel delivereds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
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

## Booking.com Scraper

Booking.com Scraper turns **Booking.com search results and guest reviews** into clean JSON, CSV or Excel, **without login or cookies**. Give it destinations and dates and get every property's **total price and price per night**, currency, guest rating, number of reviews, stars, address, coordinates, distance from the center, room type, **free cancellation**, **breakfast**, deals and photo. Give it hotel links and get the **guest reviews**: score, title, what guests liked and disliked, language, date, country, traveler type, room and the hotel's reply.

**US$ 1.00 per 1,000 hotels. US$ 0.429 per 1,000 reviews. No monthly fee, no start fee. Error rows are free.**

### At a glance

- **Price per 1,000 hotels:** US$ 1.00 (down to US$ 0.85 on Gold and above), no run start fee
- **Search:** Any city, region, neighborhood or landmark; check-in and check-out or number of nights; adults, children ages, rooms; any currency and language
- **Price:** Total for the stay and per night, price before discount, taxes and fees note, deal badges
- **Filters:** Star class, minimum guest rating, free cancellation, breakfast included, hotels only, plus any Booking.com `nflt` filter
- **Sort:** Booking.com's own orders: top picks, price, rating, stars, distance
- **Depth:** Up to about 2,000 properties per destination; every review of a hotel
- **Fields:** 50+ per hotel row, 20+ per review row
- **Error rows:** Free, with an `errorCode`

### One real row

`Lisbon`, 2026-11-10 to 2026-11-13, 2 adults, in USD (collected on 2026-09-30):

```json
{
  "type": "hotel",
  "destination": "Lisbon",
  "destinationName": "Lisbon",
  "destinationType": "CITY",
  "position": 5,
  "hotelId": 8306313,
  "name": "LR Guest House",
  "url": "https://www.booking.com/hotel/pt/lr-guest-house.html",
  "address": "Rua Norte 83 - 1º",
  "city": "Lisboa",
  "countryCode": "PT",
  "latitude": 38.7120805,
  "longitude": -9.1438114,
  "neighborhood": "Misericordia, Lisbon",
  "distanceFromCenter": "0.3 miles from downtown",
  "publicTransport": "Restauradores station is within 450 yards",
  "stars": 4,
  "reviewScore": 9.7,
  "reviewScoreWord": "Exceptional",
  "reviewCount": 895,
  "priceTotal": 485.95,
  "pricePerNight": 161.98,
  "currency": "USD",
  "roomType": "Double Room with Private External Bathroom",
  "beds": 1,
  "freeCancellation": true,
  "freeCancellationUntil": "2026-10-10T23:00:00Z",
  "breakfastIncluded": true,
  "mealPlan": "Breakfast included",
  "roomsLeft": "We have 1 left at this price",
  "preferredPartner": true,
  "imageUrl": "https://cf.bstatic.com/xdata/images/hotel/square600/634313208.jpg?k=c54d89dc1a031abaa1defc16e3f60d5769ac32532379730222e93b50ef4d9ae3&o=",
  "checkIn": "2026-11-10",
  "checkOut": "2026-11-13",
  "nights": 3,
  "adults": 2,
  "rooms": 1
}
```

A review row from the same run:

```json
{
  "type": "review",
  "reviewId": "8fc748a831ac2dd6",
  "hotelName": "LX Living by Mirabilis",
  "hotelUrl": "https://www.booking.com/hotel/pt/mirabilis-apartments-lx-living.html",
  "rating": 9,
  "title": "The most perfect apartment",
  "positive": "The apartment was clean and modern with a big balcony. Lots of storage and sockets by the bed. Facilities were excellent, bathroom was big and well equipped. Was simple to contact reception via WhatsApp at any time. Very quiet area in general. We also broke a plate by accident and they were very understanding.",
  "negative": "The pool was a little dirty and some of the paint was missing at the bottom. The location was a bit further away than I thought but I would have walked it if the temperature wasnt so high.",
  "language": "en",
  "reviewedAt": "2026-09-29T20:59:10Z",
  "reviewerName": "Louise",
  "reviewerCountry": "Ireland",
  "travelerType": "Solo traveler",
  "roomType": "Apartment with Balcony",
  "stayCheckIn": "2026-09-22",
  "stayCheckOut": "2026-09-25",
  "nights": 3,
  "hotelReply": null
}
```

### What you can do with it

- **Price monitoring and rate shopping:** schedule the same destination and dates every day and watch how prices, deals and availability move.
- **Market research for hotels and short-term rentals:** supply, star mix, ratings and price per night for any city or neighborhood.
- **Travel deals and content:** cheapest well-rated stays with free cancellation or breakfast, with coordinates for maps.
- **Reputation and guest feedback:** what guests like and dislike about your property and your competitors, by language and traveler type.
- **Datasets for AI and sentiment analysis:** liked and disliked text split by the guests themselves, with score and language on every row.

### Input

| Field | What it does |
|---|---|
| `destinations` | Cities, regions, neighborhoods or landmarks (`Lisbon`, `Algarve`, `Manhattan`, `Eiffel Tower`) |
| `maxItems` | Hotels per destination, default 50 |
| `checkIn`, `checkOut` | `YYYY-MM-DD`. Empty check-in = 30 days from today; empty check-out = check-in plus `nights` |
| `nights` | Default 1, used when check-out is empty |
| `adults`, `childrenAges`, `rooms` | Guests and rooms, as on the site |
| `currency`, `language` | Any Booking.com currency (USD, EUR, GBP, BRL...) and language (en-us, pt-br, de...) |
| `sortBy` | `popularity` (default), `price`, `price_from_high_to_low`, `review_score_and_price`, `bayesian_review_score`, `class`, `class_asc`, `distance_from_search`, `upsort_bh` |
| `starRatings`, `minReviewScore` | For example `["4", "5"]` and `"8"` |
| `freeCancellationOnly`, `breakfastIncluded`, `hotelsOnly` | Booking.com's own filters |
| `rawFilters` | Any `nflt` value from a Booking.com search link, such as `ht_id=201;distance=1000` |
| `hotelUrls` | Booking.com hotel links, for guest reviews |
| `maxReviews` | Reviews per hotel, default 50 |
| `reviewsSortBy` | `NEWEST_FIRST` (default), `MOST_RELEVANT`, `OLDEST_FIRST`, `SCORE_DESC`, `SCORE_ASC` |
| `reviewLanguages`, `travelerType`, `reviewsPublishedAfter` | Review filters |
| `compareWithPreviousRun`, `onlyChanged` | Price tracking between runs for hotel searches, see [Schedule it daily](#schedule-it-daily-a-price-monitor) |

```json
{ "destinations": ["Lisbon", "Porto"], "checkIn": "2026-11-10", "checkOut": "2026-11-13", "adults": 2, "currency": "EUR", "minReviewScore": "8", "freeCancellationOnly": true, "maxItems": 300 }
```

```json
{ "hotelUrls": ["https://www.booking.com/hotel/pt/mirabilis-apartments-lx-living.html"], "maxReviews": 500, "reviewsSortBy": "SCORE_ASC", "reviewLanguages": ["en"] }
```

### Schedule it daily: a price monitor

Save a destination search as a Task with **fixed dates**, turn on `compareWithPreviousRun` and `onlyChanged`, and attach a daily Schedule. Every run checks the same hotels and delivers, and charges, only the hotels that are new for this search or whose price for the stay moved since the previous run. A day with no change costs nothing for results and returns one free row per destination with `errorCode: NO_PRICE_CHANGES`.

```json
{ "destinations": ["Lisbon"], "checkIn": "2026-12-18", "checkOut": "2026-12-21", "adults": 2, "currency": "EUR", "sortBy": "price", "maxItems": 200, "compareWithPreviousRun": true, "onlyChanged": true }
```

Each hotel row then carries `previousPrice` and `previousSeenAt` (the `priceTotal` in the previous run that saw it, and when), `priceChange` and `priceChangePct`, `isNew` (first time in this search), `isNewLowest` and `lowestSeenPrice` (lowest price seen so far), and `firstSeenAt`.

- The history lives in a key-value store on your own account, `booking-scraper-price-history`, one record per search (destination, dates, guests, rooms, currency, sort and filters). Inspect it in the Console, or delete it to start over.
- Unchanged hotels are checked but not saved and **not charged**, and `maxItems` still counts the hotels checked, so you pay only for the rows you get.
- `sortBy: price` keeps the same hotels in the result from day to day; the default order shuffles between pages. A hotel that leaves the result stays in the history for 90 days and does not come back as new.
- Leave out the dates and the default (30 days from today) moves every day, so every run is a new search. Reviews are not price-tracked and are delivered as usual.

### Output fields

#### Hotel rows (`type: "hotel"`)

`destination`, `destinationName`, `destinationType`, `position`, `hotelId`, `name`, `url`, `address`, `city`, `countryCode`, `latitude`, `longitude`, `neighborhood`, `distanceFromCenter`, `publicTransport`, `beachDistance`, `stars`, `starsType`, `reviewScore`, `reviewScoreWord`, `reviewCount`, `priceTotal`, `pricePerNight`, `currency`, `priceBeforeDiscount`, `taxesAndFees`, `deals`, `roomType`, `unitType`, `bedrooms`, `bathrooms`, `beds`, `area`, `freeCancellation`, `freeCancellationUntil`, `noPrepayment`, `breakfastIncluded`, `mealPlan`, `roomsLeft`, `soldOut`, `isAd`, `preferredPartner`, `newlyOpened`, `imageUrl`, `checkIn`, `checkOut`, `nights`, `adults`, `children`, `rooms`.

`priceTotal` is the price for the whole stay as Booking.com shows it; `pricePerNight` is that total divided by the nights. `starsType` is `official` for hotel stars, `booking_quality` for the squares Booking.com gives apartments and homes, otherwise the site's own value.

#### Review rows (`type: "review"`)

`reviewId`, `hotelId`, `hotelName`, `hotelUrl`, `rating` (1 to 10), `title`, `positive`, `negative`, `language`, `reviewedAt`, `reviewerName`, `reviewerCountry`, `reviewerCountryCode`, `travelerType`, `roomType`, `stayCheckIn`, `stayCheckOut`, `nights`, `stayStatus`, `helpfulVotes`, `hotelReply`.

Only what Booking.com shows publicly about the guest: display name, country and traveler type. Never photos, avatars or profile links. Many Booking.com reviews are a score without text; they still come as rows.

#### Error codes (never charged)

| errorCode | Meaning |
|---|---|
| `NOT_FOUND` | Booking.com did not recognize the destination, or the hotel page does not exist |
| `NO_RESULTS` | No property for these dates, guests and filters, or no review for these filters |
| `INVALID_INPUT` | A date in the past, check-out before check-in, a link that is not a Booking.com hotel, or a value the Actor does not understand |
| `BLOCKED` | Booking.com refused the request after retries; run again |
| `NO_PRICE_CHANGES` | With `onlyChanged`: every hotel of this search was checked and none is new or changed price since the previous run |
| `NOT_REACHED`, `UNEXPECTED` | The run timeout arrived, or something unforeseen broke; only that input is lost |

### Pricing

| Event | Per 1,000 |
|---|---|
| Hotel delivered | US$ 1.00 |
| Review delivered | US$ 0.429 |

300 hotels for three cities cost US$ 0.30; 500 reviews cost about US$ 0.21. Duplicates and error rows are free, and there is no Apify compute bill on top.

### FAQ

**Is it legal to scrape Booking.com?** This Actor reads only what Booking.com shows to any logged-out visitor: public search results and public guest reviews, with no login, no cookies and no bypass of any access control. About guests it keeps only what the review page itself displays (display name, country, traveler type), never photos, avatars or profile links. Collecting public data for price monitoring, research and analysis is common practice, but how you store, share and use the data, including any personal data in reviews, is your responsibility: check Booking.com's terms and the laws that apply to you.

**Why are there no Genius prices?** Genius and other member rates only appear to visitors logged into a Booking.com account. This Actor never logs in, so it returns the public price every visitor sees for those dates, guests and currency, which is also the price comparison sites and your competitors see.

**How far ahead can I search?** The Actor sets no limit of its own: any check-in from today onwards that Booking.com's own calendar accepts works, and a stay can be up to 90 nights (Booking.com's maximum). A check-in in the past or a check-out before check-in comes back as a free `INVALID_INPUT` row; with no dates, the Actor searches 30 days from today for 1 night.

**Can it alert me when a hotel gets cheaper?** Yes: save a Task with fixed dates, turn on `compareWithPreviousRun` and `onlyChanged` and schedule it daily. Each run delivers only the hotels whose price moved, with `previousPrice`, `priceChange` and `isNewLowest`; connect the Task to Slack, e-mail or Google Sheets and filter on `priceChange < 0`.

**How do I get the `nflt` filter from a Booking.com link?** Set your filters on booking.com, then copy the page address: the part after `nflt=` is the filter string, for example `nflt=ht_id%3D201%3Bdistance%3D1000`. Paste it into `rawFilters` as is or decoded (`ht_id=201;distance=1000`); both work, and it is combined with the filters above. Useful for property types, districts, facilities and distance filters that have no field of their own.

### Limitations

- Booking.com lists about 1,000 properties per search order. With the default order the Actor adds passes sorted by price to reach up to about 2,000 per destination; for more, split the search with filters (stars, property type, neighborhoods).
- Prices are what Booking.com shows a logged-out visitor for the chosen dates, guests and currency. Genius and member prices are not included.
- Hotel page details (full description, all facilities, room table) are not part of this version.
- This Actor reads public data only and respects the site's terms.

### Changelog

- **2026-10-04:** price tracking between runs for hotel searches. `compareWithPreviousRun` adds `previousPrice`, `priceChange`, `priceChangePct`, `isNew`, `isNewLowest`, `lowestSeenPrice`, `firstSeenAt` and `previousSeenAt`, from a history kept in your own key-value store; `onlyChanged` delivers, and charges, only new hotels and price changes, for daily scheduled monitors.
- **2026-09-30, 0.1:** first release. Hotels by destination and dates with prices, rating, stars, location, room and policies; filters and sort orders; guest reviews by hotel link with language, traveler type and date filters; free error rows.

# Actor input Schema

## `destinations` (type: `array`):

Places to search, one per line, written as you would type them in the Booking.com search box: a city, region, neighborhood or landmark, for example Lisbon, Algarve, Manhattan or Eiffel Tower. Each destination is searched with the dates, guests and filters below and returns one row per property with price, rating, address and coordinates. Also accepts 'search', 'searchQueries' and 'locations'.

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

Maximum properties per destination, for example 100 (default) or 2000 for a full city. Booking.com lists about 1,000 properties per search order; with the default order the Actor adds price-ordered passes to reach up to about 2,000. You pay per hotel delivered, so this is the cost cap per destination. 'maxHotelsPerDestination' also works.

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

Check-in date in YYYY-MM-DD format, for example 2026-12-15. Prices and availability are for these dates. Empty = 30 days from today.

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

Check-out date in YYYY-MM-DD format, after check-in. Empty = check-in plus 'Nights'. Prices in the output are for the whole stay.

## `nights` (type: `integer`):

Length of the stay when 'Check-out' is empty, from 1 (default) to 90. Ignored when a check-out date is set.

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

Number of adults in the search, default 2. Booking.com prices and the rooms offered depend on it, so use the group you want to price.

## `childrenAges` (type: `array`):

One age per child, from 0 to 17, one per line, for example 5 and 8 for two children. Booking.com uses the ages to pick rooms and prices. Empty = no children.

## `rooms` (type: `integer`):

Number of rooms in the search, default 1. Prices are for all the rooms together.

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

Booking.com currency code for every price, for example USD (default), EUR, GBP, BRL or JPY. Booking.com converts the prices itself.

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

Booking.com language code for texts such as room names, distances and deal labels: en-us (default), en-gb, pt-br, es, de, fr, it, ja. Hotel names stay as the property wrote them.

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

Booking.com's own result orders: our top picks (popularity, the default), lowest price, highest price, best reviewed and lowest price, top reviewed, stars high or low, distance from the searched place, and others. With a limit, the order decides which properties you get. The default order shuffles between pages, so the Actor fills the gaps with price-ordered passes when needed.

## `starRatings` (type: `array`):

Only these star classes, one per line, for example 4 and 5. Accepts 1 to 5. Empty = all classes, including unrated properties.

## `minReviewScore` (type: `string`):

Only properties with at least this guest rating: Pleasant 6+, Good 7+, Very good 8+ or Wonderful 9+. Default 'Any'.

## `freeCancellationOnly` (type: `boolean`):

Only properties offering a room with free cancellation for your dates (Booking.com filter fc=2). Off by default.

## `breakfastIncluded` (type: `boolean`):

Only properties offering a room with breakfast included (Booking.com meal plan filter). Off by default.

## `hotelsOnly` (type: `boolean`):

Only properties of type hotel: apartments, hostels, guest houses and homes are left out. Off by default.

## `rawFilters` (type: `string`):

Advanced. The 'nflt' value copied from a Booking.com search link, for example ht_id=201;distance=1000 or popular_activities=55, to use any filter the site has. Separate filters with semicolons. Combined with the filters above.

## `hotelUrls` (type: `array`):

Booking.com hotel links, one per line, for example https://www.booking.com/hotel/pt/name.html. Each hotel returns its guest reviews (score, title, liked and disliked text, traveler type, room, stay date, country), filtered by the options below. Each review is charged as one 'Review delivered' event. Also accepts 'startUrls' and 'urls'.

## `maxReviews` (type: `integer`):

Maximum reviews per hotel, for example 100 (default) or 5000. Every review Booking.com shows can be reached, 25 per request. You pay per review delivered. 'maxReviewsPerHotel' also works.

## `reviewsSortBy` (type: `string`):

Order of the reviews: Newest first (default), Most relevant, Oldest first, Highest score first or Lowest score first. With a limit it decides which reviews you get, for example Lowest score first plus 50 returns the 50 worst reviews.

## `reviewLanguages` (type: `array`):

Only reviews written in these languages, as two-letter codes, one per line, for example en and pt. Empty = all languages.

## `travelerType` (type: `string`):

Only reviews from this kind of traveler: families, couples, groups of friends, solo travelers or business travelers. Default 'All'.

## `reviewsPublishedAfter` (type: `string`):

Only reviews posted on or after this date, in YYYY-MM-DD format, for example 2026-01-01. Useful in scheduled runs to fetch only recent reviews. Empty = all dates.

## `compareWithPreviousRun` (type: `boolean`):

Keeps the last price of every hotel in a key-value store on your account ('booking-scraper-price-history', one record per search: destination, dates, guests, rooms, currency, sort and filters) and adds to each row: previousPrice, priceChange, priceChangePct, isNew, isNewLowest (lowest price ever seen), lowestSeenPrice, firstSeenAt and previousSeenAt. On the first run everything is new. Save the input as a Task with fixed dates and schedule it daily to get a price monitor.

## `onlyChanged` (type: `boolean`):

With 'Compare prices with the previous run' on: rows whose price did not move since the previous run are not saved and not charged, and the maximum still counts the hotels checked, so a daily run costs the same and you pay only for the rows you get. A search where nothing changed returns one free row with errorCode NO_PRICE_CHANGES.

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

Apify Proxy (datacenter) is the default and recommended. When Booking.com keeps blocking a session, the Actor switches to Apify residential proxies on its own, with no extra charge. Change it only to use your own proxies.

## Actor input object example

```json
{
  "destinations": [
    "Lisbon"
  ],
  "maxItems": 50,
  "nights": 1,
  "adults": 2,
  "rooms": 1,
  "currency": "USD",
  "language": "en-us",
  "sortBy": "popularity",
  "minReviewScore": "any",
  "freeCancellationOnly": false,
  "breakfastIncluded": false,
  "hotelsOnly": false,
  "maxReviews": 50,
  "reviewsSortBy": "NEWEST_FIRST",
  "travelerType": "ALL",
  "compareWithPreviousRun": false,
  "onlyChanged": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

No description

## `resultsCsv` (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 = {
    "destinations": [
        "Lisbon"
    ],
    "maxItems": 50,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapewise/booking-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 = {
    "destinations": ["Lisbon"],
    "maxItems": 50,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("scrapewise/booking-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 '{
  "destinations": [
    "Lisbon"
  ],
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call scrapewise/booking-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapewise/booking-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/qN2th4bq0942yGpek/builds/x1GZ1ZV4xXA5EO6eV/openapi.json
