---
title: "How to Scrape Booking.com Hotels and Reviews | Scrape.ly"
description: "Scrape Booking.com hotel prices for your dates, ratings, category scores and rooms, plus guest reviews. Two real runs, their cost, API and MCP code."
url: https://scrape.ly/blog/scrape-booking-com
markdown: https://scrape.ly/blog/scrape-booking-com.md
---

[Tutorials](https://scrape.ly/blog/category/tutorials.md)

# How to Scrape Booking.com: Hotel Prices, Ratings, Rooms and Reviews

Scrape Booking.com stays for any city and dates: live stay price, rating, review count, category scores, rooms and facilities, plus guest reviews. No-code steps, curl, Python, Node.js and MCP, with two real runs from 27 October 2026 and their exact cost.

[Roam & Roof Actor publisher on the Scrape.ly Store](https://scrape.ly/blog/author/roamandroof.md)

- Published

  Oct 27, 2026

- Reading time

  9 min read

![Pixel-art robot with an orange >\_ on its terminal head pulls a stay card with a navy house icon and a gold star out of a hotel tower whose sign shows the navy Booking.com B. logo, and drops it into a crate](https://scrape.ly/media/scrape-booking-com.png?w=1080)

To scrape Booking.com, give a ready-made Actor a destination and your dates, or paste Booking.com search or hotel URLs, and it returns one row per property: the live price for your stay, star rating, guest rating, review count, category scores such as cleanliness and location, rooms with bed types and cancellation terms, facilities, photos and coordinates. A second Actor turns hotel pages into guest reviews. On Scrape.ly each is a preset and one click, or one API call, with no Booking.com account.

This guide covers the fields you get, the no-code steps, the same jobs in curl, Python, Node.js and through an AI agent, two real runs from 27 October 2026 (ten stays near Lisbon's Rossio for two nights in November, and ten reviews of a Prague hotel), their logs and exact cost.

## What data you can get from Booking.com

The [Booking.com Scraper](https://scrape.ly/store/roamandroof/booking-scraper.md) returns one row per property:

| Field                                                        | What it holds                                                                  |
| ------------------------------------------------------------ | ------------------------------------------------------------------------------ |
| `name`, `type`, `stars`, `description`                       | Property name, type (hotel, apartment, hostel…), star rating and description   |
| `price`, `currency`, `checkInDate`, `checkOutDate`           | The live total for your stay, in the currency you chose                        |
| `rating`, `ratingLabel`, `reviews`                           | Guest score out of 10, its label and the number of reviews                     |
| `categoryReviews`, `reviewSummary`                           | Scores for cleanliness, comfort, staff, facilities, location and value         |
| `rooms`                                                      | Room types, persons, beds, facilities and price options with cancellation type |
| `address`, `location`                                        | Full address, city, postal code, country and coordinates                       |
| `images`, `roomImages`                                       | Gallery and room photos                                                        |
| `checkIn`, `checkOut`, `highlights`, `policies`, `finePrint` | House rules and location highlights                                            |

The [Booking Reviews Scraper](https://scrape.ly/store/roamandroof/booking-reviews-scraper.md) returns one row per guest review: score, title, liked and disliked text, room type, stay dates and length, traveler type, reviewer country, helpful votes and the property's response, plus the hotel's overall rating and review count.

## How to scrape Booking.com without code

1. Open the Booking.com Scraper in the Scrape.ly Store.
2. Pick the [Hotels in Lisbon, 10 results](https://scrape.ly/store/roamandroof/booking-scraper/presets/hotels-lisbon.md) preset. It fills in this input:

```json
{
  "search": "Lisbon",
  "startUrls": [],
  "checkIn": "2026-11-16",
  "checkOut": "2026-11-18"
}
```

3. Change the destination and dates, or paste Booking.com search or hotel URLs, and click **Start**. Our run took 10 seconds.
4. Open the dataset and export it as JSON, CSV or Excel.

For reviews, open the Booking Reviews Scraper and run [Most relevant reviews of a Prague hotel, 10 reviews](https://scrape.ly/store/roamandroof/booking-reviews-scraper/presets/url-filters.md) with your own hotel URL.

The input fields that matter most:

- `search` or `startUrls`: a destination as you'd type it into Booking.com, or search and hotel URLs (filters in a search URL are kept).
- `checkIn`, `checkOut`, `adults`, `children`, `rooms`: prices and room options need dates. Relative dates such as `21 days` keep a saved input current.
- `propertyType`, `starsCount`, `minScore`, `minMaxPrice`: filter to hotels or apartments, a star rating, a minimum guest score, or a nightly price range like `100-150`.
- `sortBy`, `currency`, `language`: order, 25 currencies and 30 languages.
- `maxItems`: properties per search, up to 1,000.
- For reviews: `maxReviewsPerHotel`, `sortReviewsBy` (newest, oldest, highest or lowest score, or relevance), `cutoffDate` and `reviewScores` bands.

The [4-star Lisbon hotels rated 8+](https://scrape.ly/store/roamandroof/booking-scraper/presets/search-filters.md) preset shows the filters together.

Scrape.ly Store Booking.com Scraper Booking.com hotels, apartments and other stays for any destination and dates: live stay price, rating, category scores, rooms and facilities, with no login.

[Try it free](https://scrape.ly/store/roamandroof/booking-scraper.md) [Browse the Store](https://scrape.ly/store.md)

## How to scrape Booking.com with the API

Create a token under **Settings → API & Integrations** in the dashboard and store it as `SCRAPELY_TOKEN`. A 10-property search takes about 10 seconds, so the synchronous endpoint fits:

```shell
curl -X POST "https://api.scrape.ly/v2/actors/roamandroof~booking-scraper/run-sync-get-dataset-items"
  -H "Authorization: Bearer $SCRAPELY_TOKEN"
  -H "Content-Type: application/json"
  -d '{"search": "Barcelona", "checkIn": "21 days", "checkOut": "23 days", "adults": 2, "propertyType": "Hotels", "minScore": "8", "currency": "EUR", "maxItems": 50}'
```

Add `?format=csv` for a CSV. A full 1,000-property search takes about 25 minutes, so start it asynchronously (`POST /v2/actors/roamandroof~booking-scraper/runs`), poll `/v2/actor-runs/RUN_ID?waitForFinish=60`, then read `/v2/actor-runs/RUN_ID/dataset/items?format=csv`. The [API docs](https://scrape.ly/docs/api-actors.md) cover each step.

In Python (`pip install scrapely-client-python`), this rate shopper prices two-night hotel stays in the same city starting 5, 12, 19 and 26 days out and prints the median total for each, so a revenue manager sees where demand is building:

```python
import os
from statistics import median

from scrapely_client import ScrapelyClient

client = ScrapelyClient(os.environ["SCRAPELY_TOKEN"], api_url="https://api.scrape.ly")

for weeks in (1, 2, 3, 4):
    check_in, check_out = f"{weeks * 7 - 2} days", f"{weeks * 7} days"
    run = client.actor("roamandroof/booking-scraper").call(
        run_input={"search": "Lisbon", "checkIn": check_in, "checkOut": check_out,
                   "adults": 2, "propertyType": "Hotels", "currency": "EUR", "maxItems": 100}
    )
    prices = [p["price"] for p in client.dataset(run.default_dataset_id).iterate_items() if p.get("price")]
    if prices:
        print(f"check-in in {check_in}: {len(prices)} hotels, median {median(prices):.0f} EUR")
```

In JavaScript or Node.js (`npm install scrapely-client`), pull the newest reviews of your own property every day:

```javascript
import { ScrapelyClient } from 'scrapely-client';

const client = new ScrapelyClient({ token: process.env.SCRAPELY_TOKEN, baseUrl: 'https://api.scrape.ly' });

const run = await client.actor('roamandroof/booking-reviews-scraper').call({
  startUrls: [{ url: 'https://www.booking.com/hotel/cz/jeromehouse.en-gb.html' }],
  sortReviewsBy: 'f_recent_desc',
  cutoffDate: '1 day',
  maxReviewsPerHotel: 200,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const r of items) console.log(r.rating, r.reviewDate, r.dislikedText);
```

The [Booking.com API](https://scrape.ly/api/booking-com-api.md) page shows these Actors as a ready-made API, and the [Python client](https://scrape.ly/docs/client-python.md) docs cover paging through large datasets.

### With an AI agent (MCP)

Scrape.ly runs a hosted MCP server at `https://mcp.scrape.ly`. In Cursor, add it to `~/.cursor/mcp.json`:

```json
{
  "mcpServers": {
    "scrapely": {
      "url": "https://mcp.scrape.ly",
      "headers": { "Authorization": "Bearer YOUR_TOKEN" }
    }
  }
}
```

In Claude Code, run `claude mcp add --transport http scrapely https://mcp.scrape.ly`, then `/mcp` to sign in with OAuth. Then ask: "Use scrapely to find 4-star hotels in Porto for the second weekend of December rated 8.5 or higher, and rank them by price with their cleanliness and location scores." The [MCP docs](https://scrape.ly/docs/mcp.md) list ChatGPT, VS Code, Windsurf and the other clients.

## Two real runs

### Ten stays near Rossio, Lisbon

We ran the Lisbon preset as-is on 27 October 2026: two adults, one room, 16 to 18 November 2026, prices in US dollars. It saved 10 properties in 10 seconds. Prices are the total for the two nights:

| Property                          | Type      | Stars | Price, 2 nights | Rating        | Reviews | Lowest category score     |
| --------------------------------- | --------- | ----- | --------------- | ------------- | ------- | ------------------------- |
| FLH Praça Rossio Elegant Flat     | Apartment | none  | $285            | 8.9 Fabulous  | 69      | Staff 8.4                 |
| FLH Praça Rossio Bright Apartment | Apartment | none  | $273            | 7.9 Good      | 35      | Value for money 7.5       |
| Rossio Hostel                     | Hostel    | none  | $185            | 7.6 Good      | 2,355   | Facilities 7.3            |
| FLH Heart of Rossio Units         | Apartment | none  | $260            | 8.9 Fabulous  | 239     | Staff 8.5                 |
| Hotel Metropole                   | Hotel     | 3     | $234            | 8.5 Very good | 1,230   | Facilities and value, 8.2 |
| My Story Hotel Rossio             | Hotel     | 3     | $308            | 9.0 Superb    | 2,054   | Value for money 8.8       |
| Hotel INN Rossio                  | Hotel     | 3     | $275            | 7.7 Good      | 3,505   | Facilities 7.5            |

```plaintext
20261027T17:17:35.411Z [scrapely.proxy_configuration] INFO  Platform proxy access check succeeded.
20261027T17:17:36.230Z [scrapely.actor] INFO  Searching Lisbon
20261027T17:17:42.330Z [scrapely.actor] INFO  Saved 10 properties. Retries: none.
```

What the ten rows show:

- **The default sort is distance, and one operator dominates it.** Sorted by distance from the search center, every result sat around Rossio square, and six of the ten were apartments from the same operator (FLH). For a market view, sort by `bayesian_review_score` or `price`, or raise `maxItems`.
- **Review counts change what a rating means.** Two apartments scored 8.9 on 69 and 239 reviews; Hotel INN Rossio scored 7.7 on 3,505. Weight ratings by `reviews` before you rank.
- **Category scores explain the overall one.** The Bright Apartment scored 9.7 for cleanliness but 7.9 overall, pulled down by staff (7.7) and value for money (7.5); Rossio Hostel had 9.2 for staff and 7.3 for facilities. That's the detail a hotel benchmarking report needs.
- **Apartments have no stars.** `stars` was empty for every apartment and the hostel, which is normal on Booking.com. Filter on `type` and `rating` instead.
- **Prices are live totals, converted.** The prices came back with long decimals, because Booking.com converts from the property's currency. Round them, and store `checkInDate` with each price, since the same room costs different amounts on different dates.

### Ten reviews of a Prague hotel

We ran the Prague reviews preset as-is: one hotel, ten reviews, sorted by relevance. It saved 10 reviews in 7 seconds. The hotel's overall rating was 9.2 from 5,883 reviews. Reviewer names are left out:

| Score | Posted     | Nights | Room                         | Reviewer from  | Title                                          |
| ----- | ---------- | ------ | ---------------------------- | -------------- | ---------------------------------------------- |
| 9     | 2025-01-04 | 5      | Standard Double or Twin Room | United Kingdom | Superb                                         |
| 10    | 2024-12-07 | 5      | Standard Double or Twin Room | Israel         | A great hotel for your Prague trip!            |
| 9     | 2024-12-03 | 3      | Standard Double or Twin Room | United Kingdom | Enjoyable and memorable get-a-way.             |
| 10    | 2024-07-29 | 3      | Economy Double or Twin Room  | Switzerland    | Perfect location for visiting Prague           |
| 9     | 2024-04-04 | 4      | Standard Double or Twin Room | Sweden         | Great comfy old-style hotel in central Prague. |

- **Relevance isn't recency.** The "most relevant" reviews dated from April 2024 to January 2025. For monitoring, sort newest first (`f_recent_desc`) with a `cutoffDate`.
- **High scores still carry complaints.** Every review scored 9 or 10, yet six of the ten disliked texts mentioned breakfast, and one reported water coming through a shower ceiling. The liked and disliked fields are where the operational detail is.
- **Who stays.** Five reviewers were from the United Kingdom and two from Israel, and stays ran three to five nights, the kind of mix a marketing team segments on.

## What it costs

Both Actors charge per result, platform usage (compute and proxy) included. Prices checked on the Store pages on 27 October 2026: **$0.00237 per property** ($2.37 per 1,000) and **$0.00106 per review** ($1.06 per 1,000).

**Our runs:** 10 × $0.00237 = $0.0237 and 10 × $0.00106 = $0.0106 at list price ($0.01896 and $0.00848 charged, because our plan has a Store discount).

**At scale:** a daily rate check of 100 hotels on four date pairs is 400 properties, about $0.95 a day. A weekly pull of the newest 50 reviews for 20 competitor hotels is 1,000 reviews, $1.06. The Free plan's $5 of monthly usage covers about 2,100 properties or 4,700 reviews.

## What to watch out for

- **Prices need dates.** Without check-in and check-out, prices and room options are empty. A check-in date in the past moves 21 days forward, so a saved input keeps working.
- **About 1,000 properties per search.** Booking.com repeats itself after that. Narrow the area or add filters for the rest.
- **16 months ahead at most.** Booking.com takes stays only about 16 months out.
- **One room offer per room type.** Each room keeps the search offer, not every cancellation alternative.
- **Reviews are personal data.** Reviewer names, avatars and sometimes staff names in the text identify people. Keep scores, dates and text for analysis and leave names out of anything you publish.

## Is it legal to scrape Booking.com?

The Actors read public search, property and review data that anyone can open without an account. Booking.com's [Terms](https://www.booking.com/content/terms.en-gb.html) (read on 27 October 2026) say: "Whether or not you have a commercial purpose, you're not allowed to access, monitor, copy, scrape/crawl, download, reproduce or otherwise use anything on our Platform using any robot, spider, scraper, other automated means". Whether and how those terms bind you depends on your jurisdiction, whether you have an account that accepted them, and your use.

Booking.com's own Demand API is for its affiliate partners: its [prerequisites](https://developers.booking.com/demand/docs/getting-started/prerequisites) require you to be "Registered as a Booking.com Managed Affiliate Partner", with Partner Centre access "provided by your Booking.com Account Manager after signing the agreed contract". For reviews, the GDPR applies to reviewer data; our [GDPR and web scraping](https://scrape.ly/blog/gdpr-web-scraping.md) guide covers the basics. This is not legal advice; for a commercial project, ask a lawyer about your case.

## Why Scrape.ly for Booking.com

- **No partner contract.** Live prices, ratings, rooms and reviews with one Scrape.ly token, instead of an affiliate agreement.
- **Real stay prices.** The total for your dates, guests and rooms, in 25 currencies, with relative dates that keep a scheduled run current.
- **Properties and reviews together.** Two Actors, one dataset format, one bill; add [Tripadvisor](https://scrape.ly/blog/scrape-tripadvisor.md), [Airbnb](https://scrape.ly/blog/scrape-airbnb.md) and [Google Flights](https://scrape.ly/blog/scrape-google-flights.md) for the rest of a trip.
- **Built for monitoring.** Schedule a run, filter to what changed, and send it to Sheets, Slack or a webhook; our [price scraping](https://scrape.ly/blog/price-scraping.md) and [review monitoring](https://scrape.ly/blog/review-monitoring.md) guides show the setup.

## FAQ

### Can you scrape Booking.com for free?

Yes. The Free plan includes $5 of usage credit every month with no credit card, which covers about 2,100 properties or 4,700 reviews at list price.

### Does Booking.com have a public API?

Not for everyone. The Demand API is for registered Managed Affiliate Partners with a signed contract. The Actors return the same public data as JSON through the Scrape.ly API.

### How do I scrape Booking.com prices for specific dates?

Set `checkIn` and `checkOut` as `YYYY-MM-DD`, or as relative dates such as `21 days` and `23 days`, plus `adults`, `children` and `rooms`. The price is the live total for that stay.

### Can I scrape Booking.com reviews?

Yes, with the Booking Reviews Scraper. Paste hotel URLs, choose the sort order, and set `cutoffDate` for only recent reviews or `reviewScores` for a score band.

### How many hotels can I get per city?

About 1,000 per search, which is what Booking.com shows for one search. Filters like stars and minimum score are applied by Booking.com, so a filtered search fills those places with matches.

### Can I scrape Booking.com with Python?

Yes. Install `scrapely-client-python` and call `roamandroof/booking-scraper` or `roamandroof/booking-reviews-scraper`, as in the rate shopper above. The scraping runs in the cloud, so you don't manage proxies or Booking.com's internal API.

Scrape.ly Store Start with the Lisbon preset Run the preset as-is or set your own city and dates. Live stay prices, ratings, category scores and rooms at $2.37 per 1,000 properties, platform usage included.

[Try it free](https://scrape.ly/store/roamandroof/booking-scraper.md) [Browse the Store](https://scrape.ly/store.md)

About the author

[Roam & Roof](https://scrape.ly/blog/author/roamandroof.md) Actor publisher on the Scrape.ly Store

Homes, stays, trips and cars: listings from 40+ property portals, the big travel and booking sites and the main car marketplaces. For agents, investors, travel analysts and dealers. A Scrapely studio.

- [Website](https://scrape.ly/users/roamandroof.md)

Keep reading

## More in Tutorials

- [![Pixel-art robot with an orange >\_ on its terminal head pulls a listing card with a house icon out of an apartment block with balconies whose sign shows the lime idealista logo, and drops it into a crate](https://scrape.ly/media/scrape-idealista.png?w=750)](https://scrape.ly/blog/scrape-idealista.md)
  ### [How to Scrape Idealista Listings: Prices, Size, Rooms and Coordinates](https://scrape.ly/blog/scrape-idealista.md)
  [Scrape Idealista listings in Spain, Italy and Portugal by city, postal code, results URL or property code: price, size, rooms, floor, coordinates, photos and advertiser. No-code steps, curl, Python, Node.js and MCP, plus a real run from 27 October 2026 and its exact cost.](https://scrape.ly/blog/scrape-idealista.md)
- [![Pixel-art robot with an orange >\_ on its terminal head pulls a listing card with a red house icon off two houses at night, in front of which a yard sign shows the red Realtor.com house logo, and drops it into a crate](https://scrape.ly/media/scrape-realtor-com.png?w=750)](https://scrape.ly/blog/scrape-realtor-com.md)
  ### [How to Scrape Realtor.com Listings: Prices, History, Taxes and Risk Scores](https://scrape.ly/blog/scrape-realtor-com.md)
  [Scrape Realtor.com listings for sale, for rent or recently sold by city, ZIP code or URL: price, beds, baths, square feet, sale and price history, tax records, schools and flood and wildfire risk. No-code steps, curl, Python, Node.js and MCP, plus a real run from 27 October 2026 and its exact cost.](https://scrape.ly/blog/scrape-realtor-com.md)
- [![Pixel-art robot with an orange >\_ on its terminal head pulls a listing card with a red house icon off a house at night, beside a yard sign with the red Redfin logo and a green bush, and drops it into a crate](https://scrape.ly/media/scrape-redfin.png?w=750)](https://scrape.ly/blog/scrape-redfin.md)
  ### [How to Scrape Redfin Listings: Prices, Redfin Estimates, History and Schools](https://scrape.ly/blog/scrape-redfin.md)
  [Scrape Redfin listings for sale, sold or for rent from any Redfin search URL, city or ZIP code: price, Redfin Estimate, beds, baths, square feet, price and tax history, schools and coordinates. No-code steps, curl, Python, Node.js and MCP, plus a real run from 27 October 2026 and its exact cost.](https://scrape.ly/blog/scrape-redfin.md)

## The internet is full of data. Start owning yours.

Scrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes.

[Get Started Free](https://my.scrape.ly/register) [Chat with Support](mailto:hello@scrape.ly?subject=Question%20about%20Scrape.ly\&body=Hi%2C%20I%20have%20a%20question%20about%20Scrape.ly.)

No credit card. No setup calls.
