# Booking Reviews Scraper · Scores, Feedback & Contacts (`corent1robert/booking-reviews-scraper`) Actor

Paste a Booking.com search or hotel URL — get guest reviews: scores, positive and negative feedback, reviewer details. Filter by keyword, language, traveler type. Export-ready dataset. No login needed.

- **URL**: https://apify.com/corent1robert/booking-reviews-scraper.md
- **Developed by:** [Corentin Robert](https://apify.com/corent1robert) (community)
- **Categories:** Lead generation, Automation, Travel
- **Stats:** 6 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.80 / 1,000 review collecteds

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 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 Reviews Scraper

Paste a Booking.com search or hotel URL — get every guest review: scores, positive and negative feedback, reviewer details, and auto-detected themes. Filter by keyword, language, or traveler type. Export-ready dataset in seconds.

**No login. No API key. No Booking.com account.**

***

### Who is this for?

| You are… | What you get |
|---|---|
| **Hospitality brand or hotel group** | A continuous feed of guest sentiment across your properties — flagged by topic |
| **Revenue manager** | Competitor reviews to benchmark quality perception against your own ratings |
| **Market researcher** | Aggregated guest feedback across a city or region for any date range |
| **PR or reputation agency** | Raw review data to monitor brand mentions, recurring complaints, or praise |
| **B2B outreach team** | Verified hotel contact details alongside review data — ready to import in your CRM |
| **Data journalist** | Tourism quality data, structured and filterable by keyword or language |

> **Not sure which hotels to target?** Use a Booking.com search URL with your filters already applied — the scraper picks up every hotel from the results page.

***

### Quick start

1. Go to [booking.com](https://www.booking.com) and search for a city
2. Apply any filters (star rating, dates, price range…)
3. Copy the URL from your browser address bar
4. Paste it into **Search URL(s)** and click **Start**
5. Reviews appear in your dataset within seconds

Or skip the search: paste direct hotel page URLs into **Hotel URL(s)** if you already know which properties you want.

***

### What you get

Every review becomes one clean row:

| Category | Fields |
|---|---|
| **Hotel** | Name, city, address, star rating, average score, total review count |
| **Review** | Score, title, positive points, negative points, date (YYYY-MM), nights stayed, traveler type, room type, hotel reply |
| **Reviewer** | Name, country, language |
| **Topic detection** | Matched keywords (which ones, where they appeared), auto-detected themes |
| **Contact** *(add-on)* | Email, phone, company name, registration number — for outreach |

***

### Filters

- **Keyword filter** — keep only reviews mentioning specific words (`noise`, `bed`, `cleanliness`, `bruit`, `literie`…). Matching is whole-word and accent-insensitive.
- **Language filter** — limit to a specific review language (English, French, German, Spanish…)
- **Sort order** — newest first, lowest rated first, highest rated first, or featured

***

### How much does it cost?

#### Standard run (reviews only)

| | FREE | BRONZE | SILVER | GOLD |
|---|---|---|---|---|
| Run start | $0.05 | $0.05 | $0.05 | $0.05 |
| Per review | $0.002 | $0.0016 | $0.0012 | $0.0008 |
| **100 reviews** | **~$0.25** | **~$0.21** | **~$0.17** | **~$0.13** |
| **1,000 reviews** | **~$2.05** | **~$1.65** | **~$1.25** | **~$0.85** |
| **5,000 reviews** | **~$10.05** | **~$8.05** | **~$6.05** | **~$4.05** |

#### With contact enrichment (add-on)

Add-on cost is charged per review row enriched, on top of the standard rate above.

| | FREE | BRONZE | SILVER | GOLD |
|---|---|---|---|---|
| Per review enriched | $0.010 | $0.008 | $0.006 | $0.004 |
| **100 reviews + contacts** | **~$1.25** | **~$1.01** | **~$0.77** | **~$0.53** |

> **Note:** Contact info availability varies by hotel and country. Most hotels publish a phone number; email and company registration number are less consistent.

***

### Output sample

```json
{
  "hotel_id": "moxy-paris-bastille",
  "hotel_url": "https://www.booking.com/hotel/fr/moxy-paris-bastille.html",
  "hotel_name": "Moxy Paris Bastille",
  "hotel_city": "Paris",
  "hotel_stars": 4,
  "hotel_avg_score": "8.5",
  "hotel_total_reviews": 2847,
  "matched_keywords": "bed, literie",
  "keyword_matched_in": "positive",
  "themes": "room; value for money",
  "score": 9,
  "title": "Great stay",
  "positive_points": "The bed was incredibly comfortable.",
  "negative_points": "Nothing to report.",
  "review_date": "2026-04",
  "stay_nights": 2,
  "traveler_type": "Couple",
  "room_type": "Superior Double Room",
  "lang": "en",
  "reviewer_name": "Marie",
  "reviewer_location": "France",
  "partner_reply": "Thank you for your kind words!",
  "scrape_date": "2026-04-15"
}
```

***

### Important / Limitations

- **Review dates** are `YYYY-MM` format — Booking.com does not expose the exact day in public review listings
- **Keyword filtering** is applied after fetching — you are billed only for reviews that match your filter
- **Language filter** affects which reviews Booking.com returns, not the language of your keyword list — use keywords in both languages for multilingual coverage
- **Contact enrichment** relies on publicly available hotel page data — coverage varies by country

***

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

This actor only collects data that any visitor can see on Booking.com — public guest reviews, scores, and hotel information. No login, no personal data beyond what reviewers choose to share publicly.

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

***

### Local development

```bash
npm install
apify run --input-file=./input.json
```

Results are saved to `storage/datasets/default/`. A `output.csv` file (Excel-compatible, BOM-encoded) is generated in the project root.

***

### Also available

- **[Booking.com Hotel Search Scraper](https://apify.com/corent1robert/booking-hotel-search)** — Search all hotels in a market with prices, ratings, photos, and availability policies
- **[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

***

### Support

Contact <corentin@outreacher.fr> for custom scrapers, bulk runs, or tailored automation.

# Actor input Schema

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

Go to [booking.com](https://www.booking.com), search for a city and apply any filters (stars, dates, price…), then **copy the URL from your browser** and paste it here.

One URL per line.

## `hotelUrls` (type: `array`):

Paste one or more Booking.com hotel page URLs directly.

Example: `https://www.booking.com/hotel/fr/royal-saint-michel.html`

**Prefill uses this field** for a quick Try (~30 s).

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

Stop after this many hotels. Set to `0` for no limit.

**Tip:** Use `1–3` to test your setup before a large run.

## `maxReviewPages` (type: `integer`):

Each page returns ~10 reviews.

- `1` — quick sample (10 reviews)
- `5` — solid analysis (50 reviews)
- `20+` — full coverage
- `0` — no limit (all reviews)

## `order` (type: `string`):

**Newest first** — most recent feedback (default).
**Lowest rated** — critical reviews first, ideal for quality audits.

## `reviewLang` (type: `string`):

Only collect reviews written in this language. Leave on **All languages** to get everything.

## `keywordFilter` (type: `array`):

Only reviews where the positive feedback, negative feedback, or title contains one of these words will be included.

Matching is **whole-word** and **accent-insensitive** — `"lit"` matches `"le lit"` but not `"literie"` or `"accessibilité"`.

Mix French and English for multilingual coverage.

## `enrichWithProHostContactDetails` (type: `boolean`):

When enabled, each row includes the hotel's professional contact info — email, phone, company name, and registration number (SIRET).

Perfect for combining review analysis with outreach.

## Actor input object example

```json
{
  "searchUrls": [],
  "hotelUrls": [
    "https://www.booking.com/hotel/fr/royal-saint-michel.html"
  ],
  "maxHotels": 1,
  "maxReviewPages": 2,
  "order": "completed_desc",
  "reviewLang": "",
  "keywordFilter": [],
  "enrichWithProHostContactDetails": false
}
```

# Actor output Schema

## `reviews` (type: `string`):

Hotel, price, reviewer, rating, pros and cons

## `detailed` (type: `string`):

All info: room, duration, dates, etc.

## `allItems` (type: `string`):

Full dataset as raw JSON

# 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 = {
    "hotelUrls": [
        "https://www.booking.com/hotel/fr/royal-saint-michel.html"
    ],
    "maxHotels": 1,
    "maxReviewPages": 2,
    "keywordFilter": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("corent1robert/booking-reviews-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 = {
    "hotelUrls": ["https://www.booking.com/hotel/fr/royal-saint-michel.html"],
    "maxHotels": 1,
    "maxReviewPages": 2,
    "keywordFilter": [],
}

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

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

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

```

## CLI example

```bash
echo '{
  "hotelUrls": [
    "https://www.booking.com/hotel/fr/royal-saint-michel.html"
  ],
  "maxHotels": 1,
  "maxReviewPages": 2,
  "keywordFilter": []
}' |
apify call corent1robert/booking-reviews-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/Rd5lLqoaud53zegt0/builds/9IHETwUugB7gVKidc/openapi.json
