# Booking Scraper (`scraper-engine/booking-scraper`) Actor

🏨 Booking Scraper pulls structured hotel data from Booking.com — prices, availability, reviews, ratings, photos, amenities & location. ⚙️ Scheduling, proxy-ready, retries. 📊 Export CSV/JSON or API. 🚀 Ideal for price monitoring, market research, lead gen & travel SEO.

- **URL**: https://apify.com/scraper-engine/booking-scraper.md
- **Developed by:** [Scraper Engine](https://apify.com/scraper-engine) (community)
- **Categories:** Travel, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.99 / 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.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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 Scraper

Booking Scraper is a production-ready Booking.com scraper tool that extracts structured hotel data — prices, availability signals, ratings, reviews count, photos, amenities, and location — from public Booking.com pages. It solves the hassle of manual Booking.com data extraction by automating hotel detail page scraping and optional search-results discovery, making it ideal for marketers, developers, analysts, and researchers who need to scrape Booking.com listings at scale. With proxy fallback, robust retries, and dataset export, this travel website scraper enables repeatable Booking.com scraping without API access for price monitoring, market research, SEO, and lead generation.

### What data / output can you get?

The actor pushes one JSON object per hotel with a consistent schema. Below are representative fields and examples:

| Data field | Description | Example value |
| --- | --- | --- |
| order | 1-based index of the hotel in the run | 1 |
| url | Canonical hotel page URL (when available) | https://www.booking.com/hotel/us/trump-international-new-york.en-gb.html |
| source_url | The exact URL requested by the actor | https://www.booking.com/hotel/us/trump-international-new-york.en-gb.html |
| name | Property name | Trump International New York |
| stars | Star rating (numeric) | 5 |
| price | Extracted lowest available price (if found) | 3067.11 |
| currency | Currency code for the price | USD |
| rating | Guest score (numeric) | 8.9 |
| ratingLabel | Localized label from score or derived | Very good |
| reviews | Reviews count | 842 |
| checkIn / checkOut | House rules time ranges | From 16:00 to 00:00 / From 00:00 to 12:00 |
| location | Latitude/longitude | {"lat": 40.769, "lng": -73.981} |
| address | Basic address fields | {"full":"One Central Park West","country":"US","city":"New York"} |

Bonus outputs include: breakfast availability, rooms (with IDs, occupancy, and per-room price when available), highlights, policies, images and roomImages, categoryReviews (scores by category), hotelChain, licenseInfo, hostInfo, traderInfo (detailed contact and address), breadcrumbs, hotelId, facilities, checkInDate/checkOutDate (from input), timeOfScrapeISO, and startUrlOrQuery. You can export results via the Apify dataset to CSV, JSON, or the API.

### Key features

- ⚙️ Robust proxy fallback & retries — Starts with no proxy, then automatically falls back to datacenter and residential tiers with up to 3 residential retries. Clear [PROXY] logs help you follow tier changes.
- 🧭 Hotel details + optional search — Provide Start URLs for hotel pages or Booking.com searchresults pages, or use a destination query to discover hotels before scraping details.
- 🧩 Rich structured output — Extracts name, stars, price, currency, rating, reviews, breakfast, house rules, location, address, rooms, amenities, images, traderInfo, and more for Booking.com hotel data extraction.
- 🚀 Live dataset streaming — Each hotel record is pushed as soon as it’s scraped, preserving partial results even if a run stops.
- 🌍 Internationalization controls — Configure language and currency to tailor the interface context for your runs.
- 🔎 Flexible filters — Set propertyType, starsCountFilter, minMaxPrice, and sorting to steer what you scrape from search pages.
- 🧑‍💻 Developer-friendly — Integrate via the Apify API; ideal for Booking.com scraping without API constraints and connecting to Booking.com data scraper Python workflows.
- 📈 Built for scale — A resilient online travel agency scraper with Playwright-powered rendering, timeouts tuned for proxies, and structured output ready for analytics.

### How to use Booking Scraper - step by step

1. Sign in to your Apify account and open the Booking Scraper actor.
2. Choose your input strategy:
   - Use “Destination” (search) to discover hotels from a location or landmark.
   - Or paste one or more Booking.com Start URLs (hotel pages or searchresults pages).
3. Configure limits and filters:
   - maxItems to cap the number of hotels per destination or Start URL.
   - propertyType, starsCountFilter, minMaxPrice, sortBy to refine search results.
4. Set dates and travelers:
   - checkIn / checkOut accept absolute (YYYY-MM-DD) or relative (e.g., “2 weeks”); flexWindow can allow ± shifts.
   - rooms, adults, children to control occupancy for availability-sensitive data like price.
5. Choose language and currency:
   - language (e.g., en-gb) and currency (e.g., USD) for the Booking.com interface context.
6. Review proxy settings:
   - proxyConfiguration defaults to no proxy; on blocks, the actor automatically falls back to datacenter and then residential proxy tiers.
7. Start the run:
   - Watch logs for progress and [PROXY] messages. The actor processes search results (if provided) and then scrapes each hotel detail page.
8. Export results:
   - Open the dataset to preview and export to JSON or CSV, or access via the Apify API.

Pro Tip: Chain this Booking.com web scraping service with your data pipeline — trigger runs from your CI/CD, pull results via API, and feed them into dashboards or pricing systems.

### Use cases

| Use case | Description |
| --- | --- |
| Market research for OTAs | Analyze competitors by collecting stars, prices, ratings, facilities, and images at scale with a travel website scraper. |
| Price monitoring & alerts | Track nightly rates with a Booking.com price scraper and export to your BI system for dynamic pricing. |
| SEO & content enrichment | Enrich travel content with up-to-date hotel details, amenities, and photos pulled from public hotel pages. |
| Lead generation | Extract traderInfo contact and address fields for supplier outreach and B2B workflows. |
| Data science & analytics | Build datasets for modeling demand, rating distributions, or category review scores with Booking.com hotel data extraction. |
| Academic research | Study location-based accommodation patterns using a repeatable Booking.com scraper for cities and regions. |
| API pipelines | Integrate results into internal apps via the Apify API for Booking.com scraping without API dependencies. |

### Why choose Booking Scraper?

Booking Scraper delivers precision, automation, and reliability for Booking.com data extraction at scale.

- 🎯 Accurate hotel detail parsing using Apollo state, schema.org JSON-LD, and HTML fallbacks.
- 🛡️ Automatic proxy fallback (NO_PROXY → DATACENTER → RESIDENTIAL) with up to 3 residential retries and clear logging.
- 📦 Consistent, analytics-ready JSON schema with room-level prices, amenities, and contact data.
- 🌐 Multilingual and currency-aware via input parameters for interface language and currency.
- 🧑‍💻 Developer access via the Apify API, perfect for Booking.com data scraper Python pipelines.
- ⚡ Superior to extensions or brittle scripts — production-ready infrastructure with Playwright and timeouts tuned for proxies.
- 🔗 Export via dataset to CSV/JSON or your API consumer for downstream processing.

In short, this Booking.com scraper tool focuses on stable, structured output and resilient operations — ideal for both experiments and production.

### Is it legal / ethical to use Booking Scraper?

Yes — when used responsibly. This actor scrapes publicly available Booking.com pages and does not access private or authenticated content. You are responsible for compliance with applicable laws (e.g., GDPR/CCPA) and Booking.com’s terms. Use reasonable limits, collect public data only, and consult your legal team for your specific use case.

### Input parameters & output format

Example JSON input

```json
{
  "search": "New York",
  "startUrls": [
    { "url": "https://www.booking.com/searchresults.en-gb.html?ss=New+York" }
  ],
  "maxItems": 10,
  "scrapeAdditionalHotelData": true,
  "propertyType": "none",
  "sortBy": "distance_from_search",
  "minimumRating": "",
  "starsCountFilter": "any",
  "currency": "USD",
  "language": "en-gb",
  "checkIn": "2 weeks",
  "checkOut": "3 weeks",
  "flexWindow": "0",
  "rooms": 1,
  "adults": 2,
  "children": 0,
  "minMaxPrice": "0-999999",
  "proxyConfiguration": { "useApifyProxy": false }
}
````

Each input field (all optional; none are required):

- search (string) — City, region, or landmark to search for accommodation (e.g., New York, Paris). Default: "New York". Required: no.
- startUrls (array) — Add one or more Booking.com URLs: hotel detail pages or search results pages. Default: \[]. Required: no.
- maxItems (integer) — Maximum number of hotels to scrape per destination or per start URL. Default: 10. Required: no.
- scrapeAdditionalHotelData (boolean) — Extract full hotel data including rooms, facilities, trader info, and images for each property. Default: true. Required: no.
- propertyType (string) — Filter by type of accommodation. Default: "none". Required: no.
- sortBy (string) — How to sort search results. Default: "distance\_from\_search". Required: no.
- minimumRating (string) — Minimum guest rating (e.g., 7, 8, 9). Leave empty for no filter. Default: "". Required: no.
- starsCountFilter (string) — Filter by star rating. Default: "any". Required: no.
- currency (string) — Preferred currency for displayed prices. Default: "USD". Required: no.
- language (string) — Interface language for the search. Default: "en-gb". Required: no.
- checkIn (string) — Absolute (YYYY-MM-DD) or relative date (e.g., 2 weeks). Default: "". Required: no.
- checkOut (string) — Absolute (YYYY-MM-DD) or relative date (e.g., 1 week). Default: "". Required: no.
- flexWindow (string) — Stay date flexibility in days (e.g., ±1, ±2, ±3, ±7). Default: "0". Required: no.
- rooms (integer) — Number of rooms for the stay. Default: 1. Required: no.
- adults (integer) — Number of adult guests. Default: 2. Required: no.
- children (integer) — Number of children. Default: 0. Required: no.
- minMaxPrice (string) — Min-max price filter (e.g., 50-200 or 100+ for minimum only). Default: "0-999999". Required: no.
- proxyConfiguration (object) — By default no proxy is used. If Booking.com blocks requests, the actor falls back to datacenter then residential proxy. Default: {"useApifyProxy": false}. Required: no.

Example JSON output (one item per hotel)

```json
{
  "order": 1,
  "url": "https://www.booking.com/hotel/us/trump-international-new-york.en-gb.html",
  "startUrlOrQuery": "New York",
  "name": "Trump International New York",
  "type": "hotel",
  "description": "Located at the juncture of Columbus Circle and Broadway...",
  "stars": 5,
  "price": 3067.11,
  "currency": "USD",
  "rating": 8.9,
  "ratingLabel": "Very good",
  "reviews": 842,
  "breakfast": "Available",
  "checkIn": "From 16:00 to 00:00",
  "checkOut": "From 00:00 to 12:00",
  "checkInDate": "2026-05-10",
  "checkOutDate": "2026-05-17",
  "location": { "lat": 40.769, "lng": -73.981 },
  "address": { "full": "One Central Park West", "country": "US", "city": "New York" },
  "image": "https://cf.bstatic.com/sample.jpg",
  "rooms": [
    {
      "id": "12345",
      "name": "Deluxe King Room",
      "description": "Spacious room with city view",
      "size": "45 m²",
      "occupancy": 2,
      "price": 3067.11
    }
  ],
  "highlights": ["City view", "Free WiFi", "Fitness center"],
  "finePrint": "Guests are required to show a photo identification and credit card upon check-in.",
  "policies": ["City view", "Free WiFi", "Fitness center"],
  "images": [
    "https://cf.bstatic.com/photo1.jpg",
    "https://cf.bstatic.com/photo2.jpg"
  ],
  "roomImages": [
    {
      "roomId": "12345",
      "images": [
        "https://cf.bstatic.com/room1_photo1.jpg",
        "https://cf.bstatic.com/room1_photo2.jpg"
      ]
    }
  ],
  "categoryReviews": [
    { "name": "Cleanliness", "score": 9.2 },
    { "name": "Location", "score": 9.6 }
  ],
  "hotelChain": null,
  "licenseInfo": null,
  "hostInfo": null,
  "traderInfo": {
    "isBusiness": true,
    "email": "info@example.com",
    "phone": "+1 555-1234",
    "companyName": "Hotel Operator LLC",
    "firstName": "John",
    "middleName": null,
    "lastName": "Doe",
    "registrationNumber": "RN-123",
    "tradeRegisterName": "NY Registry",
    "address": {
      "street": "1 Central Park West",
      "street2": null,
      "postalCode": "10023",
      "city": "New York",
      "countryCode": "US",
      "state": "NY"
    }
  },
  "breadcrumbs": [
    { "name": "United States", "url": "/country/us.html" },
    { "name": "New York", "url": "/city/us/new-york.html" }
  ],
  "hotelId": "98765",
  "facilities": [
    { "name": "Free Wifi", "id": "wifi" },
    { "name": "Fitness Center", "id": "gym" }
  ],
  "timeOfScrapeISO": "2026-05-01T12:00:00.000Z",
  "source_url": "https://www.booking.com/hotel/us/trump-international-new-york.en-gb.html"
}
```

Notes:

- Fields like price, images, roomImages, traderInfo, hotelChain, licenseInfo, hostInfo may be null or partially populated if not present on the page.
- policies echoes the first three highlights by design.

### FAQ

#### Do I need to enable a proxy to run this Booking.com scraper?

No. By default, requests are sent without a proxy. If Booking.com blocks or rejects a request, the actor automatically falls back to a datacenter proxy and then to a residential proxy, with up to 3 residential retries. You’ll see clear \[PROXY] logs when tiers change.

#### Can I scrape hotels starting from a search query instead of URLs?

Yes. Set the “Destination” (search) input to discover hotels from a location or landmark. You can also provide searchresults Start URLs. The actor collects hotel links from the results and then scrapes each hotel detail page.

#### Does this Booking.com reviews scraper extract individual reviews?

It extracts the overall rating, reviews count, ratingLabel, and categoryReviews (scores by category), not per-review text. This provides a lightweight reviews summary suitable for analytics.

#### How many hotels can I scrape per run?

Use maxItems to limit results per destination or per Start URL. The default is 10 and you can set up to 100.

#### Can I control language and currency?

Yes. The language and currency parameters let you choose the interface language (e.g., en-gb) and currency (e.g., USD) for your Booking.com data extraction workflow.

#### Can I filter by stars, property type, or price?

Yes. Use starsCountFilter, propertyType, minMaxPrice, and sortBy to steer which hotels are collected from search results before details are extracted.

#### Does it work as a Booking.com scraping without API solution?

Yes. This is an Apify-powered Booking.com scraper tool that uses public pages and Playwright rendering, so you can integrate it via the Apify API or connect it with your Booking.com data scraper Python pipeline.

#### Where do results go and how do I export them?

Each hotel is pushed to the run’s dataset in real time. From there, you can export to JSON or CSV, or consume the data via the Apify API.

### Closing CTA / Final thoughts

Booking Scraper is built to extract clean, structured Booking.com hotel data at scale with resilient proxy fallback and consistent output. Configure your destination, filters, language, and currency, then export results to CSV/JSON or pull them via API. It’s ideal for marketers, developers, data analysts, and researchers who need a reliable hotel booking scraper for price tracking, market research, and travel SEO. Ready to automate? Plug it into your API or Python workflow and start extracting smarter today.

# Actor input Schema

## `search` (type: `string`):

City, region, or landmark to search for accommodation (e.g. New York, Paris).

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

Add one or more Booking.com URLs: hotel detail pages or search results pages. Use Add, Bulk edit, or paste URLs.

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

Maximum number of hotels to scrape per destination or per start URL.

## `scrapeAdditionalHotelData` (type: `boolean`):

Extract full hotel data including rooms, facilities, trader info, and images for each property.

## `propertyType` (type: `string`):

Filter by type of accommodation.

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

How to sort search results.

## `minimumRating` (type: `string`):

Minimum guest rating (e.g. 7, 8, 9). Leave empty for no filter.

## `starsCountFilter` (type: `string`):

Filter by star rating.

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

Currency for displayed prices.

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

Interface language for the search.

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

Select absolute date (YYYY-MM-DD) or relative (e.g. 2 weeks). Leave empty for flexible search.

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

Select absolute date (YYYY-MM-DD) or relative (e.g. 1 week). Leave empty for flexible search.

## `flexWindow` (type: `string`):

Allow dates to shift by this many days. Use 0 for exact dates only.

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

Number of rooms for the stay.

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

Number of adult guests.

## `children` (type: `integer`):

Number of children.

## `minMaxPrice` (type: `string`):

Min-max price filter, e.g. 50-200 or 100+ for minimum only.

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

By default no proxy is used. If Booking.com blocks requests, the actor falls back to datacenter then residential proxy.

## Actor input object example

```json
{
  "search": "New York",
  "startUrls": [],
  "maxItems": 10,
  "scrapeAdditionalHotelData": true,
  "propertyType": "none",
  "sortBy": "distance_from_search",
  "minimumRating": "",
  "starsCountFilter": "any",
  "currency": "USD",
  "language": "en-gb",
  "checkIn": "",
  "checkOut": "",
  "flexWindow": "0",
  "rooms": 1,
  "adults": 2,
  "children": 0,
  "minMaxPrice": "0-999999",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# 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 = {
    "search": "New York",
    "startUrls": [],
    "maxItems": 10,
    "scrapeAdditionalHotelData": true,
    "propertyType": "none",
    "sortBy": "distance_from_search",
    "minimumRating": "",
    "starsCountFilter": "any",
    "currency": "USD",
    "language": "en-gb",
    "checkIn": "",
    "checkOut": "",
    "flexWindow": "0",
    "rooms": 1,
    "adults": 2,
    "children": 0,
    "minMaxPrice": "0-999999",
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scraper-engine/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 = {
    "search": "New York",
    "startUrls": [],
    "maxItems": 10,
    "scrapeAdditionalHotelData": True,
    "propertyType": "none",
    "sortBy": "distance_from_search",
    "minimumRating": "",
    "starsCountFilter": "any",
    "currency": "USD",
    "language": "en-gb",
    "checkIn": "",
    "checkOut": "",
    "flexWindow": "0",
    "rooms": 1,
    "adults": 2,
    "children": 0,
    "minMaxPrice": "0-999999",
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("scraper-engine/booking-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "search": "New York",
  "startUrls": [],
  "maxItems": 10,
  "scrapeAdditionalHotelData": true,
  "propertyType": "none",
  "sortBy": "distance_from_search",
  "minimumRating": "",
  "starsCountFilter": "any",
  "currency": "USD",
  "language": "en-gb",
  "checkIn": "",
  "checkOut": "",
  "flexWindow": "0",
  "rooms": 1,
  "adults": 2,
  "children": 0,
  "minMaxPrice": "0-999999",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call scraper-engine/booking-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=scraper-engine/booking-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Booking Scraper",
        "description": "🏨 Booking Scraper pulls structured hotel data from Booking.com — prices, availability, reviews, ratings, photos, amenities & location. ⚙️ Scheduling, proxy-ready, retries. 📊 Export CSV/JSON or API. 🚀 Ideal for price monitoring, market research, lead gen & travel SEO.",
        "version": "0.1",
        "x-build-id": "5s09oJ5QFVFNxTG7Z"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/scraper-engine~booking-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-scraper-engine-booking-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/scraper-engine~booking-scraper/runs": {
            "post": {
                "operationId": "runs-sync-scraper-engine-booking-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/scraper-engine~booking-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-scraper-engine-booking-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "search": {
                        "title": "Destination",
                        "type": "string",
                        "description": "City, region, or landmark to search for accommodation (e.g. New York, Paris).",
                        "default": "New York"
                    },
                    "startUrls": {
                        "title": "Or use Start URLs instead",
                        "type": "array",
                        "description": "Add one or more Booking.com URLs: hotel detail pages or search results pages. Use Add, Bulk edit, or paste URLs.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "maxItems": {
                        "title": "Max results per destination or URL",
                        "minimum": 1,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Maximum number of hotels to scrape per destination or per start URL.",
                        "default": 10
                    },
                    "scrapeAdditionalHotelData": {
                        "title": "Scrape additional hotel data",
                        "type": "boolean",
                        "description": "Extract full hotel data including rooms, facilities, trader info, and images for each property.",
                        "default": true
                    },
                    "propertyType": {
                        "title": "Property type",
                        "enum": [
                            "none",
                            "hotels",
                            "apartments",
                            "hostels",
                            "guest houses",
                            "homestays",
                            "bed and breakfasts",
                            "holiday homes",
                            "boats",
                            "villas",
                            "motels",
                            "resorts",
                            "holiday parks",
                            "campsites",
                            "luxury tents"
                        ],
                        "type": "string",
                        "description": "Filter by type of accommodation.",
                        "default": "none"
                    },
                    "sortBy": {
                        "title": "Order results by",
                        "enum": [
                            "distance_from_search",
                            "price",
                            "review_score_and_price",
                            "review_score",
                            "star_rating"
                        ],
                        "type": "string",
                        "description": "How to sort search results.",
                        "default": "distance_from_search"
                    },
                    "minimumRating": {
                        "title": "Minimum rating",
                        "type": "string",
                        "description": "Minimum guest rating (e.g. 7, 8, 9). Leave empty for no filter.",
                        "default": ""
                    },
                    "starsCountFilter": {
                        "title": "Stars count",
                        "enum": [
                            "any",
                            "3",
                            "4",
                            "5",
                            "1",
                            "2"
                        ],
                        "type": "string",
                        "description": "Filter by star rating.",
                        "default": "any"
                    },
                    "currency": {
                        "title": "Preferred currency",
                        "enum": [
                            "USD",
                            "EUR",
                            "GBP",
                            "CAD",
                            "AUD",
                            "CHF",
                            "JPY",
                            "CNY",
                            "INR",
                            "BRL",
                            "MXN"
                        ],
                        "type": "string",
                        "description": "Currency for displayed prices.",
                        "default": "USD"
                    },
                    "language": {
                        "title": "Language",
                        "enum": [
                            "en-gb",
                            "en-us",
                            "de",
                            "fr",
                            "es",
                            "it",
                            "pt-br",
                            "nl",
                            "pl",
                            "ru",
                            "ja",
                            "zh"
                        ],
                        "type": "string",
                        "description": "Interface language for the search.",
                        "default": "en-gb"
                    },
                    "checkIn": {
                        "title": "Check-in date",
                        "pattern": "^(\\d{4})-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$|^(\\d+)\\s*(day|week|month|year)s?$|^$",
                        "type": "string",
                        "description": "Select absolute date (YYYY-MM-DD) or relative (e.g. 2 weeks). Leave empty for flexible search.",
                        "default": ""
                    },
                    "checkOut": {
                        "title": "Check-out date",
                        "pattern": "^(\\d{4})-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$|^(\\d+)\\s*(day|week|month|year)s?$|^$",
                        "type": "string",
                        "description": "Select absolute date (YYYY-MM-DD) or relative (e.g. 1 week). Leave empty for flexible search.",
                        "default": ""
                    },
                    "flexWindow": {
                        "title": "Stay date flexibility (days)",
                        "enum": [
                            "0",
                            "1",
                            "2",
                            "3",
                            "7"
                        ],
                        "type": "string",
                        "description": "Allow dates to shift by this many days. Use 0 for exact dates only.",
                        "default": "0"
                    },
                    "rooms": {
                        "title": "Number of rooms",
                        "minimum": 1,
                        "maximum": 9,
                        "type": "integer",
                        "description": "Number of rooms for the stay.",
                        "default": 1
                    },
                    "adults": {
                        "title": "Number of adults",
                        "minimum": 1,
                        "maximum": 30,
                        "type": "integer",
                        "description": "Number of adult guests.",
                        "default": 2
                    },
                    "children": {
                        "title": "Number of children",
                        "minimum": 0,
                        "maximum": 30,
                        "type": "integer",
                        "description": "Number of children.",
                        "default": 0
                    },
                    "minMaxPrice": {
                        "title": "Price range",
                        "type": "string",
                        "description": "Min-max price filter, e.g. 50-200 or 100+ for minimum only.",
                        "default": "0-999999"
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "By default no proxy is used. If Booking.com blocks requests, the actor falls back to datacenter then residential proxy."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
