# Booking Review Scraper (`insights_data/booking-review-scraper`) Actor

Scrape Booking.com hotel reviews in bulk. Get rating, liked and disliked text, reviewer details, room type, stay date and length, photos, plus hotel stars, address and category scores as clean JSON. Filter by score, traveler type, language and date. No login needed.

- **URL**: https://apify.com/insights_data/booking-review-scraper.md
- **Developed by:** [Insights Data](https://apify.com/insights_data) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.70 / 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.
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?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### 🏨 Booking Review Scraper: what is it and who is it for?

**Booking Review Scraper** is a Booking.com review scraper that collects guest reviews from hotel pages: the rating, what guests liked and disliked, who wrote the review, which room they booked, when they stayed, the hotel's reply and the hotel's category scores. Paste one hotel link or many, click **Start**, and download the reviews as a table, with no coding and no Booking.com account. On the Apify Free plan each run stops at **10 reviews in total**, which is enough for a first test.

Who uses it:

- **Hotel reputation management:** see new Booking.com property reviews and your replies in one table instead of clicking through pages.
- **Hotel competitor analysis:** compare scores, category scores and repeated complaints across the hotels you compete with.
- **Hotel review sentiment analysis:** feed the liked and disliked text into a sentiment or topic model, or an AI assistant.
- **Build a Booking.com hotel reviews dataset:** collect structured reviews for research or machine learning.
- **Find problems fast:** pull only low-score reviews, or only reviews that mention a word such as "breakfast" or "noise".
- **Automate research workflows:** schedule runs with a "Reviews since" date so your data stays fresh.

#### What can Booking Review Scraper do?

You choose which reviews you need, and the booking review extractor collects only those:

- 🔗 **Bulk hotel links:** add as many Booking.com hotel pages as you need in one run.
- 🎯 **Filters:** score band, traveler type, review language, search words and a "Reviews since" date.
- 🔃 **Five sort orders:** newest, oldest, most relevant, highest score or lowest score first.
- ⚡ **Live results:** each review appears in the Output tab as soon as it is saved.
- 🏨 **Hotel facts on every review:** name, stars, score, address, coordinates and category scores, plus a free Hotels table and a free Inputs table that shows the status of each link.
- 📦 **Export** to JSON, CSV, Excel, XML or HTML.
- 🔌 **API and automation:** run it via the Apify API, schedule runs, monitor them and connect Make, Zapier, Google Sheets and more.

***

### 📋 Booking Review Scraper data: what you can extract

Here is the Booking.com review data you get for each review. The names in the second column are the column names you will see in your export.

| Data | Fields | In plain words |
|---|---|---|
| ⭐ Rating and title | `rating`, `reviewTitle` | The guest's score (1 to 10) and headline |
| 📝 Review text | `reviewTextParts` | What the guest liked and disliked |
| 🌍 Language | `reviewLanguage`, `isTranslatable` | Language of the review; `isTranslatable` is true when Booking.com offers a translation of it |
| 📅 Review date | `reviewDate`, `reviewDateIso`, `reviewTimestamp` | The same date as text, as YYYY-MM-DD, and as a number for sorting |
| 👤 Guest | `userName`, `userLocation`, `userCountryCode`, `userReviewCount`, `userJoinedDate`, `userIsAnonymous`, `userAvatarUrl` | Name, country, how many reviews they wrote, when they joined, anonymous or not, profile picture |
| 🧳 Traveler type | `travelerType`, `travelerTypeCode` | Traveler type as shown (for example "Family") and the same type as a short code |
| 🛏️ Room and stay | `roomInfo`, `roomId`, `checkInDate`, `checkOutDate`, `nightsStayed`, `stayLength`, `stayDate`, `stayStatus` | Room booked, dates, number of nights, and the stay status Booking.com reports |
| 💬 Hotel reply and votes | `hotelReply`, `helpfulVotes` | The hotel's answer and how many people found the review helpful |
| 📸 Photos | `photoCount`, `photos` | Guest photos with links |
| 🏨 Hotel facts | `hotelName`, `hotelStars`, `hotelScore`, `hotelReviewsCount`, `hotelCategoryScores`, `hotelBookingId`, `hotelUrl` | Hotel name, stars, overall score, number of reviews, category scores, Booking.com's own number for the hotel, page link |
| 📍 Hotel location | `hotelAddress`, `hotelCountry`, `hotelLatitude`, `hotelLongitude` | Address and map position |
| 🔍 Search matches | `searchMatches` | The words that matched your search words (only when you use them) |
| 🆔 IDs and run info | `id`, `hotelId`, `reviewPage`, `customData`, `scrapedAt` | Review id, hotel id, page number, your own labels, time of the run |

The category scores cover staff, facilities, cleanliness, comfort, value for money, location and free Wi-Fi, as far as the hotel shows them, so you can compare hotel ratings by topic and not only by the overall score.

> **Note:** Booking.com does not show every detail for every review. When a guest left no text, `reviewTextParts` is empty. Details Booking.com does not provide are empty (`null`).

#### What data can't Booking Review Scraper extract?

- It covers hotel stays only, not other travel reviews such as flights, car rentals, taxis or attractions.
- Hotel search results by city or dates: you need hotel page links as input.
- Reviewer contact details such as email or phone.
- Room prices and availability. It is not a general Booking.com data scraper; for hotel prices, try [Google Hotels Scraper](https://apify.com/insights_data/google-hotels-scraper).

***

### 🚀 How to scrape Booking.com reviews

You don't need any web scraping experience. Here is your first run:

1. [Create a free Apify account](https://console.apify.com/sign-up) using your email.
2. Open [Booking Review Scraper](https://apify.com/insights_data/booking-review-scraper) and click **Try for free**.
3. The input already has a sample hotel (The Langham Chicago). To test, just click **Start**. For your own hotel, open its page on Booking.com, copy the link from the address bar and paste it into **Hotel links**.
4. Watch the Booking.com reviews appear in the **Output** tab while the run is going. The **Log** tab on the same run page shows progress and any problem in plain words.
5. Download your data: **Storage → Datasets → Export**, then pick JSON, CSV, Excel, XML or HTML.

The link you copy from the address bar can be long, for example `https://www.booking.com/hotel/us/the-langham-chicago.html?aid=...&checkin=...&group_adults=2`. That works as it is: the Actor only reads the hotel part of the link. Language versions such as `.de.html` or `.fr.html` work too.

***

### 💲 Booking Review Scraper pricing: how much does it cost to scrape Booking.com?

Booking Review Scraper uses **pay-per-event** pricing. Your bill has three parts:

1. **Reviews:** a price for each review saved. It depends on your Apify plan (table below). Rows in the Hotels and Inputs tables are free.
2. **Actor start:** $0.0002 per run at the default memory (4 GB). You don't need to change the memory.
3. **Platform usage:** the computing time of the run, paid on top of the events. It depends on how many hotels and pages a run reads.

| Apify plan | Price per review | Price per 1,000 reviews |
|---|---|---|
| 💲 Free | $0.001 | $1.00 (but each Free run stops at 10 reviews) |
| 💲 Starter | $0.0009 | $0.90 |
| 💲 Scale | $0.0008 | $0.80 |
| 💲 Business and higher | $0.0007 | $0.70 |

The plan discount applies to the review price only. The start fee is the same on every plan, and platform usage is billed at your Apify plan's own rates.

**Example costs:**

| Example | Plan | Review charges | Start fee | Review charges + start fee | Platform usage |
|---|---|---|---|---|---|
| 💲 Default input: 10 reviews from one hotel | Free | 10 × $0.001 = $0.01 | $0.0002 | $0.0102 | see your run page |
| 💲 1,000 reviews (needs a paid plan) | Starter | 1,000 × $0.0009 = $0.90 | $0.0002 | $0.9002 | see your run page |
| 💲 1,000 reviews (needs a paid plan) | Scale | 1,000 × $0.0008 = $0.80 | $0.0002 | $0.8002 | see your run page |
| 💲 1,000 reviews (needs a paid plan) | Business | 1,000 × $0.0007 = $0.70 | $0.0002 | $0.7002 | see your run page |

There is no fixed number for platform usage, so start with the default 10-review test. When it finishes, the run page shows what the run cost in total. Use that to estimate a larger job, then scale up. To cap your spend, set a **maximum charge limit** when you start a run; the Actor stops at the limit and keeps the reviews already saved.

See the [pricing tab](https://apify.com/insights_data/booking-review-scraper/pricing) for the current prices.

#### Is scraping Booking.com free?

You can try this Apify booking reviews scraper for free. The [Apify Free plan](https://apify.com/pricing) gives you $5 in monthly credit, which pays for the review charges and the platform usage together. Each Free run stops at **10 reviews in total** (not per hotel). If you run the same input again, you get the same newest reviews again, because every run starts at the top of the list. To get different reviews, change the sort order, the filters or the "Reviews since" date, or use another hotel. Any paid Apify plan removes the 10-review limit.

***

### ⬇️ Input

The only required field is **Hotel links**. Everything else is optional, and the defaults already give you a working run.

#### Settings most people change

| Field | Name in JSON | What it does | Default |
|---|---|---|---|
| 🔗 Hotel links | `urls` | One or more Booking.com hotel page links. Required. | prefilled with a sample hotel |
| 📊 Reviews per hotel | `maxReviewsPerHotel` | Maximum reviews per hotel. `0` removes the per-hotel cap. | `10` |
| 🔃 Sort reviews by | `sortReviewsBy` | `newest`, `oldest`, `relevant`, `highest` or `lowest` | `newest` |
| 📅 Reviews since | `cutoffDate` | Keep only reviews written on or after a date | empty |
| ⭐ Review scores | `reviewScores` | `ALL`, `superb`, `good`, `passable`, `poor`, `very_poor` | `["ALL"]` |
| 🧳 Traveler types | `travelerTypes` | `couples`, `families`, `solo`, `friends`, `business` | all |
| 🌍 Review languages | `languages` | Language codes (list below) | all |
| 🔍 Search words | `searchText` | Only reviews that mention this word or phrase | empty |
| 🌐 Proxy | `proxyConfiguration` | Off by default. Leave it off: if Booking.com blocks a request, the Actor switches to Apify Proxy on its own. | off |

Here's an example that collects the 10 newest reviews of one hotel (the same as the prefilled input):

```json
{
  "urls": ["https://www.booking.com/hotel/us/the-langham-chicago.html"],
  "maxReviewsPerHotel": 10,
  "sortReviewsBy": "newest",
  "reviewScores": ["ALL"]
}
```

See the [input tab](https://apify.com/insights_data/booking-review-scraper/input-schema) for a full description of all fields.

#### Hotel links

Use the link of a Booking.com hotel page. Apartments, hostels and guest houses also use hotel page links, so Booking.com accommodation reviews of those work the same way.

- ✅ Good: `https://www.booking.com/hotel/us/the-langham-chicago.html` (long links with `?aid=...` also work)
- ❌ Bad: `https://www.booking.com/searchresults.html?ss=Chicago` (a search page, not a hotel page)

> ⚠️ A link that is not a Booking.com hotel page is not scraped and is marked as "failed" in the Inputs table. A hotel listed twice is scraped once.

Via the API you can also send a link with your own label. The label comes back as `customData` on every review of that hotel:

```json
{
  "urls": [
    {
      "url": "https://www.booking.com/hotel/us/the-langham-chicago.html",
      "userData": { "group": "Chicago" }
    }
  ]
}
```

#### Review scores

Booking.com sorts every review into one of its own score bands: Superb (about 9 and up), Good (about 7 to 9), Passable (about 5 to 7), Poor (about 3 to 5) and Very poor (about 1 to 3). Booking.com decides the band for a review on the border, and the Actor uses Booking.com's bands as they are. Pick `poor` and `very_poor` to collect Booking.com negative reviews.

- ✅ Good: `["poor", "very_poor"]`
- ❌ Bad: `["ALL", "poor"]`

> ⚠️ Remove `ALL` when you choose specific bands. If `ALL` stays selected, every score is kept.

To collect only Booking.com positive reviews, for example for testimonials, pick `superb`.

#### Reviews since

In the Console, pick a date in the calendar, or switch to a relative period and enter for example 30 days, 6 months or 1 year back from today. In JSON, use a date such as `"2026-01-31"` or a period such as `"30 days"` or `"6 months"`. Dates are in UTC.

#### Review languages

Codes: `ar` Arabic, `bg` Bulgarian, `ca` Catalan, `zh` Chinese, `hr` Croatian, `cs` Czech, `da` Danish, `nl` Dutch, `en` English, `et` Estonian, `fi` Finnish, `fr` French, `de` German, `el` Greek, `he` Hebrew, `hu` Hungarian, `is` Icelandic, `id` Indonesian, `it` Italian, `ja` Japanese, `ko` Korean, `lv` Latvian, `lt` Lithuanian, `no` Norwegian, `pl` Polish, `pt` Portuguese, `ro` Romanian, `ru` Russian, `sr` Serbian, `sk` Slovak, `sl` Slovenian, `es` Spanish, `sv` Swedish, `th` Thai, `tr` Turkish, `uk` Ukrainian, `vi` Vietnamese. In the Console you pick them by name.

#### Reviews per hotel

`10` is the default. Set a higher number, or `0` for no per-hotel cap. Each saved review is charged, so big hotels can add up.

> ⚠️ Negative numbers stop the run with an input error. Use `0` for no cap.

***

### ⬆️ Output

When the run finishes, the **Output** tab of the run page shows three tables: **Reviews** (one row per review), **Hotels** (one row per hotel) and **Inputs** (one row per link you gave, with its status and number of reviews). The Reviews table has views for Overview, Review text, Guests, Stays, Photos and Hotel facts. To download, use **Storage → Datasets → Export** and pick JSON, CSV, Excel, XML or HTML. Each run gives you a ready-made Booking.com reviews dataset.

#### JSON example

A review from the input example above (shortened; the full row also has the guest, stay, photo and hotel fields from the data table):

```json
{
  "id": "d8812a09bc6b3805",
  "hotelId": "us/the-langham-chicago",
  "reviewPage": 1,
  "userName": "Zeina",
  "userLocation": "France",
  "roomInfo": "Deluxe Double Room with Two Double Beds",
  "stayDate": "October 2026",
  "stayLength": "5 nights",
  "reviewDate": "October 16, 2026",
  "reviewTitle": null,
  "rating": 10.0,
  "reviewTextParts": {},
  "customData": {},
  "travelerType": "Family",
  "hotelName": "The Langham Chicago",
  "hotelScore": 9.4,
  "hotelCategoryScores": { "cleanliness": 9.8, "location": 9.8, "staff": 9.6 }
}
```

This guest gave a score without text, so `reviewTextParts` is empty.

#### What review text looks like

When a guest writes text, it is split into what they liked and what they disliked. The format looks like this (illustrative text):

```json
{
  "reviewTitle": "Great location, small room",
  "rating": 8.0,
  "reviewTextParts": {
    "Liked": "Friendly staff and a short walk to the river.",
    "Disliked": "The room was smaller than in the photos."
  },
  "hotelReply": "Thank you for staying with us."
}
```

#### How do I export Booking.com reviews to Excel or CSV?

Open the run and go to **Storage → Datasets → Export**, choose Excel or CSV, and download. To export Booking.com reviews automatically after every run, connect Google Sheets or another app (see the integrations section below).

***

### 💡 Tips and advanced usage

#### How many results can you scrape with Booking Review Scraper?

On a paid plan there is no total limit per run (other than a maximum charge limit you set), but there is one per hotel: a run checks up to about 20,000 reviews per hotel for each score and traveler filter combination, so with the default filters you get at most about 20,000 reviews per hotel per run. Booking.com may also stop showing more reviews deep in a very long list; the Actor then keeps what it collected and says so in the log. Do a quick test run on your hotels to see what you get.

#### Get only the newest reviews every week

For Booking.com recent reviews only, set **Sort reviews by** to Newest first and add a **Reviews since** date such as 7 days. The run stops at that date, which keeps it short. Schedule it weekly to track new Booking.com guest reviews. With Most relevant, Highest or Lowest sorting, older reviews are read and then dropped, so a date works fastest with Newest first or Oldest first.

#### Combining score and traveler filters

Each pair of a score band and a traveler type is collected separately, and up to 12 pairs are used per hotel. **Reviews per hotel** still caps the total for the hotel across all pairs. With Most relevant sorting and several pairs, reviews are grouped by pair.

#### If your run fails or returns nothing

1. Open the **Inputs** table in the Output tab. It shows each link with "ok", "failed" or "skipped".
2. Open the **Log** tab of the run. It says in plain words what happened for each hotel.
3. Check that each link is a hotel page (not a search page).
4. Remove filters and try again. If none of the languages, score bands or traveler types you chose exist for a hotel, that hotel fails. Values that exist are used; the others are skipped with a note in the log.

If Booking.com stops providing a detail, that field is left empty and the log tells you.

***

### 🔌 Booking Review Scraper integrations and API

#### Can I use Booking Review Scraper as a Booking.com reviews API?

Yes. The [Apify API](https://docs.apify.com/api/v2) lets you start runs, schedule them and fetch results, so you can use it as a hotel reviews API in your own apps. Use the `apify-client` [NPM package](https://apify.com/insights_data/booking-review-scraper/api/javascript) for Node.js or the `apify-client` [PyPI package](https://apify.com/insights_data/booking-review-scraper/api/python) for Python. The [API tab](https://apify.com/insights_data/booking-review-scraper/api) has ready-to-use code.

#### How to scrape Booking.com with Python

The Python client turns this into a Booking.com scraper API call in a few lines:

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")  # booking scraper Python example: 10 newest reviews of one hotel
run = client.actor("insights_data/booking-review-scraper").call(run_input={
    "urls": ["https://www.booking.com/hotel/us/the-langham-chicago.html"],
    "maxReviewsPerHotel": 10,
    "sortReviewsBy": "newest",
    "reviewScores": ["ALL"],
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["hotelName"], item["rating"], item["reviewDate"])
```

#### Can I integrate Booking Review Scraper with other apps?

Yes. Connect it with almost any cloud service through [Apify integrations](https://apify.com/integrations): **Make, Zapier, Slack, Google Sheets, Google Drive, Airbyte, GitHub, LangChain** and more. Use [webhooks](https://docs.apify.com/integrations/webhooks) to act when a run finishes. Example: a weekly scheduled run with a 7-day "Reviews since" date sends new low-score reviews of your hotel to a Google Sheet and a Slack channel.

#### Can I use Booking Review Scraper with AI agents (MCP)?

Yes. AI assistants such as Claude can call it like a booking reviews API through the Apify MCP server. Open the [MCP tab](https://apify.com/insights_data/booking-review-scraper/api/mcp) for setup steps.

***

### 🧭 Other travel and review scrapers

These Actors from the same author cover what this booking scraper doesn't: hotel prices, flights and product reviews.

| Actor | What it does |
|---|---|
| 🏨 [Google Hotels Scraper](https://apify.com/insights_data/google-hotels-scraper) | Hotel prices, ratings, star class, amenities, coordinates, photos and booking links for any city or hotel |
| ✈️ [Google Flights Prices API](https://apify.com/insights_data/google-flights-prices-api) | Live fares, schedules, stops, layovers, airlines and booking options for one-way, round-trip and multi-city routes |
| 🛍️ [Flipkart Reviews Scraper](https://apify.com/insights_data/flipkart-reviews-scraper) | Flipkart product reviews, star ratings, photos and rating summaries in bulk |
| 🛒 [Amazon Product Scraper](https://apify.com/insights_data/amazon-product-scraper) | Amazon products with price, rating, reviews, Best Sellers Rank, variants and offers |

***

### ❓ FAQ

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

Web scraping is generally legal if you extract publicly available data. Booking.com customer reviews are public, but they contain personal data such as guest names, so you should **respect personal data** rules (for example, GDPR), only keep personal data when you have a legitimate reason, respect intellectual property, and take Booking.com's [Terms of Service](https://www.booking.com/content/terms.html) into account. This is not legal advice; if in doubt, ask a lawyer.

#### How to scrape reviews from Booking.com without coding?

Paste the hotel link into Booking Review Scraper, click Start and download the table. You don't write any code.

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

No. This Booking.com scraper reads the public review list of each hotel, so you don't log in anywhere.

#### How does Booking Review Scraper work?

Booking Review Scraper is a Booking.com review crawler: it goes through a hotel's review list the way you would, only faster. It opens each hotel page, reads the hotel facts and the reviews with your sort order and filters, and saves each review the moment it is read. It stops at your reviews-per-hotel limit, your date, the end of the list, about 20,000 checked reviews for one score and traveler filter combination, the Free plan limit or your maximum charge limit.

#### How is Booking Review Scraper different from copying reviews by hand?

| Feature | Booking Review Scraper | Copying by hand |
|---|---|---|
| Many hotels at once | ✅ | ❌ |
| Filters for score, traveler type, language, words and date | ✅ | only one hotel at a time |
| Structured fields (room, stay dates, category scores) | ✅ | ❌ |
| Export to JSON, CSV or Excel | ✅ | ❌ |
| Scheduled runs | ✅ | ❌ |
| Price | from $0.70 per 1,000 reviews + start fee + platform usage | your time |

#### Why scrape Booking.com hotel reviews?

- **Hotel review analysis:** find what guests praise and what they complain about, by room type or traveler type.
- **Benchmark competitors:** compare category scores across a city or a hotel chain.
- **Improve service:** spot repeated issues early in Booking.com user reviews.
- **Research and AI:** a hotel reviews dataset with real guest text in many languages helps you train or test models.

#### Do I need coding skills?

No. Booking Review Scraper is a no-code hotel reviews scraper: you fill in a form and click Start. Developers can use the API and Python client described above.

#### Is there a free Booking.com reviews scraper?

You can use Booking Review Scraper on the Apify Free plan with its $5 monthly credit. Each Free run stops at 10 reviews in total. Paid plans remove that limit.

#### Why am I getting fewer results than expected?

- **Free plan:** each run stops at 10 reviews in total.
- **Reviews per hotel:** the default is 10. Raise it or set `0`.
- **Filters:** a score band, traveler type, language, search words or date can match only a few reviews. Remove filters and test again.
- **`ALL` in Review scores:** if you meant to filter, remove `ALL`.
- **Very large hotels:** see "How many results can you scrape" above.
- **Wrong link:** check the Inputs table. A search page or another non-hotel link is not scraped and shows "failed".
- **Maximum charge limit:** the run stops when it is reached.

***

### 📧 Support and feedback

Found a bug or have a feature request? Please create an issue on the [Issues tab](https://apify.com/insights_data/booking-review-scraper/issues/open). Missing a field you need from a booking reviews scraper? Tell us there.

Need a **custom solution**, more fields or a different travel site? Contact us at hello.insights.data@gmail.com.

Built and maintained by [insights_data](https://apify.com/insights_data).

# Actor input Schema

## `urls` (type: `array`):

One or more Booking.com hotel page links, e.g. https://www.booking.com/hotel/us/the-langham-chicago.html. Bulk input is supported; add as many hotels as you need. Add userData to a link to get it back as customData on every review.

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

Maximum number of reviews to collect for each hotel. Use 0 for every available review. Free plan users get up to 10 reviews per run in total; paid plans have no limit.

## `sortReviewsBy` (type: `string`):

Order in which reviews are collected. The cutoff date works fastest with Newest first or Oldest first.

## `cutoffDate` (type: `string`):

Only keep reviews written on or after this date (UTC). Pick a calendar date, or switch to relative and enter a period such as 30 days, 6 months or 1 year back from today. Leave empty for no cutoff.

## `reviewScores` (type: `array`):

Only reviews in these score bands. ALL keeps every score. Superb is 9+, Good 7-9, Passable 5-7, Poor 3-5, Very poor 1-3.

## `travelerTypes` (type: `array`):

Only reviews from these kinds of travelers. Leave empty for all travelers.

## `languages` (type: `array`):

Only reviews written in these languages. Leave empty for every language. A language the hotel has no reviews in is skipped with a note in the log.

## `searchText` (type: `string`):

Only reviews that mention this word or phrase, e.g. breakfast. Leave empty to skip.

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

Runs start without a proxy. If the site blocks the request, the Actor automatically switches to a datacenter proxy and then a residential proxy, and stays on it for the rest of the run.

## Actor input object example

```json
{
  "urls": [
    "https://www.booking.com/hotel/us/the-langham-chicago.html"
  ],
  "maxReviewsPerHotel": 10,
  "sortReviewsBy": "newest",
  "reviewScores": [
    "ALL"
  ],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

All collected reviews, overview view.

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

One row per hotel with score, address and category scores.

## `sources` (type: `string`):

One row per hotel link you gave, with its status and review count.

## `summary` (type: `string`):

Totals for the run.

# 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 = {
    "urls": [
        "https://www.booking.com/hotel/us/the-langham-chicago.html"
    ],
    "maxReviewsPerHotel": 10,
    "reviewScores": [
        "ALL"
    ],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("insights_data/booking-review-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 = {
    "urls": ["https://www.booking.com/hotel/us/the-langham-chicago.html"],
    "maxReviewsPerHotel": 10,
    "reviewScores": ["ALL"],
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("insights_data/booking-review-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 '{
  "urls": [
    "https://www.booking.com/hotel/us/the-langham-chicago.html"
  ],
  "maxReviewsPerHotel": 10,
  "reviewScores": [
    "ALL"
  ],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call insights_data/booking-review-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,insights_data/booking-review-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/aTwq2ZWISAopOhE7U/builds/yacQaTmzBJvXoP9Ej/openapi.json
