# Booking.com Scraper — Hotels, Reviews, Calendar & Reviews API (`sian.agency/booking-com-scraper`) Actor

Scrape Booking.com hotels, reviews, calendar pricing, photos, facilities & policies via one API. Property-forensics bundle returns 10+ enrichment fields per hotel in a single row. Lean search mode also available at commodity per-place pricing. No login or API key needed.

- **URL**: https://apify.com/sian.agency/booking-com-scraper.md
- **Developed by:** [SIÁN OÜ](https://apify.com/sian.agency) (community)
- **Categories:** Travel, Automation, Lead generation
- **Stats:** 30 total users, 5 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 hotel search results

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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Booking.com Scraper — Hotels, Reviews, Calendar Pricing & Forensics 🏨

[![SIÁN Agency Store](https://img.shields.io/badge/Store-SI%C3%81N%20Agency-1AE392)](https://apify.com/sian.agency?fpr=sian) [![Airbnb + STR KPIs](https://img.shields.io/badge/Store-Airbnb%20%2B%20STR%20KPIs-FF5A5F)](https://apify.com/sian.agency/airbnb-property-scraper?fpr=sian) [![Vrbo + STR KPIs](https://img.shields.io/badge/Store-Vrbo%20%2B%20STR%20KPIs-3D67FF)](https://apify.com/sian.agency/vrbo-property-scraper?fpr=sian) [![Tripadvisor](https://img.shields.io/badge/Store-Tripadvisor%20Hotels-00AF87)](https://apify.com/sian.agency/tripadvisor-hotel-scraper?fpr=sian)

#### 🎉 Six scrapers in one — hotel search, reviews, calendar pricing, photos, policies & facilities, all from a Booking.com data API

##### Built for STR investors, revenue managers, OTA-competitive teams, travel content sites & PropTech — no login, no API key, no scraping headaches

***

### 🔎 What is the Booking.com Scraper — and when should you use it?

The **Booking.com Scraper** turns Booking.com hotel pages, reviews and availability calendars into clean, structured rows you can filter, export and feed straight into a spreadsheet, database or AI agent. No account, no portal API key, no browser automation to maintain.

**Use it when you need:** hotel rows with nightly price, review score and review count, star rating, accommodation type, address, coordinates and a link to the property page. Reviews are paginated and carry traveller type, room name, nights stayed, stay date and the reviewer's own pros and cons, while calendar pricing returns 30 days of forward availability with the minimum length of stay per date. The forensics bundle adds photos, cancellation policies and facilities in one row.

**Use something else when:** you want a different booking platform. Use [Agoda Hotel Scraper](https://apify.com/sian.agency/agoda-hotel-scraper?fpr=sian) for Agoda listings with star rating, guest score, nightly price and property type, plus rooms and reviews. Use [Tripadvisor Hotel Scraper](https://apify.com/sian.agency/tripadvisor-hotel-scraper?fpr=sian) for Tripadvisor hotels with price, rating, city ranking and reviews. Use [Trip.com Scraper](https://apify.com/sian.agency/trip-com-scraper?fpr=sian) for Trip.com hotels, and its attractions, trains and cruises. This actor covers Booking.com stays only, not flights, car rental or attraction tickets.

### 🤖 Use with AI agents

Already connected to the [Apify MCP server](https://mcp.apify.com)? Just ask for this Actor by name: sian.agency/booking-com-scraper

**Your agent can pay for its own runs.** This Actor is eligible for [agentic payments](https://docs.apify.com/platform/actors/publishing/monetize), so an agent can discover it, run it and settle the bill over [x402](https://www.x402.org/) (USDC on Base) or [Skyfire](https://www.skyfire.xyz/) — without an Apify account or API token of its own. Billing is the same either way: per successful row, never for errors.

Otherwise copy this prompt into Claude, ChatGPT, Cursor or any MCP-enabled assistant:

```text
I want hotel listings, reviews and forward availability from Booking.com using the Apify Actor `sian.agency/booking-com-scraper`.

Use it when I need: hotel rows with nightly price, review score and review count, star rating, accommodation type, address, coordinates and a link to the property page. Reviews are paginated and carry traveller type, room name, nights stayed, stay date and the reviewer's own pros and cons, while calendar pricing returns 30 days of forward availability with the minimum length of stay per date. The forensics bundle adds photos, cancellation policies and facilities in one row.

Don't use it when: you want a different booking platform — use agoda-hotel-scraper or tripadvisor-hotel-scraper or trip-com-scraper instead.

How to call it: set `operation` to one of
  search              -> needs `destinationName` (a city, region or neighbourhood), ~20 hotels per page, paginated with `maxPages`
  searchByCoordinates -> needs `latitude` + `longitude`, same row shape as search
  hotelDetail         -> needs `hotelId`, returns one row
  reviews             -> needs `hotelId`, paginated, sorted by `sortType`
  calendarPricing     -> needs `hotelId`, returns about 30 date rows
  forensicsBundle     -> needs `hotelId`, returns one row combining details, photos, top reviews, policies and facilities
`checkinDate` and `checkoutDate` take YYYY-MM-DD; `adults`, `rooms`, `currency` and `orderBy` apply to the search and pricing operations. Hotel IDs come from any search row.

Start with this input:
{
  "operation": "search",
  "destinationName": "Paris",
  "checkinDate": "2026-09-15",
  "checkoutDate": "2026-09-17",
  "adults": 2,
  "currency": "EUR",
  "orderBy": "review_score",
  "maxPages": 2
}

Ask me which city or hotel ID I want, and the check-in and check-out dates, then run the Actor and summarise the results as a table.
```

**Things you can ask your agent for:**

- *Pull the top-rated hotels in Lisbon for a two-night stay in October and rank them by price per review point.*
- *Track this hotel's next 30 days of availability and flag every date that carries a minimum-stay rule.*
- *Pull reviews for three competitor hotels and tell me what business travellers complain about most.*

Machine-readable API, MCP config and OpenAPI definition for this Actor are published at [apify.com/sian.agency/booking-com-scraper.md](https://apify.com/sian.agency/booking-com-scraper.md).

### 📋 Overview

**Tired of brittle DIY scrapers that break every time Booking.com tweaks their UI?** This actor delivers reliable, flat structured datasets from Booking.com — one clean run per task, one tidy dataset out.

**Why teams choose SIÁN for Booking.com data:**

- ✅ **Six operations, one actor**: hotel search · hotel search by coordinates · hotel detail · reviews · 30-day calendar pricing · **Property Forensics bundle**
- 🌟 **Property Forensics is unique to SIÁN** — one row per hotel that fuses details + photos (with ML tags) + top reviews + cancellation policies + facilities. No other actor on the Apify store delivers this depth in a single row.
- 📅 **30-day forward calendar feed** — `calendarPricing` returns availability + minimum length-of-stay per date. Drop straight into a revenue-management dashboard.
- 💬 **Reviews with traveler segments** — every review row carries `reviewerGroup`, room name, nights stayed, language code, helpful votes, and pros/cons split.
- 🎯 **Production-ready data shape** — curated camelCase aliases (`hotelId`, `reviewScore`, `priceTotal`, `hotelPageUrl`, `coverPhotoUrl`, …) PLUS the raw upstream fields spread alongside for power users.
- 💰 **Pay-per-result pricing** — only charged for successful rows, never for empty pages or errors.
- 💎 **No login, no API key, no proxies** — paste a destination, hotel ID, or lat/lon and run.

***

### ✨ Features

#### 🔍 Hotel Search

Paginated city/destination search. Returns ~20 hotels per page with full pricing, review score, accommodation type, and a deep-link to the Booking.com hotel page.

- Auto-resolves destination name → Booking's internal `dest_id`
- Configurable sort (popularity, price, review score, distance, star rating)
- Configurable check-in/checkout windows (defaults to 30 days out, 2-night stay)
- Up to 50 pages per run

#### 📍 Hotel Search by Coordinates

Same shape as Hotel Search but takes `latitude` + `longitude` instead of a destination name. Use for proximity-to-X queries (workplace, airport, school, landmark).

#### 🏨 Hotel Detail

Single-row deep info for one hotel ID — full address, check-in window, currency, default language, timezone, coordinates, and structured policies.

#### 💬 Hotel Reviews

Paginated reviews for one hotel. Each row carries `author`, `authorCountryCode`, `reviewerGroup` (solo / business / couple / family), `roomName`, `nightsStayed`, `stayDate`, `ratingScore`, `reviewTitle`, `pros`, `cons`, `postedAt`, `languageCode`, `helpfulVoteCount`. Sort by relevance / recency / score.

#### 📅 Calendar Pricing

One call returns ~30 date rows. Each row has `date`, `available`, `minLengthOfStay`, and the property's `currency`. Perfect for ADR / occupancy proxies, length-of-stay rules, and forward-looking pricing trends.

#### ✨ Property Forensics Bundle (premium)

Fans out 5 upstream calls in parallel for one hotel — `details` + `photos` (with ML-tagged confidence scores) + page-0 `reviews` + `policies` (cancellation, payment, deposit) + `facilities` (with common-room flags). Returns **one ultra-rich row per hotel**. If any one of the 4 enrichment calls fails, the bundle still ships with `_partialFailures` recording which one(s) — only a failed `details` anchor produces an error row.

***

### 🛠️ Operation Modes

| Mode | What it does | Pagination | Output rows |
|------|--------------|------------|-------------|
| `search` | Hotels in a destination | ✅ ~20/page | One row per hotel |
| `searchByCoordinates` | Hotels near a lat/lon | ✅ ~20/page | One row per hotel |
| `hotelDetail` | Single hotel deep info | ❌ | 1 row |
| `reviews` | Reviews for one hotel | ✅ ~5–25/page | One row per review |
| `calendarPricing` | 30-day availability feed | ❌ | ~30 date rows |
| `forensicsBundle` | 5-endpoint fusion per hotel | ❌ | 1 ultra-rich row |

***

### 💰 Pricing

Pay-per-event with auto-laddered Apify tiers — you pay only for successful rows. Error rows are free.

| Event | FREE | BRONZE | GOLD | DIAMOND |
|---|--:|--:|--:|--:|
| `apify-actor-start` (one-time) | $0.040 | $0.004 | $0.004 | $0.004 |
| `search-result` (primary headline) | $0.012 | **$0.004** | $0.002 | $0.001 |
| `review-result` | $0.006 | $0.002 | $0.001 | $0.0005 |
| `hotel-detail-result` | $0.036 | $0.012 | $0.009 | $0.003 |
| `calendar-row-result` | $0.009 | $0.003 | $0.0015 | $0.00075 |
| `forensics-bundle-result` | $0.075 | $0.025 | $0.01875 | $0.00625 |

> **Tip:** Pick your operation by the question you're trying to answer. `search` is the cheapest per row (commodity listing data). `forensicsBundle` is the most expensive per row but bundles five upstream calls — equivalent to running 5 detail-style ops for ~1.5–2× the headline detail price.

***

### 🚀 Quick Start

#### 1. Pick your operation

Open the actor in the Apify Console and choose one of the six operations from the dropdown.

#### 2. Provide the required input

- For `search` → just the `destinationName` ("Paris", "Bali", "NYC")
- For `searchByCoordinates` → `latitude` + `longitude` ("48.85668", "2.3514764")
- For `hotelDetail` / `reviews` / `calendarPricing` / `forensicsBundle` → the `hotelId` (find one from a previous `search` run)
- Optional: `checkinDate` / `checkoutDate` (defaults to 30 days from today, 2-night stay)

#### 3. Run

Hit **Start**. Results stream into the default dataset in real time. An HTML report is saved to the key-value store on every run (success or crash).

***

### 📊 Example Inputs

**Hotel search in Paris:**

```json
{
  "operation": "search",
  "destinationName": "Paris",
  "checkinDate": "2026-06-15",
  "checkoutDate": "2026-06-17",
  "adults": 2,
  "rooms": 1,
  "currency": "USD",
  "maxPages": 3
}
```

**Reviews for a specific hotel:**

```json
{
  "operation": "reviews",
  "hotelId": "15854834",
  "sortType": "SORT_MOST_RELEVANT",
  "maxPages": 5
}
```

**Property Forensics bundle:**

```json
{
  "operation": "forensicsBundle",
  "hotelId": "15854834",
  "checkinDate": "2026-06-15",
  "checkoutDate": "2026-06-17"
}
```

**30-day calendar pricing:**

```json
{
  "operation": "calendarPricing",
  "hotelId": "15854834",
  "checkinDate": "2026-06-15",
  "checkoutDate": "2026-06-17",
  "currency": "USD"
}
```

***

### 🎯 Use Cases

- **STR / revenue managers tracking competitor rates** — pull `calendarPricing` daily to extract 30-day forward availability + length-of-stay rules. Feed into a Looker / Sheets dashboard.
- **OTA-competitive analysis** — run `forensicsBundle` on a set of competitor hotels to capture full merchandising data (photos, policies, facilities, review snippets) in a single structured row per property.
- **Brand sentiment & review monitoring** — paginate `reviews` for any hotel and stream rows into a sentiment pipeline. Each review carries traveler type, room name, nights stayed, language, pros/cons split.
- **Travel content sites & metasearch** — power city/region landing pages with `search`, then enrich top results with `hotelDetail` or `forensicsBundle`.
- **PropTech & relocation tools** — combine `searchByCoordinates` with detail bundles to surface lodging options near a workplace, school, or property listing.
- **Lead-gen for travel B2B** — enrich your CRM with structured hotel data: address, ZIP, timezone, currency, accommodation type, star rating, review profile.

***

### 📦 Output Format

Every row carries metadata stamps:

- `_operation` — which mode produced the row
- `_fetchedAt` — ISO timestamp
- `_page` — page number (for paginated ops)
- `_sourceHotelId` / `_sourceDestination` / `_sourceLat` / `_sourceLon` — what you asked for
- `status` — `success` or `error`
- `errorMessage` — populated only when `status === 'error'`

**Search / search-by-coordinates row:**

```json
{
  "_operation": "search",
  "status": "success",
  "hotelId": "15854834",
  "name": "Elegant Sunlit Flat with Balcony near Parc Monceau",
  "accommodationType": "Apartment",
  "address": "17th arr.",
  "city": "Paris",
  "countryCode": "fr",
  "latitude": 48.881,
  "longitude": 2.315,
  "reviewScore": 9.4,
  "reviewScoreWord": "Wonderful",
  "reviewNr": 5,
  "priceTotal": 765.08,
  "currency": "EUR",
  "coverPhotoUrl": "https://cf.bstatic.com/...jpg",
  "hotelPageUrl": "https://www.booking.com/hotel/fr/h15854834.html"
}
```

**Forensics bundle row:**

```json
{
  "_operation": "forensicsBundle",
  "status": "success",
  "hotelId": "15854834",
  "name": "Elegant Sunlit Flat with Balcony near Parc Monceau",
  "details": { /* full /v2/hotels/details response */ },
  "photos": [ { "photoId": "...", "urlMax": "...", "mlTags": [{"tagName":"Bed","confidence":100}, ...] }, ... ],
  "reviewsSample": [ { "author": "Marie", "ratingScore": 9.4, "pros": "...", "cons": "..." }, ... ],
  "reviewsCountTotal": 5,
  "policies": { /* full /v1/hotels/policies response */ },
  "facilities": [ { "facilityName": "Non-smoking rooms", "value": 1, "kind": "boolean" }, ... ],
  "_partialFailures": null
}
```

***

### ❓ FAQ

**Q: Why "Booking.com api" instead of "Booking.com scraper" in the title?**
A: SEO. The Google search volume for "booking.com api" is 32× higher than "booking.com scraper" (320/mo vs 10/mo). Both terms appear in the title for store-search matching.

**Q: How fresh is the data?**
A: Live — every run hits Booking.com via our upstream provider in real time. There is no cache.

**Q: Why does my `forensicsBundle` row have a `_partialFailures` field?**
A: The bundle fans out 5 upstream calls in parallel. If 1–4 of them fail (rate limit, transient 5xx, etc.) the row still ships with the successful endpoints' data; `_partialFailures` lists which ones came back empty so you can re-run those specifically with the dedicated ops (`reviews`, `hotelDetail`, etc.). Only a failed `details` anchor produces an error row.

**Q: Can I get more than ~5 reviews from `forensicsBundle`?**
A: No — Forensics intentionally pulls reviews page 0 only (~5–25 reviews, varies per hotel) to keep margins predictable. For deep review extraction, use the dedicated `reviews` operation which paginates up to 50 pages.

**Q: Does this work for properties outside hotels (apartments, villas, hostels)?**
A: Yes. All accommodation types listed on Booking.com are supported — the `accommodationType` field will tell you what you got back.

**Q: Why doesn't `hotelDetail` return pricing?**
A: Booking's `/v2/hotels/details` is a property-metadata endpoint, not a rate endpoint. For pricing, use `search` (returns price-per-night) or `calendarPricing` (returns 30-day forward availability + LOS rules).

**Q: How does pagination work?**
A: For `search`, `searchByCoordinates`, and `reviews`, the actor uses page-based pagination (`page_number=0, 1, 2, ...`). `maxPages` caps the total. The actor stops early when it sees a partial page (fewer rows than the previous page returned).

***

### ⚠️ Trademark Disclaimer

This is an **independent scraping tool**. It is not affiliated with, endorsed by, or sponsored by Booking Holdings Inc., Booking.com B.V., or any of their subsidiaries. The Booking.com® name appears under nominative fair use to indicate compatibility.

***

### 📜 Legal

Use this actor in compliance with Booking.com's Terms of Service and applicable data-protection laws (GDPR, CCPA, etc.). Do not use it to harvest personal data for unsolicited contact or other regulated purposes without a lawful basis. SIÁN Agency provides this scraping infrastructure as a tool; responsibility for use rests with the operator. See [Apify's blog on legal scraping](https://blog.apify.com/is-web-scraping-legal/).

***

### 📬 Support & Feedback

- **Telegram:** [![SIÁN Telegram](https://img.shields.io/badge/Telegram-SI%C3%81N%20Agency-26A5E4?logo=telegram)](https://t.me/sianagency)
- **Email:** apify@sian-agency.online
- **Issues:** Use the Issues tab inside the Apify Console for actor-specific feedback
- **More from SIÁN:** <https://apify.com/sian.agency?fpr=sian>

***

# Actor input Schema

## `operation` (type: `string`):

📋 Which Booking.com endpoint to run. Each run extracts ONE operation. Pick the right tool for the job:

• **Hotel Search** — paginated list of hotels in a city/destination
• **Hotel Search by Coordinates** — lat/lon based area search
• **Hotel Detail** — full info for one hotel (address, check-in window, currency)
• **Hotel Reviews** — paginated reviews for one hotel
• **Calendar Pricing** — 30-day forward availability + length-of-stay rules
• **Property Forensics Bundle** — premium: 1 row per hotel = details + photos + top reviews + policies + facilities fused

## `destinationName` (type: `string`):

City, region, or neighborhood name. Example: "Paris", "Bali", "New York". The actor resolves it to Booking's internal destination ID automatically.

## `destinationId` (type: `string`):

Skip auto-resolution by passing Booking.com's internal `dest_id` directly. Use when you know it; saves one upstream call.

## `destinationType` (type: `string`):

Booking.com's dest type. Defaults to `city`. Other values: `region`, `district`, `landmark`, `airport`, `hotel`.

## `latitude` (type: `string`):

Decimal latitude. Example: `48.85668` for central Paris.

## `longitude` (type: `string`):

Decimal longitude. Example: `2.3514764` for central Paris.

## `hotelId` (type: `string`):

Booking.com hotel ID. Find one from a previous Hotel Search run (each row carries `hotelId`). Example: `15854834`.

## `checkinDate` (type: `string`):

Check-in date used by search and pricing operations. Defaults to 30 days from today.

## `checkoutDate` (type: `string`):

Check-out date used by search and pricing operations. Defaults to 32 days from today (2-night stay).

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

Guests per booking. Defaults to 2.

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

Rooms requested. Defaults to 1.

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

3-letter currency code (USD, EUR, GBP, etc.). Defaults to USD.

## `orderBy` (type: `string`):

How Booking.com should order the results.

## `sortType` (type: `string`):

How to sort review results.

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

Cap on pages to fetch for paginated operations (search, reviews). Each page = 1 upstream call. Defaults to 5, max 50.

## Actor input object example

```json
{
  "operation": "search",
  "destinationName": "Paris",
  "destinationType": "city",
  "hotelId": "15854834",
  "adults": 2,
  "rooms": 1,
  "currency": "USD",
  "orderBy": "popularity",
  "sortType": "SORT_MOST_RELEVANT",
  "maxPages": 5
}
```

# Actor output Schema

## `output` (type: `string`):

Hotels, reviews, calendar rows, or forensics bundles — one flat row per upstream item with curated camelCase aliases (hotelId, name, address, reviewScore, priceTotal, hotelPageUrl, coverPhotoUrl, etc.) plus the raw upstream fields spread alongside.

## `report` (type: `string`):

Your run at a glance: rows delivered, pages fetched, anything that failed and how to retry it, the exact settings this run used, and an itemized statement of what you paid — written even on fatal crash.

# 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 = {
    "destinationName": "Paris"
};

// Run the Actor and wait for it to finish
const run = await client.actor("sian.agency/booking-com-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 = { "destinationName": "Paris" }

# Run the Actor and wait for it to finish
run = client.actor("sian.agency/booking-com-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 '{
  "destinationName": "Paris"
}' |
apify call sian.agency/booking-com-scraper --silent --output-dataset

```

## MCP server setup

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