# Booking.com Hotel Search Scraper (`corent1robert/booking-hotel-search`) Actor

Search Booking.com by destination text or URL — get all hotels with prices, ratings, coordinates, free cancellation flags, and promo badges. Beats the 1,000 result cap. HTTP-only, fast, reliable.

- **URL**: https://apify.com/corent1robert/booking-hotel-search.md
- **Developed by:** [Corentin Robert](https://apify.com/corent1robert) (community)
- **Categories:** Travel, Automation, Developer tools
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.80 / 1,000 hotel scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/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.com Hotel Search Scraper

Type a destination, get every hotel on Booking.com — with prices, ratings, photos, and availability policies. Ready to export in seconds.

**No login. No Booking.com account. No setup.**

---

### Who is this for?

| You are… | What you get |
|---|---|
| **Travel startup or OTA** | A full hotel catalog with prices and coordinates, ready to feed your product |
| **Revenue manager** | Every competitor's rate for your market, for any date window you pick |
| **Market researcher** | A complete snapshot of a city's hotel supply — prices, star mix, availability |
| **Hospitality investor** | Accommodation density and pricing across any neighbourhood |
| **Data journalist** | Tourism pricing data, structured and ready to analyze |
| **Developer or agency** | A clean, structured dataset without building or maintaining a scraper |

> **Not sure it covers your city?** This scraper automatically works around Booking.com's 1,000-result cap — it typically returns 3,000–5,000+ hotels for major cities like Paris or London.

---

### Quick start

#### Option A — Just type your destination

1. Open the actor on Apify Console
2. Type where you want to search: `Paris, France` or `Barcelona`
3. Set your check-in and check-out dates *(optional — leave blank for indicative prices)*
4. Click **Start** — results appear in your dataset within minutes

#### Option B — Copy a URL from Booking.com *(keep your filters)*

Already have the exact search you want on Booking.com? Copy the URL and paste it in.

1. Go to [booking.com](https://www.booking.com) and search for a city
2. Apply any filters you want (star rating, property type, price range…)
3. Copy the URL from your browser address bar
4. Paste it into the **Search URLs** field and click **Start**

---

### What you get

Every hotel comes out as one clean row:

| What | Details |
|---|---|
| **Name & link** | Hotel name + direct link to its Booking.com page |
| **Location** | City, country, GPS coordinates, distance from city centre |
| **Price** | Nightly rate for your dates, in local currency |
| **Discount flag** | Whether a deal or promo is currently applied |
| **Promo badges** | Labels like "Limited Time Deal" or "Getaway Deal" |
| **Star rating** | Official 1–5 star category |
| **Guest score** | Rating out of 10, with total review count |
| **Cancellation policy** | Free cancellation yes/no |
| **Prepayment policy** | Pay now or pay later |
| **Pets policy** | Pet-friendly yes/no |
| **Photo** | Main hotel photo, ready to display |

**With the details add-on enabled**, you also get:

| What | Details |
|---|---|
| **Hotel description** | Full text description of the property |
| **Check-in / check-out hours** | Exact window (e.g. from 15:00, until 12:00) |
| **Room types** | Each room's name, size, bed configuration, max occupancy, and listed amenities |
| **What's nearby** | Airports, metro and bus stops, top landmarks, restaurants, and beaches — with distances |

---

### The details add-on — is it worth enabling?

Turn it on when you need the full picture: room types, what's nearby, check-in hours, hotel description.

Leave it off if you just need prices, ratings, and availability — the default run is fast and cheap.

| | Default | With details add-on |
|---|---|---|
| **Speed** | ~30 seconds for 1,000 hotels | ~3–4 seconds per hotel |
| **200 hotels** | ~30 seconds | ~12 minutes |
| **Memory needed** | 512 MB | 2,048 MB |
| **Extra cost** | — | See pricing below |

> **Tip:** Set **Max results** to cap how many hotels you enrich — useful if you only need the top 50 or 100.

> **Note:** Room details are available for most hotel types — chain hotels (Accor, Marriott, Hilton…) via Apollo state, and boutique hotels or apartments via the page's availability table. A small number of properties may not expose room data depending on how Booking.com renders their page.

---

### How much does it cost?

Pay only for what you scrape. No monthly commitment on top of your Apify plan.

#### Standard run (prices, ratings, photos)

| | FREE | BRONZE | SILVER | GOLD |
|---|---|---|---|---|
| Run start | $0.05 | $0.05 | $0.05 | $0.05 |
| Per hotel | $0.002 | $0.0016 | $0.0012 | $0.0008 |
| **50 hotels** | **~$0.15** | **~$0.13** | **~$0.11** | **~$0.09** |
| **500 hotels** | **~$1.05** | **~$0.85** | **~$0.65** | **~$0.45** |
| **2,000 hotels** | **~$4.05** | **~$3.27** | **~$2.45** | **~$1.65** |

#### With details add-on (rooms, surroundings, description)

Add-on cost is on top of the standard rate above.

| | FREE | BRONZE | SILVER | GOLD |
|---|---|---|---|---|
| Per hotel enriched | $0.008 | $0.004 | $0.003 | $0.002 |
| **50 hotels + details** | **~$0.55** | **~$0.35** | **~$0.30** | **~$0.20** |
| **200 hotels + details** | **~$2.05** | **~$1.45** | **~$1.10** | **~$0.65** |

---

### Filters

Narrow your results before exporting:

- **Property type** — Hotels only, Apartments, Hostels, Villas, Resorts, and more
- **Minimum guest rating** — e.g. `8` returns only properties rated 8.0 or higher
- **Sort order** — By distance, price, best reviewed, or star rating

You can combine these with any URL you paste in — for example, a Barcelona URL with 4-star filter + minimum rating 8.

---

### Run on a schedule

Set up a weekly or daily run to track how prices evolve for a market and date window. Useful for revenue management, competitive intelligence, or feeding a live dashboard.

---

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

This actor only collects data that any visitor can see on Booking.com — hotel names, public prices, ratings, and policies. No login, no personal data, no private information.

As with any data project, make sure your use complies with applicable regulations (GDPR, local data laws). When in doubt, consult a legal professional.

---

### Also available

- **[Booking.com Price Monitor](https://apify.com/corentinrobert/booking-price-monitor)** — Track rate trends across 5 upcoming date windows (average, min, max, discounts)
- **[Booking.com Availability Monitor](https://apify.com/corentinrobert/booking-availability-monitor)** — Day-by-day availability calendar with sold-out detection for up to 180 days ahead

# Actor input Schema

## `destination` (type: `string`):

City or region name to search — e.g. `Paris, France` or `New York`. No need to open Booking.com first.

Leave empty if you are using **Search URLs** below.
## `urls` (type: `array`):

Paste one or more Booking.com search result URLs instead of a destination text. All your filters (stars, neighbourhood, property type…) are preserved automatically.

**How to get a URL:** go to [booking.com](https://www.booking.com), search for a city, apply filters, then copy the URL from your browser.

Example: `https://www.booking.com/searchresults.html?ss=Barcelona%2C+Spain`
## `checkin` (type: `string`):

Determines which prices are shown. Defaults to 7 days from now if not set.
## `checkout` (type: `string`):

Defaults to 9 days from now (2-night stay) if not set.
## `propertyType` (type: `string`):

Filter by accommodation type. Defaults to all types.
## `maxResults` (type: `integer`):

Maximum number of hotels to return. Set to `0` for unlimited — returns all hotels Booking.com has for this market (up to ~5,000 for major cities).

**15** (prefill) = quick Try on Apify Console (~30 s).
## `scrapeDetails` (type: `boolean`):

**Add-on — billed separately.** When enabled, a real browser visits each hotel page to extract room types, check-in/out hours, hotel description, and nearby places.

**Speed:** ~8 s per hotel — a 200-hotel run takes ~25–30 min instead of ~30 s.

**Extra cost:** $0.008 per hotel enriched (FREE tier).

Leave off if you only need prices, ratings, and availability.

## Actor input object example

```json
{
  "destination": "Gstaad, Switzerland",
  "propertyType": "",
  "maxResults": 15,
  "scrapeDetails": false
}
````

# Actor output Schema

## `defaultDatasetUrl` (type: `string`):

All hotel rows — with rooms and surroundings fields populated when the details add-on is enabled.

## `hotelsDatasetUrl` (type: `string`):

Hotels view (overview columns).

## `runLogUrl` (type: `string`):

Structured run summary with sources processed, hotel counts, and timing.

# 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 = {
    "destination": "Gstaad, Switzerland",
    "maxResults": 15
};

// Run the Actor and wait for it to finish
const run = await client.actor("corent1robert/booking-hotel-search").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 = {
    "destination": "Gstaad, Switzerland",
    "maxResults": 15,
}

# Run the Actor and wait for it to finish
run = client.actor("corent1robert/booking-hotel-search").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 '{
  "destination": "Gstaad, Switzerland",
  "maxResults": 15
}' |
apify call corent1robert/booking-hotel-search --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Booking.com Hotel Search Scraper",
        "description": "Search Booking.com by destination text or URL — get all hotels with prices, ratings, coordinates, free cancellation flags, and promo badges. Beats the 1,000 result cap. HTTP-only, fast, reliable.",
        "version": "1.4",
        "x-build-id": "JcwgsstpvCrPbS1v5"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/corent1robert~booking-hotel-search/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-corent1robert-booking-hotel-search",
                "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/corent1robert~booking-hotel-search/runs": {
            "post": {
                "operationId": "runs-sync-corent1robert-booking-hotel-search",
                "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/corent1robert~booking-hotel-search/run-sync": {
            "post": {
                "operationId": "run-sync-corent1robert-booking-hotel-search",
                "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": {
                    "destination": {
                        "title": "Destination",
                        "type": "string",
                        "description": "City or region name to search — e.g. `Paris, France` or `New York`. No need to open Booking.com first.\n\nLeave empty if you are using **Search URLs** below."
                    },
                    "urls": {
                        "title": "Or use Booking.com search URLs",
                        "type": "array",
                        "description": "Paste one or more Booking.com search result URLs instead of a destination text. All your filters (stars, neighbourhood, property type…) are preserved automatically.\n\n**How to get a URL:** go to [booking.com](https://www.booking.com), search for a city, apply filters, then copy the URL from your browser.\n\nExample: `https://www.booking.com/searchresults.html?ss=Barcelona%2C+Spain`",
                        "items": {
                            "type": "string"
                        }
                    },
                    "checkin": {
                        "title": "Check-in date",
                        "type": "string",
                        "description": "Determines which prices are shown. Defaults to 7 days from now if not set."
                    },
                    "checkout": {
                        "title": "Check-out date",
                        "type": "string",
                        "description": "Defaults to 9 days from now (2-night stay) if not set."
                    },
                    "propertyType": {
                        "title": "Property type",
                        "enum": [
                            "",
                            "Hotels",
                            "Apartments",
                            "Hostels",
                            "Guest houses",
                            "Bed & breakfasts",
                            "Villas",
                            "Resorts",
                            "Motels"
                        ],
                        "type": "string",
                        "description": "Filter by accommodation type. Defaults to all types.",
                        "default": ""
                    },
                    "maxResults": {
                        "title": "Max results",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum number of hotels to return. Set to `0` for unlimited — returns all hotels Booking.com has for this market (up to ~5,000 for major cities).\n\n**15** (prefill) = quick Try on Apify Console (~30 s).",
                        "default": 0
                    },
                    "scrapeDetails": {
                        "title": "Scrape room details & surroundings (add-on)",
                        "type": "boolean",
                        "description": "**Add-on — billed separately.** When enabled, a real browser visits each hotel page to extract room types, check-in/out hours, hotel description, and nearby places.\n\n**Speed:** ~8 s per hotel — a 200-hotel run takes ~25–30 min instead of ~30 s.\n\n**Extra cost:** $0.008 per hotel enriched (FREE tier).\n\nLeave off if you only need prices, ratings, and availability.",
                        "default": false
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
