# Booking Scraper Pro (`webdatalabs/booking-scraper-pro`) Actor

Extract hotel data, guest reviews, and sentiment insights from Booking.com. Search any destination, get comprehensive hotel information including ratings, facilities, photos, and analyze review sentiment

- **URL**: https://apify.com/webdatalabs/booking-scraper-pro.md
- **Developed by:** [WebDataLabs](https://apify.com/webdatalabs) (community)
- **Categories:** Travel, Developer tools, Automation
- **Stats:** 22 total users, 3 monthly users, 60.4% runs succeeded, 0 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $7.00 / 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/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

Extract hotel data, guest reviews, and sentiment insights from **[Booking.com](https://www.booking.com)** — search any destination and get structured hotel details, ratings, category scores, prices, and up to 10 featured guest reviews with AFINN-165 sentiment analysis. A no-login **Booking.com API alternative** for market research, competitor analysis, and price intelligence.

[![Apify Actor](https://img.shields.io/badge/Apify-Actor-blue)](https://apify.com)
[![Sentiment Analysis](https://img.shields.io/badge/Sentiment-AFINN--165-brightgreen)]()
[![Reviews](https://img.shields.io/badge/Reviews-Featured%2010-orange)]()

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

Booking.com Scraper Pro turns a destination search on **[Booking.com](https://www.booking.com)** into clean, structured data. Give it a city, region, or country and it returns one flat record per hotel — name, address, GPS coordinates, review score, category scores, popular facilities, photos, starting price, and the property's **featured guest reviews** (the up-to-10 reviews Booking highlights on each hotel page), each with **AFINN-165 sentiment** for English content.

It extracts only **publicly visible** information — no login, no account, and no private user data.

### Why scrape Booking.com?

- **Hotel market research** — benchmark hotels, scores, and prices across any destination.
- **Competitor analysis** — compare ratings, category scores, facilities, and guest sentiment.
- **Brand & reputation monitoring** — track what guests say and the sentiment behind it.
- **Price intelligence** — monitor starting prices across 14 currencies.

Running on the **Apify platform** gives you scheduling, a full **REST API**, one-click **integrations** (Google Sheets, Slack, Zapier, Make, n8n), automatic **residential proxy** rotation to reach Booking.com reliably, and run monitoring.

### What data can Booking.com Scraper Pro extract?

| Field | Type | Description |
|-------|------|-------------|
| `name` | string | Hotel name |
| `address` / `city` / `country` | string | Location (country normalized from the hotel URL) |
| `latitude` / `longitude` | number | GPS coordinates |
| `reviewScore` | number | Overall Booking.com score (0–10) |
| `totalReviewCount` | integer | Total number of reviews on Booking.com |
| `categoryScores` | array | Sub-scores (Staff, Cleanliness, Comfort, Location, Facilities, Value, WiFi) |
| `popularFacilities` | array | Top facilities (WiFi, Parking, Pool, Spa, …) |
| `priceFrom` / `currency` | number / string | Starting price in the selected currency |
| `photos` | array | Photo gallery URLs with captions |
| `reviews` | array | Up to 10 featured guest reviews (see below) |
| `sentiment` | object | Aggregated sentiment distribution across the reviews |

Each item in `reviews` contains: `guestName`, `guestCountryCode`, `title`, `positiveText`, `negativeText`, `score` (0–10), `reviewDate`, `reviewUrl`, and — for English content — `sentimentScore`, `sentimentComparative`, and `sentimentLabel`.

### How to scrape Booking.com

1. Click **Try for free** / **Start**.
2. Enter a **Destination** (e.g. `Munich, Germany`, `Paris`, `Tokyo, Japan`).
3. Set **Max Hotels** and, optionally, check-in/check-out dates, adults, and rooms.
4. Choose your **Language** and **Currency** (set language to English for sentiment analysis).
5. Click **Save & Start** and watch results stream into the dataset.
6. Download the data as **JSON, CSV, Excel, or HTML**, or pull it via the Apify API.

### How much does it cost to scrape Booking.com?

This Actor uses **residential proxies** (required — Booking.com blocks datacenter IPs), so cost scales with the number of hotels and reviews you collect. A typical hotel with its featured reviews and sentiment costs only a few cents of platform usage. To keep runs cheap: lower `maxHotels`, and set `maxReviewsPerHotel` to `0` if you only need hotel data. See the Actor's pricing on its Store page for exact per-result costs.

### Input

See the **Input** tab for all options. Only **Destination** is required; everything else has sensible defaults.

Key fields:

- **Destination** *(required)* — city, region, or country to search.
- **Max Hotels** — how many hotels to scrape (default 10).
- **Max Reviews Per Hotel** — 0–10 featured reviews per hotel (default 10). Set `0` to skip reviews.
- **Language** — content language; **set to `en-us`/`en-gb` for sentiment analysis** (see FAQ).
- **Currency** — one of 14 supported currencies for prices.

### Output

You can download the dataset in various formats such as **JSON, HTML, CSV, or Excel**. Each hotel is one flat record:

```json
{
  "name": "Hotel Kraft",
  "url": "https://www.booking.com/hotel/de/kraft.html",
  "propertyType": "Hotel",
  "address": "Schillerstrasse 49, Ludwigsvorstadt, 80336 Munich, Germany",
  "city": "Munich",
  "country": "Germany",
  "latitude": 48.1345,
  "longitude": 11.5641,
  "reviewScore": 8.4,
  "totalReviewCount": 1558,
  "categoryScores": [
    { "category": "Staff", "score": 9.2 },
    { "category": "Location", "score": 9.4 }
  ],
  "popularFacilities": ["Free WiFi", "Bar", "Family rooms"],
  "priceFrom": 167,
  "currency": "EUR",
  "sentiment": { "avgScore": 3.1, "distribution": { "positive": 9, "negative": 0, "neutral": 1 } },
  "reviewCount": 10,
  "reviews": [
    {
      "guestName": "Kim",
      "guestCountryCode": "us",
      "title": "We had an amazing time in Munich.",
      "positiveText": "Loved how quiet and clean it was. Location was also great",
      "negativeText": null,
      "score": 10,
      "sentimentScore": 8,
      "sentimentLabel": "positive",
      "reviewDate": "2025-12-13T14:05:25.000Z",
      "reviewUrl": "https://www.booking.com/reviews/0a3ac1ae90066ff8"
    }
  ],
  "scrapedAt": "2026-07-01T12:00:00Z"
}
```

### Tips & advanced options

- **Lower cost / faster runs:** reduce `maxHotels`, or set `maxReviewsPerHotel` to `0` for hotel data only.
- **Sentiment analysis:** AFINN-165 is an English lexicon, so keep `language` at `en-us` or `en-gb`. For other languages the review text is still returned; the sentiment fields are skipped rather than mislabeled.
- **Reliability:** the Actor automatically retries on a fresh IP if Booking.com serves an anti-bot challenge, and fails the run (instead of returning an empty dataset) if no hotels could be scraped.
- **Automate it:** schedule daily/weekly runs and pipe results to Google Sheets, Slack, or a webhook via the Apify **Integrations** tab.

### FAQ

#### Do I need a Booking.com account?

No. The Actor extracts publicly available data from Booking.com search results and hotel pages — no account or API key required.

#### How many reviews do I get per hotel?

Up to **10 featured reviews** per hotel — the reviews Booking.com highlights on each property page — each with the full positive/negative text, score, date, and sentiment. This is the review set Booking exposes reliably; the Actor reads it directly from the page.

#### How does the sentiment analysis work?

It uses **AFINN-165**, a research-validated English lexicon (~2,500 scored words), on the combined positive/negative review text. Because it is English-only, sentiment is calculated when `language` is `en-us`/`en-gb` and skipped (fields set to `null`) for other languages to avoid mislabeling.

#### Can I get data in different languages and currencies?

Yes. Set `language` for hotel descriptions and review text (14 languages) and `currency` for prices (14 currencies: USD, EUR, GBP, JPY, CNY, AUD, CAD, CHF, INR, BRL, MXN, KRW, SGD, THB).

#### What if I get blocked?

Residential proxies are enabled automatically and the Actor retries on fresh IPs. If issues persist, reduce `maxHotels` to lower request volume, or re-run.

### Integrations

- **Zapier / Make / n8n** — schedule runs and push top-rated hotels or negative-sentiment reviews to Sheets, Slack, or Airtable.
- **API** — see the **API** tab for programmatic access and to run the Actor from your own code.
- **Feedback** — found an issue or need a field added? Use the **Issues** tab.

### Disclaimer

Our Actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our Actors, when used for ethical purposes by Apify users, are safe. However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

You are responsible for ensuring your use complies with applicable laws (including GDPR/DSGVO and copyright), Booking.com's Terms of Service, and Apify's Terms of Service. *This tool is not affiliated with Booking.com. All trademarks belong to their respective owners.*

***

### Explore more of our Actors

#### E-commerce & Reviews

| Actor | Description |
|-------|-------------|
| [Amazon Reviews Scraper](https://apify.com/webdatalabs/amazon-reviews-scraper) | Extract Amazon customer reviews for sentiment analysis |
| [Etsy Scraper Pro](https://apify.com/webdatalabs/etsy-scraper-pro) | Fast Etsy product scraper with ratings and reviews |

#### Social Media & Brand Monitoring

| Actor | Description |
|-------|-------------|
| [Reddit Scraper Pro](https://apify.com/webdatalabs/reddit-scraper-pro) | Monitor subreddits with sentiment analysis |

#### Business Intelligence

| Actor | Description |
|-------|-------------|
| [Shopify Scraper Pro](https://apify.com/webdatalabs/shopify-product-scraper) | Extract Shopify product data for market research |

### Need this data as a managed feed?

If you would rather receive this data on a schedule than run the Actor yourself, we can build and operate the feed: the fields you specify, the cadence you set, delivered to a dataset, S3, a webhook, or your database. Every scheduled run is checked against an agreed shape rather than assumed to be fine, missing values are reported as null instead of filled with placeholders, and repairing the collector when the source changes is covered by the monthly rate. Priced as a one-time setup fee plus a monthly rate, scoped in writing before anything is built.

**Contact:** support@webdatalabs.net

### SEO keywords

Booking.com scraper, Booking.com data extractor, hotel scraper, Booking.com API alternative, scrape Booking.com hotels, hotel reviews scraper, Booking.com sentiment analysis, hotel data extraction, Booking.com automation, extract hotel reviews, Booking.com web scraping, hotel market research, Booking.com competitor analysis, hotel rating scraper, how to scrape Booking.com, n8n Booking.com integration, Zapier hotel scraper, Make Booking.com automation, hotel price monitor, guest review analysis, travel data scraper, accommodation scraper

### Leave a review

Is this actor saving you time? A quick review on the Store helps other people find it — and tells us which fields to add next. **[Rate this actor →](https://apify.com/webdatalabs/booking-scraper-pro)**

# Actor input Schema

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

City, region, or country to search for hotels (e.g., 'Berlin, Germany', 'Paris', 'Tokyo, Japan')

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

Check-in date in YYYY-MM-DD format. Defaults to tomorrow if not specified.

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

Check-out date in YYYY-MM-DD format. Defaults to day after check-in.

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

Number of adults per room

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

Number of rooms needed

## `maxHotels` (type: `integer`):

Maximum number of hotels to scrape (1-100)

## `includeReviews` (type: `boolean`):

Extract the featured guest reviews shown on each hotel page (up to 10) with sentiment analysis

## `maxReviewsPerHotel` (type: `integer`):

How many of the hotel's featured guest reviews to keep (0-10). Booking.com surfaces up to 10 featured reviews per hotel.

## `analyzeSentiment` (type: `boolean`):

Analyze review sentiment using AFINN-165 NLP algorithm

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

Language for hotel descriptions and reviews

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

Currency for prices

## Actor input object example

```json
{
  "destination": "Munich, Germany",
  "adults": 2,
  "rooms": 1,
  "maxHotels": 10,
  "includeReviews": true,
  "maxReviewsPerHotel": 10,
  "analyzeSentiment": true,
  "language": "en-us",
  "currency": "USD"
}
```

# Actor output Schema

## `hotels` (type: `string`):

Complete hotel data including reviews, ratings, facilities, and sentiment analysis

# 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": "Munich, Germany"
};

// Run the Actor and wait for it to finish
const run = await client.actor("webdatalabs/booking-scraper-pro").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": "Munich, Germany" }

# Run the Actor and wait for it to finish
run = client.actor("webdatalabs/booking-scraper-pro").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 '{
  "destination": "Munich, Germany"
}' |
apify call webdatalabs/booking-scraper-pro --silent --output-dataset

```

## MCP server setup

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

```

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/CrWsEO3vhg3EW5C0j/builds/nFmN3prY8e1gq5pim/openapi.json
