# Booking.com Hotels Scraper — Prices, Reviews & Availability (`hipersoft/booking-hotels-scraper`) Actor

Scrape Booking.com hotels and accommodation in bulk: name, type, address, city, country, coordinates, review score, review count, star rating, price, image and link. For travel, price research and n8n.

- **URL**: https://apify.com/hipersoft/booking-hotels-scraper.md
- **Developed by:** [hiper soft](https://apify.com/hipersoft) (community)
- **Categories:** Travel, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.002 / hotel scraped

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

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

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

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

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

# README

## Booking.com Hotels Scraper — Prices, Reviews, Ratings & Geo

Scrape **Booking.com** hotels and accommodation in bulk and export **name, property type, address, city, country, coordinates, review score, review count, star rating, price, image and link** as structured data. Paste one or more Booking.com search URLs, or just type a destination with your dates, and get back clean **JSON, CSV, Excel or XML**.

### What does Booking.com Hotels Scraper do?

Booking.com Hotels Scraper collects properties from Booking.com search results. Give it a city or a full Booking.com search URL — or a destination plus check-in/check-out dates — and it walks the results pages and returns one row per property: the name and type, full address with city and country, map coordinates, guest review score and count, official star rating, the displayed price and currency, a lead image and a direct link. Results stream into a dataset you can download or pull through the Apify API.

### What data can you scrape from Booking.com?

| Data point | Description |
| --- | --- |
| Name | Property name as shown on Booking.com |
| Type | Accommodation type, e.g. Hotel, Apartment, Resort, Guesthouse |
| Address | Street address of the property |
| City & country | City name and 2-letter country code |
| Coordinates | Latitude and longitude for mapping |
| Review score | Guest review score (out of 10) |
| Review count | Total number of guest reviews |
| Star rating | Official star rating of the property |
| Price | Displayed price for the stay, plus currency |
| Free cancellation | Whether free cancellation is offered |
| Image | Lead photo URL |
| URL | Direct link to the property page |

### What you get

One record per property:

```json
{
  "name": "The Fullerton Hotel Singapore",
  "type": "Hotel",
  "address": "1 Fullerton Square",
  "city": "Singapore",
  "country": "SG",
  "latitude": 1.286476,
  "longitude": 103.853058,
  "reviewScore": 9.2,
  "reviewCount": 4141,
  "starRating": 5,
  "price": 385.4,
  "currency": "USD",
  "url": "https://www.booking.com/hotel/sg/the-fullerton-singapore.html",
  "image": "https://cf.bstatic.com/xdata/images/hotel/square600/....webp",
  "freeCancellation": true
}
```

#### Output schema

| Field | Type | Description |
| --- | --- | --- |
| `name` | string | Property name as shown in search results. |
| `type` | string | Accommodation type, e.g. Hotel, Apartment, Resort. |
| `address` | string | Street address of the property. |
| `city` | string | City the property is located in. |
| `country` | string | 2-letter country code, e.g. SG, GB, US. |
| `latitude` | number | Property latitude coordinate. |
| `longitude` | number | Property longitude coordinate. |
| `reviewScore` | number | Guest review score out of 10. |
| `reviewCount` | number | Total number of guest reviews. |
| `starRating` | number | Official star rating of the property. |
| `price` | number | Displayed price for the selected stay. |
| `currency` | string | Currency code for the price, e.g. USD, GBP. |
| `url` | string (URL) | Direct link to the property page. |
| `image` | string (URL) | URL of the property's lead photo. |
| `freeCancellation` | boolean | True when free cancellation is offered. |

> Prices appear only when both check-in and check-out dates are set (in the URL or the date fields). A destination-only search still returns names, ratings, location and links.

### Use cases

- Benchmark nightly and total prices across hotels in a market.
- Track review scores and review counts of competing properties over time.
- Map available inventory in a city or neighborhood using the coordinates.
- Build datasets for revenue-management and dynamic-pricing models.
- Compare star ratings, property types and cancellation policies.
- Enrich travel, real-estate and price-comparison apps with live hotel data.

### How to scrape Booking.com hotels

1. Add Booking.com Hotels Scraper to your Apify account and open the input.
2. Either paste one or more Booking.com search URLs into **searchUrls**, or type a **destination** (e.g. "Singapore") with **checkIn** / **checkOut** dates and **adults**.
3. Set **maxItems** to cap how many properties you collect in total.
4. Optionally set a **currency** (e.g. USD, EUR, GBP, SGD).
5. Click **Run** and watch properties stream into the dataset.
6. Export the results as JSON, CSV, Excel or XML, or pull them through the Apify API.

### Input

```json
{
  "searchUrls": [
    "https://www.booking.com/searchresults.html?ss=Singapore&group_adults=2&no_rooms=1&group_children=0"
  ],
  "destination": "London",
  "checkIn": "2026-09-20",
  "checkOut": "2026-09-22",
  "adults": 2,
  "maxItems": 50,
  "currency": "USD"
}
```

| Field | Description |
| --- | --- |
| `searchUrls` | Booking.com search-result URLs to scrape (dates/guests/filters in the URL are respected). |
| `destination` | A city or place to search when you have not pasted a URL. |
| `checkIn` / `checkOut` | Stay dates in YYYY-MM-DD; required for prices. |
| `adults` | Number of adult guests for the structured search. |
| `maxItems` | Maximum number of properties to collect in total. |
| `currency` | 3-letter currency code for displayed prices. |
| `proxyConfiguration` | Proxy settings; the default is tuned for reliable results. |

### Using Booking.com Hotels Scraper with n8n and Make

The dataset is available over the Apify API, so you can wire it into no-code and automation tools. In **n8n**, use the Apify node (or an HTTP Request node) to start a run and read the dataset items, then push hotels into a database, spreadsheet or notification. The same works in **Make**, **Zapier** and any workflow that can call a REST API.

### FAQ

**How many hotels can I scrape?**
As many as the search results contain — set `maxItems` to control the total volume. Booking.com returns 25 properties per results page.

**Why are some prices empty?**
Prices only appear when both check-in and check-out dates are provided. Add them to the search URL, or fill the `checkIn` and `checkOut` fields, to get pricing.

**Can I scrape a specific city, region or filtered search?**
Yes. Open the search you want on Booking.com — set the destination, dates, guests and any filters — then copy the URL from the address bar into `searchUrls`.

**What formats can I export?**
JSON, CSV, Excel and XML, or pull the data live through the Apify API.

**Can I automate it on a schedule?**
Yes. Use Apify **Schedules** to run the actor at any interval and keep your hotel dataset fresh.

### Related scrapers

- [Airbnb Scraper](https://apify.com/hipersoft/airbnb-scraper)
- [Google Maps Scraper](https://apify.com/hipersoft/google-maps-scraper)
- [TripAdvisor-style travel data](https://apify.com/hipersoft/google-maps-scraper)
- [PropertyGuru Scraper](https://apify.com/hipersoft/propertyguru-scraper)
- [99.co Scraper](https://apify.com/hipersoft/99co-scraper)

***

Original clean-room implementation.

# Actor input Schema

## `searchUrls` (type: `array`):

Paste one or more Booking.com search-result URLs (open a city/area search on Booking.com, copy the address bar). Dates, guests and filters set in the URL are respected. One URL per line. You can use this together with, or instead of, the structured search below.

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

A city, region or place to search (e.g. "Singapore", "London", "Bali"). Used to build a Booking.com search when you have not pasted a search URL above.

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

Check-in date in YYYY-MM-DD format (e.g. 2026-09-20). Optional — prices only appear when both check-in and check-out are set. Used with the Destination field.

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

Check-out date in YYYY-MM-DD format (e.g. 2026-09-22). Optional — prices only appear when both check-in and check-out are set. Used with the Destination field.

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

Number of adult guests for the structured Destination search.

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

Maximum number of hotels to collect in total across all searches (Booking.com returns 25 per page).

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

3-letter currency code for displayed prices (e.g. USD, EUR, GBP, SGD). Applied to structured searches and to pasted URLs that do not already set a currency.

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

Proxy configuration. Leave the default — it is tuned for reliable results.

## Actor input object example

```json
{
  "searchUrls": [
    "https://www.booking.com/searchresults.html?ss=Singapore&group_adults=2&no_rooms=1&group_children=0"
  ],
  "destination": "Singapore",
  "adults": 2,
  "maxItems": 50,
  "currency": "USD",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

The scraped hotels as dataset items.

# 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 = {
    "searchUrls": [
        "https://www.booking.com/searchresults.html?ss=Singapore&group_adults=2&no_rooms=1&group_children=0"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("hipersoft/booking-hotels-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 = { "searchUrls": ["https://www.booking.com/searchresults.html?ss=Singapore&group_adults=2&no_rooms=1&group_children=0"] }

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

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

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

```

## CLI example

```bash
echo '{
  "searchUrls": [
    "https://www.booking.com/searchresults.html?ss=Singapore&group_adults=2&no_rooms=1&group_children=0"
  ]
}' |
apify call hipersoft/booking-hotels-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,hipersoft/booking-hotels-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/pAr2AxmqqaBBb4oSH/builds/0kJpQl3MDdx5Mhk4g/openapi.json
