Skip to content

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.

Published
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
In this article
  1. What data you can get from Booking.com
  2. How to scrape Booking.com without code
  3. How to scrape Booking.com with the API
  4. With an AI agent (MCP)
  5. Two real runs
  6. Ten stays near Rossio, Lisbon
  7. Ten reviews of a Prague hotel
  8. What it costs
  9. What to watch out for
  10. Is it legal to scrape Booking.com?
  11. Why Scrape.ly for Booking.com
  12. FAQ
  13. Can you scrape Booking.com for free?
  14. Does Booking.com have a public API?
  15. How do I scrape Booking.com prices for specific dates?
  16. Can I scrape Booking.com reviews?
  17. How many hotels can I get per city?
  18. Can I scrape Booking.com with Python?

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 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 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 preset. It fills in this input:
json
{
  "search": "Lisbon",
  "startUrls": [],
  "checkIn": "2026-11-16",
  "checkOut": "2026-11-18"
}
  1. Change the destination and dates, or paste Booking.com search or hotel URLs, and click Start. Our run took 10 seconds.
  2. 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 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+ preset shows the filters together.

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 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 page shows these Actors as a ready-made API, and the Python client 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 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
Text
2026-10-27T17:17:35.411Z [scrapely.proxy_configuration] INFO  Platform proxy access check succeeded.
2026-10-27T17:17:36.230Z [scrapely.actor] INFO  Searching Lisbon
2026-10-27T17: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.

The Actors read public search, property and review data that anyone can open without an account. Booking.com's Terms (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 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 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, Airbnb and Google Flights 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 and review monitoring 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.

  • booking.com
  • hotels
  • travel
  • price monitoring
  • reviews
  • python
  • api

About the author

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.

//Keep reading\\

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.

No credit card. No setup calls.