# Booking Scraper (`scrapier/bookingscraper`) Actor

🏨 BookingScraper extracts hotel & apartment data from Booking.com — listings, prices, real-time availability, amenities, reviews & ratings — at scale. ⚡ Export to CSV/JSON/API for market research, price monitoring, competitor analysis & travel apps. 🔍 Fast, reliable, proxy-ready.

- **URL**: https://apify.com/scrapier/bookingscraper.md
- **Developed by:** [Scrapier](https://apify.com/scrapier) (community)
- **Categories:** Travel, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.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

The Booking Scraper is a production-ready Apify actor that extracts structured hotel and apartment data from Booking.com at scale — including listings, prices, ratings, amenities, images, and more. It solves the hassle of manual copy-paste and inconsistent formats by turning public hotel pages and search results into clean JSON you can export via API or CSV. Built for marketers, developers, data analysts, and researchers, this booking.com scraper supports market research, hotel rate monitoring, and booking.com price tracking with robust proxy fallback and reliable, repeatable runs.

### What data / output can you get?

Below are example fields this booking.com data extraction actor pushes to the dataset. Each result is one hotel:

| Data type | Description | Example value |
| --- | --- | --- |
| order | 1-based index of the hotel in the run | 1 |
| url | Canonical Booking.com URL for the property | 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 | Hotel/property name | Trump International New York |
| type | Property type label | hotel |
| price | Lowest detected price for stay (if available) | 3067.11 |
| currency | Currency code for the detected price | USD |
| rating | Guest score | 8.9 |
| ratingLabel | Score label from Booking.com or inferred | Very good |
| reviews | Number of reviews | 842 |
| checkIn / checkOut | House rules time ranges (if available) | From 16:00 to 00:00 / From 00:00 to 12:00 |
| checkInDate / checkOutDate | Dates used for the search (if provided) | 2026-03-25 / 2026-03-31 |
| location | Latitude/longitude coordinates | {"lat": 40.769, "lng": -73.981} |
| address | Structured address fields | {"full": "One Central Park West", "country": "US", "city": "New York"} |
| rooms | Room cards with ids, names, occupancy, and price (if available) | [{"id":"123","name":"Deluxe Room","price":450.0}] |
| images | Main image URLs | ["https://cf.bstatic.com/..."] |
| roomImages | Per-room image groups | [{"roomId":"123","images":["https://cf.bstatic.com/..."]}] |
| facilities | Facility list with ids | [{"name":"Free Wifi","id":"42"}] |
| highlights | Highlighted amenities/features | ["City view","Breakfast included"] |
| finePrint | Fine print text (if present) | City tax not included... |
| categoryReviews | Category-level review scores | [{"name":"Cleanliness","score":9.1}] |
| hotelChain | Chain name (if detected) | Marriott |
| licenseInfo | License number (if available) | 12345/2024 |
| hostInfo | Host or contact person (if applicable) | John Doe |
| traderInfo | Business/contact details including address | {"isBusiness":true,"email":"info@hotel.com",...} |
| breadcrumbs | Hierarchical navigation items | [{"name":"New York","url":"..."}] |
| hotelId | Internal Booking.com hotel id | 123456 |
| timeOfScrapeISO | UTC timestamp of scrape | 2026-03-15T12:00:00.000Z |
| startUrlOrQuery | Search query or start URL for this item | New York |

Bonus: You also get an “image” field (first image URL), “policies” (subset of highlights), and a “stars” field when present.

Export your dataset to CSV or JSON, or consume it directly via the Apify API for pipelines such as booking.com web scraping dashboards, booking data scraper API integrations, or travel site scraping tools.

### Key features

- 🔎 Accurate hotel detail extraction
  Uses multiple sources on the page — Apollo state, schema.org JSON-LD, and HTML fallbacks — to populate fields consistently for the booking.com hotel listings scraper.

- 🌍 Search results to hotel pages
  Start from a destination query or Booking.com search URL to gather hotel links, then scrape each detail page for complete booking.com data extraction.

- 🛡️ Smart proxy fallback
  No proxy by default; automatic cascade to DATACENTER then RESIDENTIAL with up to 3 retries on residential when blocks occur. Clear [PROXY] logs throughout — ideal for OTA scraping for hotels at scale.

- 💾 Live dataset streaming
  Each hotel is pushed as soon as it’s scraped, ensuring partial results are saved even if a run is interrupted — perfect for booking.com price tracking and hotel rate monitoring scraper workflows.

- ⚙️ Configurable search & filters
  Control currency, language, property type, star rating filter, price range, date flexibility, and more directly from input parameters.

- 🔌 Developer-friendly API
  Built on the Apify platform with clean, structured outputs for downstream workflows, integrations, and “booking.com scraper Python” use via the Apify API or SDK.

- 🚀 Production-ready reliability
  Headless Chromium with tuned timeouts, retries, and optional browser-like HTTP fallback on search pages helps reduce blocks for steady booking.com web scraping.

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

1. Create or log in to your Apify account at https://console.apify.com.
2. Open Actors and find “BookingScraper”, then click Try or Run.
3. Choose how to start:
   - To discover hotels from a destination, set “search” (e.g., New York).
   - Or paste Booking.com URLs into “startUrls” (hotel detail pages or search results pages).
4. Configure key settings:
   - “maxItems” to limit results per destination or per start URL (default 10, up to 100).
   - Dates via “checkIn” and “checkOut” as YYYY-MM-DD or relative (e.g., 2 weeks). “flexWindow” can add ± flexibility.
   - Filters like “propertyType”, “starsCountFilter”, “minMaxPrice”, “currency”, and “language”.
5. Set proxy behavior (optional):
   - Leave “proxyConfiguration” with useApifyProxy=false to start without proxy. If blocked, the actor automatically falls back to datacenter then residential proxy.
6. Start the run:
   - Click Start. Watch the console logs for progress and [PROXY] messages if fallback is triggered.
7. Review and export results:
   - Open the Dataset to view items as a table or JSON. Export to JSON or CSV, or query via the Apify API.

Pro tip: You can enter relative dates like “2 weeks” for check-in/out. The actor resolves them to absolute dates automatically, making recurring booking.com data extraction easier to schedule.

### Use cases

| Use case name | Description |
| --- | --- |
| Market research for travel | Analyze cities or regions by scraping Booking.com public data — names, prices, ratings, facilities — to quantify supply and demand. |
| Competitor price benchmarking | Monitor competitor rates and rating trends using a booking.com competitor price scraper to inform pricing strategy. |
| Hotel rate monitoring | Automate hotel rate monitoring scraper runs with date filters to track price movements by season or event windows. |
| Travel app inventory | Feed your travel site scraping tool with structured hotel details and images to power search and discovery. |
| Data enrichment for analytics | Blend booking.com data extraction with internal datasets for dashboards on occupancy proxies, review scores, and property types. |
| Academic & policy studies | Collect standardized samples for tourism research (e.g., star ratings, facilities, pricing bands) across geographies. |
| Booking.com API alternative | Use this booking data scraper API approach to avoid official API constraints when working with public web data. |

### Why choose Booking Scraper?

This Booking Scraper prioritizes precision, resilience, and clean outputs for professional data workflows.

- ✅ Accurate multi-source parsing for robust results (Apollo state, schema.org, HTML).
- ⚡ Scalable scraping from destination queries or bulk start URLs.
- 🔁 Resilient proxy strategy with automatic fallbacks and retries when blocked.
- 🔗 API-first outputs for pipelines and booking.com scraper Python integrations.
- 🧭 Clear logs and progress messages for transparent monitoring.
- 🔒 No login or cookies required — extracts only public Booking.com pages.
- 📦 Export-ready dataset structure for CSV/JSON/API consumption.

Compared to unstable browser extensions, this production-grade booking.com scraper delivers repeatable, structured results with infrastructure designed for scale and reliability.

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

Yes — when used responsibly. This actor scrapes publicly available information on Booking.com hotel pages and does not access private or authenticated content. You are responsible for ensuring compliant use in your jurisdiction.

Guidelines:
- Only collect public data and avoid personal or private information.
- Understand and respect Booking.com’s terms and applicable laws (e.g., GDPR, CCPA).
- Use reasonable limits and avoid abuse that could harm service availability.
- Consult your legal team for edge cases or commercial redistribution.

### Input parameters & output format

Example JSON input
```json
{
  "search": "New York",
  "startUrls": [
    { "url": "https://www.booking.com/searchresults.en-gb.html?ss=New%20York" }
  ],
  "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
  }
}
````

Input field reference

- search (string, default: "New York", required: no) — City, region, or landmark to search for accommodation.
- startUrls (array, default: \[], required: no) — Booking.com hotel detail or search results URLs. Accepts objects with “url” or strings.
- maxItems (integer, default: 10, min: 1, max: 100, required: no) — Max number of hotels to scrape per destination or per start URL.
- scrapeAdditionalHotelData (boolean, default: true, required: no) — Extract additional hotel data, including rooms, facilities, trader info, and images.
- propertyType (string, default: "none", required: no) — Filter by accommodation type. Options: none, hotels, apartments, hostels, guest houses, homestays, bed and breakfasts, holiday homes, boats, villas, motels, resorts, holiday parks, campsites, luxury tents.
- sortBy (string, default: "distance\_from\_search", required: no) — How to sort search results. Options: distance\_from\_search, price, review\_score\_and\_price, review\_score, star\_rating.
- minimumRating (string, default: "", required: no) — Minimum guest rating (e.g., 7, 8, 9). Leave empty for no filter.
- starsCountFilter (string, default: "any", required: no) — Star rating filter. Options: any, 3, 4, 5, 1, 2.
- currency (string, default: "USD", required: no) — Preferred currency for displayed prices.
- language (string, default: "en-gb", required: no) — Interface language for the search.
- checkIn (string, default: "", required: no) — Absolute (YYYY-MM-DD) or relative date (e.g., 2 weeks). Leave empty for flexible search.
- checkOut (string, default: "", required: no) — Absolute (YYYY-MM-DD) or relative date (e.g., 1 week). Leave empty for flexible search.
- flexWindow (string, default: "0", required: no) — Date flexibility. Options: 0, 1, 2, 3, 7.
- rooms (integer, default: 1, required: no) — Number of rooms for the stay.
- adults (integer, default: 2, required: no) — Number of adult guests.
- children (integer, default: 0, required: no) — Number of children.
- minMaxPrice (string, default: "0-999999", required: no) — Min-max price filter, e.g., 50-200 or 100+ for minimum only.
- proxyConfiguration (object, default: {"useApifyProxy": false}, required: no) — By default no proxy is used. On blocks, the actor falls back to datacenter then residential proxy.

Example JSON output

```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-03-25",
  "checkOutDate": "2026-03-31",
  "location": { "lat": 40.769, "lng": -73.981 },
  "address": {
    "full": "One Central Park West",
    "country": "US",
    "city": "New York"
  },
  "image": "https://cf.bstatic.com/images/hotel/max1024x768/123/123.jpg",
  "rooms": [
    { "id": "123", "name": "Deluxe Room", "description": "Spacious city view", "size": null, "occupancy": 2, "price": 450.0 }
  ],
  "highlights": ["City view", "Breakfast included", "Free Wifi"],
  "finePrint": "City tax not included.",
  "policies": ["City view", "Breakfast included", "Free Wifi"],
  "images": ["https://cf.bstatic.com/images/hotel/max1024x768/123/123.jpg"],
  "roomImages": [
    { "roomId": "123", "images": ["https://cf.bstatic.com/images/hotel/max1024x768/123/room1.jpg"] }
  ],
  "categoryReviews": [
    { "name": "Cleanliness", "score": 9.1 }
  ],
  "hotelChain": null,
  "licenseInfo": null,
  "hostInfo": null,
  "traderInfo": {
    "isBusiness": true,
    "email": "info@hotel.com",
    "phone": "+1 212-555-0100",
    "companyName": "Hotel LLC",
    "firstName": "John",
    "middleName": null,
    "lastName": "Doe",
    "registrationNumber": "AB-12345",
    "tradeRegisterName": "NYC",
    "address": {
      "street": "One Central Park West",
      "street2": null,
      "postalCode": "10023",
      "city": "New York",
      "countryCode": "US",
      "state": "NY"
    }
  },
  "breadcrumbs": [
    { "name": "New York", "url": "https://www.booking.com/city/us/new-york.html" }
  ],
  "hotelId": "123456",
  "facilities": [
    { "name": "Free Wifi", "id": "42" }
  ],
  "timeOfScrapeISO": "2026-03-15T12:00:00.000Z",
  "source_url": "https://www.booking.com/hotel/us/trump-international-new-york.en-gb.html"
}
```

Notes:

- Some fields may be null or empty when not present on the page (e.g., hotelChain, licenseInfo, hostInfo, price without availability).
- The actor sets “timeOfScrapeISO” at runtime and adds the original “source\_url” for traceability.

### FAQ

#### Do I need a proxy to use this booking.com scraper?

No. By default, the actor starts with no proxy. If Booking.com blocks requests, it automatically falls back to a datacenter proxy and then a residential proxy with up to three retries, logging each \[PROXY] event.

#### Can I start from a destination instead of URLs?

Yes. Set the “search” field (for example, “Paris” or “New York”). The actor will build a Booking.com search URL, collect hotel links, and then scrape each hotel page up to “maxItems”.

#### How do I track prices by date range?

Provide “checkIn” and “checkOut” as absolute dates (YYYY-MM-DD) or relative strings like “2 weeks”. The actor resolves relative dates and attempts to extract room-level prices for the selected stay — ideal for booking.com price tracking and competitor monitoring.

#### Does it scrape availability and room details?

The actor extracts rooms and detects prices when available on the public hotel page for the given dates. If availability is limited or the page doesn’t expose prices, room price fields may be null, but room names and IDs are still included when present.

#### Can I integrate this with Python or use an API?

Yes. All outputs are stored in an Apify dataset, which you can access via the Apify API for pipelines or use from Python scripts — a practical booking data scraper API alternative to build automation workflows.

#### How many results can I get per run?

Use “maxItems” to control results per destination or per start URL. The default is 10 and the maximum is 100 per input unit, making it suitable for batch runs of a booking.com hotel listings scraper.

#### Which languages and currencies are supported?

Set “language” (e.g., en-gb, de, fr, es) and “currency” (e.g., USD, EUR, GBP, JPY) in the input. The actor will request pages accordingly to improve consistency for booking.com data extraction.

#### Is it legal to scrape Booking.com?

Yes — when done responsibly with public pages only. This tool accesses publicly available content. You’re responsible for complying with Booking.com’s terms and regulations like GDPR/CCPA in your use case.

### Closing thoughts

The Booking Scraper is built to turn public Booking.com pages into structured, analysis-ready data. With accurate extraction, resilient proxy fallback, and export-ready JSON/CSV via API, it empowers marketers, developers, analysts, and researchers to automate booking.com web scraping for price monitoring, market research, and travel apps. Connect the dataset to your pipelines (API/SDK) or “booking.com scraper Python” workflows and start extracting smarter travel insights at scale.

# 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("scrapier/bookingscraper").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("scrapier/bookingscraper").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 scrapier/bookingscraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Booking Scraper",
        "description": "🏨 BookingScraper extracts hotel & apartment data from Booking.com — listings, prices, real-time availability, amenities, reviews & ratings — at scale. ⚡ Export to CSV/JSON/API for market research, price monitoring, competitor analysis & travel apps. 🔍 Fast, reliable, proxy-ready.",
        "version": "0.1",
        "x-build-id": "3Twh9shC00Nt9PKgE"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/scrapier~bookingscraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-scrapier-bookingscraper",
                "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/scrapier~bookingscraper/runs": {
            "post": {
                "operationId": "runs-sync-scrapier-bookingscraper",
                "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/scrapier~bookingscraper/run-sync": {
            "post": {
                "operationId": "run-sync-scrapier-bookingscraper",
                "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
