[Home](/)[Blog](/blog)Booking.com Reviews API: Two Official Options, Who Qualifies, and What the Review Data Contains

# Booking.com Reviews API: Two Official Options, Who Qualifies, and What the Review Data Contains

 ![Denis Gramm, StayAPI](/blog_post_author.png)

By Denis Gramm, StayAPI· Apr 10, 2026 ·13 min read

I hope you enjoy reading this blog post. If you want our team to help you with hotel data integration, [click here](/book-demo).

Quick summary

This guide covers Booking.com's two official review APIs and who qualifies for each, the route for reading any hotel's reviews, and what a month of live review data looks like.

## Table of contents

- [Key Takeaways](#key-takeaways)
- [The Two Official Booking.com Review APIs](#the-two-official-booking-com-review-apis)
- [Reading Any Hotel's Booking.com Reviews](#reading-any-hotel-s-booking-com-reviews)
- [What a Month of Booking.com Reviews Looks Like](#what-a-month-of-booking-com-reviews-looks-like)
- [Six Things That Trip Up a Booking.com Reviews Pipeline](#six-things-that-trip-up-a-booking-com-reviews-pipeline)
- [Pulling Booking.com Reviews: Request, Response, and a Backfill Script](#pulling-booking-com-reviews-request-response-and-a-backfill-script)
- [Getting Started](#getting-started)
- [FAQ](#faq)

Booking.com does have a reviews API, two of them in fact, and neither one is open to a data team.  
 The Guest Review API lets a property (or its PMS or channel manager) read and reply to its own reviews, and the Demand API's review endpoints serve affiliates whose contract includes them.  
 If you searched for a Booking.com reviews API because you need review data for hotels you don't run, like a portfolio, a comp set, or a market study, neither program was built for you.  
 This guide covers what each official API returns and who gets it, the route for everyone else, and what 99 live reviews from one Lisbon hotel reveal about handling the data.  
 Booking.com says it holds [more than 70 million property reviews](https://www.booking.com/content/about.html), so the handling details matter at any scale.

![Booking.com review fields compared with a typical OTA review](https://stayapi.com/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MjAsInB1ciI6ImJsb2JfaWQifX0=--7d9e1762edaa5b8bb250f222078a6731c06c9e2b/why_booking_com_review_data_is_worth_the_effort_b.png?disposition=inline)

## Key Takeaways

- **Booking.com has two official review APIs.** The Guest Review API serves properties and their connectivity providers; the Demand API's review endpoints serve affiliates whose agreement includes them.
- **Data teams qualify for neither.** Competitor monitoring, portfolio reporting, and research without a travel-selling business need a data API or a scraper.
- **The positive/negative split is a strong hint, and guests bend it.** In one month of live reviews, 16 of 30 real complaints came with a 9 or a 10, and one guest filed a complaint in the positive field.
- **English-only analysis misses most complaints.** The hotel's most repeated complaint showed up in 9 reviews across 7 languages, and only 1 was in English.
- **Clean the data before you count it.** Score-word titles, multilingual "nothing" answers, regional language codes, and duplicated traveler types all skew a naive pipeline.

## The Two Official Booking.com Review APIs

Our [Booking.com API guide](https://stayapi.com/blog/booking-com-api) maps the wider set of partner programs; this table covers only the review side.  
 Both review programs are documented publicly, and both sit behind a partnership.

| API | Who Gets Access | What It Returns | The Catch |
| --- | --- | --- | --- |
| **Guest Review API** (Connectivity) | Properties and their connectivity providers, once the machine account has review permission | Reviews by property: headline, positive and negative text, language, per-review scores for clean, facilities, location, services, staff, and value, plus a reply endpoint | Your own properties only, for internal use |
| **Demand API reviews and review scores** | Affiliate partners whose agreement includes these endpoints | Reviews and score breakdowns for up to 100 accommodations per request, filterable by language and change date | Needs a travel-selling business, and the reviews are for showing next to rooms you sell |

The [Guest Review API](https://developers.booking.com/connectivity/docs/review-api) returns 10 reviews per call by default, pages with a `next_page` cursor, and accepts a `from_date` filter for incremental pulls.  
 Its docs are blunt about scope: "Guest reviews retrieved by this API may not be used on your public page. The API is for internal use by properties."  
 If you run the hotel, it's the better tool, because each review carries the `reservation_id` of the stay behind it, which no outside source can match.  
 The Demand API's [accommodation reviews endpoint](https://developers.booking.com/demand/docs/open-api/demand-api/accommodations/accommodations/reviews) takes a list of accommodation IDs and returns their reviews, with a companion endpoint for score breakdowns.  
 It fits an affiliate site that shows guest reviews next to the rooms it sells.  
 The extranet and the Pulse app show the same reviews on screen for property staff.  
**Neither program is open to a team that only needs the data.**  
 The Guest Review API stops at your own properties, and the Demand API asks for a travel-selling business with reviews written into the agreement.  
 That's the gap where competitor monitoring, portfolio reporting, and market research land.

## Reading Any Hotel's Booking.com Reviews

Outside the partner programs, two routes read the reviews every visitor sees.  
 Scraping works for one-off pulls, but Booking's review pages paginate per language, load through internal calls, and change markup under constant A/B tests; our [Booking scraper guide](https://stayapi.com/blog/booking-scraper) covers the tools, DIY Python, and what each costs to keep running.  
 A data API reads the same public reviews and returns them as JSON by hotel ID, with the upkeep on the provider's side.  
 StayAPI's [Booking.com API](https://stayapi.com/apis/booking) splits review data across three endpoints.

| Endpoint | What It Returns | Use It For |
| --- | --- | --- |
| [`/v1/booking/hotel/reviews`](https://stayapi.com/docs/endpoints/booking/hotel-reviews) | Individual reviews: score, date, positive and negative text, language, guest country and traveler type, room and nights, hotel reply | Reading text, backfills, reply tracking |
| [`/v1/booking/hotel/reviews/scores`](https://stayapi.com/docs/endpoints/booking/hotel-reviews-scores) | 7 category scores, score distribution, scores by traveler type | Category and segment benchmarks |
| [`/v1/booking/hotel/reviews/summary`](https://stayapi.com/docs/endpoints/booking/hotel-reviews-summary) | Total count, language and traveler-type breakdowns, top review topics | Sizing a review base, topic trends |

Here's how the four routes compare for the jobs people bring to this search.

| | Guest Review API | Demand API | Scraping | Data API (StayAPI) |
| --- | --- | --- | --- | --- |
| **Hotels covered** | Your own | Booking.com inventory you sell | Any public listing | Any public listing |
| **Access** | Connectivity partnership | Affiliate agreement | None | Signup, 50 free requests |
| **Reply to reviews** | Yes | No | No | No |
| **Review tied to a reservation** | Yes (`reservation_id`) | No | No | No |
| **Category scores** | Per review | Score breakdowns | What the page shows | 7 categories, overall and by traveler type |
| **Who fixes breakage** | Booking.com | Booking.com | You | The provider |

The official APIs win the rows that need the hotel's own systems: replies, reservations, and per-review categories.  
 For reviews across Booking.com, TripAdvisor, Google, and other sites in one schema, our [hotel reviews API guide](https://stayapi.com/blog/hotel-reviews-api) compares the platforms.

## What a Month of Booking.com Reviews Looks Like

To see what the data holds in practice, we pulled every review posted between August 30 and September 29, 2026 for the Maxime Boutique Hotel Avenida da Liberdade in Lisbon (Booking ID 4045490).  
 That's 99 reviews, newest first, from a property with 3,616 reviews in 39 languages and an 8.9 overall score.  
 Our [Booking.com review score guide](https://stayapi.com/blog/booking-com-review-score) covers how that 8.9 is calculated and what counts as a good score in Lisbon.

| Measure | Reviews (of 99) |
| --- | --- |
| Score only, no text at all | 43 |
| Positive text | 56 |
| Negative field filled | 44 |
| Negative field that said "nothing" in some language | 14 |
| Real complaints | 30 |
| Real complaints written in English | 9 |
| Hotel replied | 46 |

**A complaint doesn't mean a bad review.**  
 16 of the 30 real complaints came with a 9 or a 10, and 7 came with a perfect 10.  
 One 10/10 guest's entire negative field read "The bathroom sink. That's all."  
 Reviews with a real complaint averaged 8.33, against 9.17 for the rest, so the split tells you what bothered a guest, and the score tells you how the stay went.

**The biggest issue hid outside English.**  
 9 reviews complained about missing wardrobe space or no fridge in the room, written in German, English, Spanish, French, Italian, Portuguese, and Romanian.  
 Only 1 of them was in English (a 7/10 guest who found "just eight hangers in an open space for a two-person room").  
 An English-only pipeline sees one guest grumbling about hangers; the full data shows the hotel's most repeated complaint of the month.  
 The summary endpoint agrees at scale: Storage ranks among the top 10 review topics across all 3,616 reviews, with 108 mentions.

**Guests don't always respect the split.**  
 A 6/10 guest wrote "Breakfast was exceptionally poor" in the positive field, between praise for the location and the staff.  
 Treat the two fields as a strong hint about which text is praise and which is criticism, and let a text step catch the exceptions.

**Category scores point at the same weak spots.**  
 Location scores 9.6, staff 9.4, cleanliness 9.2, and comfort 9.1, while facilities (8.8), value for money (8.7), and wifi (8.7) trail.  
 Business travelers are the toughest segment across 193 reviews: 8.6 overall, 8.4 for value, and 8.3 for wifi, against a 9.0 wifi score from families.

![Four uses of Booking.com review data: reputation monitoring, sentiment dashboards, sub-score benchmarking, and market intelligence](https://stayapi.com/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MjEsInB1ciI6ImJsb2JfaWQifX0=--e71924d2374f943e8362a6e9fd47d6f863035418/use_cases_for_booking_com_review_data_a.png?disposition=inline)

## Six Things That Trip Up a Booking.com Reviews Pipeline

Every one of these showed up in the Lisbon pull, and each one skews a count if you skip it.

1. **Titles are often Booking's score words.** 61 of 99 titles were "Exceptional", "Excellent", "Very Good", or "Pleasant", the label that matches the score, which is what appears when a guest leaves the title blank. Drop them before any text analysis.
2. **"Nothing" arrives in every language.** A short placeholder list (N/A, Not applicable, Nada, Rien, Nichts) caught 6 of the 14 empty complaints. The other 8 slipped through in 7 languages, from "Nulla" to "Nada negativo." and "Geen opmerkingen aan te geven." Translate or classify the negative field before you count complaints; our [review sentiment analysis guide](https://stayapi.com/blog/hotel-review-sentiment-analysis) covers the options.
3. **Language codes are regional.** `en-gb` and `en-us`, `pt-pt` and `pt-br` arrive as separate values, so group by the prefix before comparing markets. The summary endpoint names languages instead ("English" and "American English").
4. **Traveler types repeat under two names.** The scores endpoint returned `couple` and `young_couple` with the same 2,389 reviews, and `family` and `family_with_young_children` with the same 319. Sum across types and you double-count.
5. **Check types before math.** One `score_distribution` entry came back with `percent` as the string `"0.80"` while its neighbors were numbers.
6. **Backfill newest-first and stop at a date.** `sort=recent_desc` plus a cutoff pulled this month of reviews in 4 calls instead of paging through all 3,616.

## Pulling Booking.com Reviews: Request, Response, and a Backfill Script

A single call takes the hotel ID and returns up to 25 reviews.  
 This request asks for the fourth page, newest first, as pulled on September 29:

```
curl -G "https://api.stayapi.com/v1/booking/hotel/reviews" \
  -H "x-api-key: YOUR_API_KEY" \
  -d hotel_id=4045490 -d sort=recent_desc -d per_page=25 -d page=4
```

The response, truncated to one review:

```
{
  "success": true,
  "hotel_id": "4045490",
  "data": {
    "reviews_returned": 25,
    "reviews": [
      {
        "id": "5335637213",
        "score": 10.0,
        "reviewed_date": "2026-08-31 02:51:14",
        "is_incentivised": false,
        "guest": {
          "country_code": "us",
          "traveler_type": "Solo traveler"
        },
        "stay_details": {
          "room_type": "Deluxe Double Room",
          "nights": 3
        },
        "review": {
          "title": "Loved it!&",
          "positive": "The location was great. The bed súper comfortable...",
          "negative": "The bathroom sink. That’s all.",
          "language": "en-us"
        },
        "partner_reply": "...It is really gratifying to know how enjoyable your stay was...",
        "travel_purpose": "leisure"
      }
    ]
  }
}
```

The script below is the backfill we ran for this guide.  
 It pages newest-first, stops at the cutoff date, filters the simple placeholders, and counts complaint languages by prefix.

```
import os
from collections import Counter

import requests

API = "https://api.stayapi.com/v1/booking/hotel/reviews"
HEADERS = {"x-api-key": os.environ["STAYAPI_KEY"]}
PLACEHOLDERS = {"n/a", "na", "none", "nothing", "not applicable", "-", "nada", "rien", "nichts", "niente"}

def reviews_since(hotel_id, cutoff):
    """Newest-first pages, stopping at the first review older than the cutoff."""
    page = 1
    while True:
        params = {"hotel_id": hotel_id, "sort": "recent_desc", "per_page": 25, "page": page}
        batch = requests.get(API, headers=HEADERS, params=params, timeout=60).json()["data"]["reviews"]
        if not batch:
            return
        for review in batch:
            if review["reviewed_date"][:10] < cutoff:
                return
            yield review
        page += 1

def complaint(review):
    text = (review["review"]["negative"] or "").strip()
    return None if text.lower().rstrip(".!") in PLACEHOLDERS else text or None

rows = list(reviews_since("4045490", cutoff="2026-08-30"))
complaints = [r for r in rows if complaint(r)]
score_only = [r for r in rows if not r["review"]["positive"] and not r["review"]["negative"]]

print(f"{len(rows)} reviews since the cutoff")
print(f"{len(score_only)} score-only, {len(complaints)} with negative text")
print("complaint languages:", Counter(r["review"]["language"].split("-")[0] for r in complaints).most_common(5))
for r in sorted(complaints, key=lambda r: r["score"])[:3]:
    print(r["score"], r["review"]["language"], complaint(r)[:70].replace("\n", " "))
```

Its output on September 29:

```
99 reviews since the cutoff
43 score-only, 38 with negative text
complaint languages: [('en', 9), ('es', 7), ('it', 4), ('fr', 4), ('pt', 3)]
4.0 tr Kahvaltı yok gibi bir şey otel çok Kasvetli ve karanlık dizayn edilmiş
4.0 es La habitación ya que no dispone de armario ni nada para poder guardar 
6.0 en-gb Coffee and juice at breakfast were terrible.
```

The 38 still include the 8 multilingual "nothing" sentences, which is why the table above counts 30 real complaints.  
 The two lowest scores make the language point on their own: a Turkish guest called breakfast nearly nonexistent and the design gloomy and dark, and a Spanish guest found no wardrobe to unpack into.

## Getting Started

1. Sign up at [stayapi.com](https://stayapi.com/users/sign_up) for a key: 50 free requests, no card, and no Booking.com agreement.
2. Preview a hotel's reviews in the [free Booking.com reviews tool](https://stayapi.com/free-tools/booking-reviews) before writing code.
3. Get the hotel ID: pass the hotel's Booking.com URL to the [URL-to-ID endpoint](https://stayapi.com/docs/endpoints/booking/url-to-id), or read it off the page as our [Booking.com hotel ID guide](https://stayapi.com/blog/booking-com-hotel-id) shows.
4. Run the reviews call above, then the scores and summary calls for the same ID.
5. Schedule the backfill daily or weekly with your last run's date as the cutoff, and send the rows to a database, Google Sheets, Looker Studio, Power BI, or no-code tools like N8N and Make.com.

For portfolio-scale review monitoring, [book a demo call](https://stayapi.com/book-demo).

## FAQ

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

Yes, two, and both are partner-gated.  
 The Guest Review API serves properties and their connectivity providers for their own reviews, and the Demand API's review endpoints serve affiliates whose agreement includes them.  
 A team that only needs the data qualifies for neither.

### Can I get Booking.com reviews for competitor hotels?

Only as an approved affiliate showing reviews on a site that sells Booking.com stays.  
 The Guest Review API is limited to properties connected to your account and restricted to internal use.  
 For monitoring and analysis, a data API or a scraper reads any public Booking.com property by its hotel ID.

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

Access to the official APIs comes through a partnership rather than a purchase.  
 Without one, the free Booking.com reviews tool previews a single hotel in the browser, and StayAPI's free tier covers 50 requests.

### Can I get Booking.com review sub-scores through an API?

Yes.  
 The Guest Review API returns category scores on each review for your own properties.  
 For any hotel, the scores endpoint returns 7 category averages (cleanliness, comfort, facilities, location, staff, value for money, and wifi), overall and by traveler type, while individual reviews there carry only the overall score.

### How do I pull only new Booking.com reviews?

Sort newest-first and stop at the date of your last run, as the backfill script does with `sort=recent_desc` and a cutoff.  
 The Guest Review API has a `from_date` filter for the same job.

### How current is Booking.com review data from an API?

It's real-time on request.  
 The newest review in our Lisbon pull was posted the same morning we ran the script.

Ship in 3 days
## Ready to simplify your hotel data?

Join other developers using StayAPI to build the next generation of travel applications. Get started for free today.

[Start Building Free](/users/sign_up)[Book a Demo](/book-demo)

[← Back to Blog](/blog)[Previous: Agoda Reviews API: How to Access and Extract Agoda Review Data →](/blog/how-to-extract-agoda-reviews)

Hotel data
### Want accurate hotel data?

Stop building data pipelines and start building product. Reliable access to hotel reviews, prices, and details with StayAPI.

[Book a Demo](/book-demo)

## Table of contents

- [Key Takeaways](#key-takeaways)
- [The Two Official Booking.com Review APIs](#the-two-official-booking-com-review-apis)
- [Reading Any Hotel's Booking.com Reviews](#reading-any-hotel-s-booking-com-reviews)
- [What a Month of Booking.com Reviews Looks Like](#what-a-month-of-booking-com-reviews-looks-like)
- [Six Things That Trip Up a Booking.com Reviews Pipeline](#six-things-that-trip-up-a-booking-com-reviews-pipeline)
- [Pulling Booking.com Reviews: Request, Response, and a Backfill Script](#pulling-booking-com-reviews-request-response-and-a-backfill-script)
- [Getting Started](#getting-started)
- [FAQ](#faq)

About StayAPI

StayAPI: Hotel Data API

For travel-tech developers

We collect, clean, and standardize hotel data so you can build amazing travel products without maintaining your own data collection.

50+ Endpoints

5 Major Platforms

Supported sources

Booking.comTripAdvisorAirbnbAgodaGoogle Hotelsand more
