Booking.com data.
Without a click-through for every room.
Properties, every bookable room priced for your dates, and guest reviews that keep what people liked apart from what they didn't — as clean JSON via REST or MCP.
Trusted by developers shipping real products.
246,870 served today
Request
$ curl -X POST \ https://api.fetchlayer.dev/booking/hotel-reviews \ -H "Authorization: Bearer ss-your-key" \ -H "Content-Type: application/json" \ -d '{"hotel":"fr/du-printemps-paris","limit":10}'
Response
{
"totalReviewCount": 3854, "reviewCount": 10,
"hasMore": true,
"notes": ["These are 10 of the 3854 reviews
the source reports for this property.", …],
"categoryScores": [
{"label": "Location", "average": 9.44},
{"label": "Facilities", "average": 7.82}, …],
"reviews": [{
"score": 9, "language": "de",
"positiveText": "Lage und Personal.",
"negativeText": null,
"nights": 3, "roomType": "Superior Twin Room"
}], "pagesFetched": 1
} Built for feedback workflows
Fetch the public signal. Use it wherever your team works.
Every hotel on the page, priced for your dates
Name a city and a stay and every property comes back with a price attached — not a "from" figure, not a placeholder. A measured Lisbon search for three nights in October returned 21 properties and priced all 21, from €434.00 to €1,216. Each figure is a number and a currency code, ready to sum, sort and compare without touching a string.
Every room in the hotel, priced separately
Not one headline rate but the whole rate card: each bookable room with its own price, how many it sleeps, the pre-discount price where one is running, whether breakfast is included, whether it is free to cancel and until when, and whether a crib is available. Compare rooms inside a property as easily as properties against each other — no clicking through.
What guests liked and what they didn't, as two separate fields
Praise and complaints arrive apart, not fused into one paragraph you have to split. So "the location" and "the room size" can be counted independently across thousands of reviews. Each one also carries the score, the exact dates of the stay, how many nights, the room they were in, their country and whether they came alone, as a couple or with young children.
A score broken seven ways, not one number
Staff, facilities, cleanliness, comfort, value for money, location and wifi — each scored separately. One measured Paris hotel rates 9.44 on location and 7.82 on facilities; a single "8.5" would have hidden both halves of that. It arrives with the reviews, so one call gets you the sentiment and the shape of the scores behind it.
Know whether you are holding all the reviews or the first page
Every reviews response states the property's full review count beside how many came back, and says it in words: "These are 10 of the 3854 reviews the source reports for this property." Compare the two numbers and you know instantly whether an average is over everything or over a sample — without spending a second call to find out.
The property in full: rooms, beds, sizes, amenities, photos
The whole catalogue for one property — every room with its floor area in square metres, its bed configuration and its own photographs, plus the amenities, the languages spoken at the desk, the coordinates, the star rating and the check-in and check-out windows. One measured Paris hotel returned seven rooms and 51 photos.
Sort a pile of pasted links before spending anything
Hand it any Booking.com link and it tells you whether it names a property or a search, hands back the property id and a canonical URL with the tracking and date parameters stripped off, and says plainly when a link names nothing it recognises. Free, and answers in under a tenth of a second — so a list gets triaged before a single paid call is made.
Ask what guests actually complain about—then export it.
Prefer not to write code? Describe the city or the property in FetchLayer Research Chat and get a table back, with any rating built on a sample of the reviews marked as such rather than presented as the property's score.
- ✓Ask questions in plain English
- ✓Analyze themes, sentiment, and pain points
- ✓Download the structured results as CSV or JSON
No code or setup required · Uses your FetchLayer credits
Pull the guest reviews for this Paris hotel and tell me what people complain about most, separately from what they praise. Say whether you read all of them.
These are 200 of 3,854 reviews, so treat the average as a sample. Complaints cluster on room size (31 reviews) and street noise (19). Praise is overwhelmingly the location — it scores 9.44 against 7.82 for facilities. 62 reviews are not in English, and I read the originals rather than a translation.
booking-reviews.csv
200 reviews · 12 columns · ready to download
Solutions
Build the workflow around the feedback.
The other place people stay
Listings, structured prices, guest reviews and a night-by-night availability calendar.
Explore →The rest of the trip
Hotels, restaurants and attractions with their reviews, ratings and photos.
Explore →What is around the hotel
Places, ratings and reviews for anywhere on the map, by search or by coordinates.
Explore →From raw feedback to action
One request is the start of the workflow.
Store the structured response, run it on a schedule, pass it to an LLM, or feed it into the system your team already uses. FetchLayer handles retrieval so you can focus on the outcome.
- 01
Find the properties
Send a destination and your dates. Every result comes back priced, with its room options, star rating, review score, badges, coordinates and photos — and if you gave no dates, the stay window the prices are for.
- 02
Read the reviews, and check the count
Send a property id for its guest reviews. Compare reviewCount to totalReviewCount: equal means you have all of them, lower means you are holding a slice and nextCursor gets the rest.
- 03
Split the score
The same call returns the property's rating broken into staff, facilities, cleanliness, comfort, value, location and wifi — so a weak score on one of them never disappears into a strong average.
- 04
Go deep on the ones that matter
Pull one property in full for its room catalogue, bed configurations, room sizes, amenities, photos and languages spoken. Prices stay on search, where they are priced for the dates you asked about.
MCP & agents
Your AI already knows
how to use this.
Use the Booking.com endpoint directly from your MCP-compatible agent. Ask it to retrieve public feedback, identify patterns, and turn the result into a useful brief without writing integration glue.
Pick your editor and we hand you the config with your key already in it — no JSON to hand-edit, no wrapper code.
Get your free API keyFree tier · no credit card · any MCP host
Is this Paris hotel worth it for three nights in October?
These are 200 of 3,854 reviews, so this average is a sample, not the score. Location rates 9.44 against 7.82 for facilities — people love where it is and tolerate the building. The recurring complaint is room size (31 reviews). Rooms for your dates run €642.75 to €1,216, and the cheapest is free to cancel.
Works with every MCP-compatible tool
Use cases
What teams build on hotel supply, rates and guest sentiment.
Properties, room rates and reviews as rows you can sum. Here is what that is for.
Room-level rate benchmarking
Every property in a search comes back priced — and priced per bookable room option, each with its own occupancy, meal plan, free-cancellation deadline and whether a crib is included. You compare rooms inside a property as well as properties against each other.
Guest sentiment analysis
Each review keeps what the guest liked and what they disliked as separate fields, so "great location, thin walls" counts as two findings rather than one paragraph to untangle.
Honest review coverage
Every reviews response reports the property’s full review count next to how many actually came back — "10 of the 3854" — so you always know whether a score is built on everything or on a page of it.
Category score comparison
A property’s score arrives split seven ways — Staff, Facilities, Cleanliness, Comfort, Value for money, Location and Free Wifi — so somewhere strong on location and weak on comfort never averages into the same number as its opposite.
Competitive set tracking
Run the same destination and stay on a schedule and watch what the comparable properties charge, which room options they open up, and how their guest scores move week to week.
Triage a pile of links
Hand over any Booking.com link and get back what it names — a property, ready to pass straight to the other calls, or a search. Free, so a list of pasted links gets sorted before you spend anything reading them.
Compare approaches
Spend time on the insight, not the collection layer.
| What you need | FetchLayer | Official API | Build it yourself |
|---|---|---|---|
| Every room priced, not just the property | ✓ | n/a | You click into each one |
| Reviews say how complete they are | ✓ | n/a | You would not know |
| Liked and disliked kept apart | ✓ | n/a | You split the sentences |
| Scores broken into seven categories | ✓ | n/a | You get one number |
| Prices returned as numbers | ✓ | n/a | You parse the string |
| No Booking.com account required | ✓ | n/a | You keep one warm |
| Ready for AI and MCP workflows | ✓ | n/a | Your integration |
FetchLayer provides access to publicly available data. It is not affiliated with, endorsed by, or sponsored by the platform.
Pricing
Start free. Scale when ready.
Pay per request with no commitment, or lock in a flat monthly rate with built-in savings.
Free plan — 30 requests
Verify responses, inspect the API, no credit card required.
Pay as you go
$1.99
per 1,000 requests
$0.00199 per request · credits never expire
How credits work — no multipliers
One credit = one API call, on every endpoint and platform. No matter how many results come back, you pay for the call, not the output size. Most scraping APIs charge multipliers of 5x, 25x, even 75x per call depending on the target — here it's always 1.
- No multipliers — 1 request = 1 credit
- No monthly commitment
- Credits never expire
- Same API & MCP access as subscribers
- ∞ req/min, ∞ API keys
∞
Expiry
Credits stay until you use them. No monthly reset, no pressure to hit a quota.
0
Commitments
No subscription, no contract, no minimums. Start, pause, or scale whenever.
100%
Access
Every endpoint and MCP included. Not a limited tier — same data as any subscriber.
API reference
Every parameter, documented.
All requests are POST with a JSON body and Bearer auth header.
POST /booking/search-hotels Properties for a destination, each priced for your dates with every bookable room option, plus star rating, review score, badges, coordinates and photos. Always prices — with no dates it uses a default stay window and reports that window back.
destination* string A place name, e.g. "Lisbon, Portugal". checkIn / checkOut string YYYY-MM-DD, given together. Optional. adults / children / rooms number Guest and room counts, each up to 30. pages / cursor string Up to 20 pages of about 25 properties, 1 credit per page. POST /booking/hotel-reviews Guest reviews for one property, with what each guest liked and disliked kept apart, their stay dates and room type, and the score split seven ways. Every response reports the property's full review count next to how many came back.
hotel* string A property URL or its compact "countryCode/pageName" id. limit number Reviews in total, up to 500. Defaults to 25. pages number Pages to walk, up to 20, 1 credit each. cursor string Continue from a previous response's nextCursor. POST /booking/hotel-detail One property in full: its room catalogue with sizes, bed configuration and photos, plus amenities, languages spoken, coordinates, star rating, the seven category scores, and its check-in and check-out windows. Prices live on search, not here.
hotel* string A property URL or its compact "countryCode/pageName" id. checkIn / checkOut string Accepted; this route answers with a note rather than a price. adults number Guests, up to 30. POST /booking/resolve-url Sort a pile of pasted Booking.com links into properties and searches, and get the compact property id with a canonical URL stripped of tracking and date parameters. Free — it reports pagesFetched: 0.
url* string Any Booking.com property or search link. Fields marked * are required. Full API reference →
FAQ
Common questions.
What is the Booking.com API?
A REST endpoint and MCP tool that returns public Booking.com data as structured JSON. You send a destination or a property link with a Bearer token; you get back properties priced for your dates with every bookable room option, one property in full with its rooms and amenities, or a property's guest reviews with the score broken into seven categories. No Booking.com account, no HTML to parse.
Do I need a Booking.com account?
No. Everything returned is what Booking.com publishes publicly — the same properties, prices and reviews anyone can read without signing in. There is no login, no OAuth, and nothing to keep warm.
Do I get prices for individual rooms, or just the property?
Both. Every search result carries a headline price for the cheapest bookable stay and a roomOptions array beside it, each entry with its own price and pre-discount originalPrice, how many people it sleeps, whether breakfast is included, whether it is free to cancel and until when, and whether a crib is available. On a measured Lisbon stay one apartment came back at €642.75 with its matching room option priced identically; a four-star hotel in the same search returned seven distinct rooms. You can compare rooms inside one property as easily as properties against each other.
Are the prices usable as numbers?
Yes. Money is {amount, currency} — a number and a three-letter code, never a display string to unpick. A measured Lisbon search for 15–18 October returned 21 properties and every one of them was priced, from €434.00 to €1,216. Nothing comes back as "from £89" for you to regex.
Do I have to pass dates?
No. Search always prices: with no check-in and check-out it picks a stay window, prices everything for it, and reports that window straight back — both on checkIn and checkOut in the response and in plain words in notes. A measured no-dates search came back with "No check-in/check-out was given, so this search used a default stay this service chose (2026-10-17 to 2026-10-18). Pass checkIn and checkOut to price a specific stay." So a price is never quietly for dates you did not ask about.
How do I know whether I got all the reviews?
The response tells you. Every reviews response carries totalReviewCount — the property's full review count as the source reports it — next to reviewCount, which is how many came back, plus hasMore and a note in plain words: "These are 10 of the 3854 reviews the source reports for this property." You never have to make a second call to find out which one you are holding, and an average over a sample is never mistaken for an average over everything.
What does a review actually contain?
What the guest liked and what they disliked, as two separate fields rather than one blob — so you can count complaints without splitting sentences. Alongside them: the score they gave, the language they wrote in, the exact dates they stayed and how many nights, the room type they were in, their public first name and country, the kind of trip it was (a couple, a family with young children, a solo traveller), and the property's reply where there is one. Nothing is machine-translated over what the guest wrote.
Can I see a score for cleanliness separately from location?
Yes — seven of them. Every property's score comes back split into staff, facilities, cleanliness, comfort, value for money, location and wifi, each as a number. One measured Paris hotel scored 9.44 on location and 7.82 on facilities: a single "8.5" would have hidden both. The breakdown arrives with the reviews, so one call gets you the reviews and the shape of the scores behind them.
Does the single-property route give me a live price?
No, and it says so rather than returning a wrong number. The property route is the catalogue — rooms, sizes, bed configuration, amenities, photos, languages spoken at the desk, check-in and check-out windows. Pass dates to it anyway and you get a note back: "This route does not return a live price for this stay. Use search-hotels with the same destination and dates to get this property's priced room options." Search is what prices, and it prices every room.
Is there anything the single-property route does not fill in?
One thing, worth knowing before you build on it. On that route the single headline review score comes back empty, while the seven category scores beside it are complete. The property's overall score and review count are on every search result and on the reviews route, so nothing is missing overall — it is just not on that particular call. Read the headline number from a search result or a reviews call; read the category detail from any of the three.
How many properties come back, and can I page through all of them?
A page is about 25 properties — measured pages returned 21 and 26. The response also tells you how many the source reports for the whole destination, which on a measured Lisbon search was 2,403. Treat that as context, not as a walk you can plan: read hasMore and nextCursor to find out whether there is another page. One Lisbon query returned 26 with more available, and the same query later returned 21 with nothing further. hotelCount is always what actually arrived.
What happens if I send a property id that does not exist?
A 404 with a message: {"error":"no property was found for \"zz/no-such-hotel-xyz\""}. Not a 503 and not an empty 200 — a wrong id is a wrong request, so there is nothing to retry and nothing to mistake for a property with no data. Send a field the route does not know and you get a 400 naming it, rather than having it silently ignored.
How fast is it?
Measured against production on 17 September 2026, three runs each: a one-page search of Lisbon answered in 3.6 to 3.9 seconds, the same for Paris, one property in full in 3.6 to 3.9 seconds, ten reviews in 4.3 to 4.5 seconds, sixty reviews across three pages in 6.1 seconds, and resolving a link in under a tenth of a second.
How is it billed?
One credit per page, reported on every response as pagesFetched. A search page is about 25 properties and costs the same whether it comes back full or half empty. A review walk stops early once your limit is reached, and pagesFetched reports what was actually read rather than what you asked for. Reading a Booking.com link is free and reports pagesFetched: 0.
Can my AI agent use it?
Yes. All four routes are MCP tools on the same FetchLayer MCP server: booking_search_hotels, booking_hotel_detail, booking_hotel_reviews and booking_resolve_url. Tool calls use the same key and are billed exactly like REST, and the agent sees totalReviewCount alongside the reviews, so it can tell you when a rating is based on a sample instead of presenting it as the property's score.
Start pulling Hotels, room prices & guest reviews today.
Get a free API key, make your first request, and put public feedback to work in your own product or research workflow.
Used by developers at
Individual developers or teams — not official partnerships