Booking.com Scraper API & MCP for AI Agents | FetchLayer
Unofficial Third-party API
4 endpoints live

Booking.com data.
Without a click-through for every room.

Every room priced for your dates Liked & disliked, kept apart Scores split seven ways Rooms, beds, sizes & amenities MCP ready

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.

Free tier included No credit card No scraper maintenance

Trusted by developers shipping real products.

246,870 served today

POST /booking/search-hotels
200 OK

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
}

Used by developers at

Individual developers or teams — not official partnerships

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.

FetchLayer Research Chat

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
Read hotel reviews in Chat

No code or setup required · Uses your FetchLayer credits

Booking.com research

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.

Y

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

CSV

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.

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

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

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

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

Live

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.

1
Pick your editor
2
Agent discovers 4 tools
3
Query any platform instantly
connect your agent ~30s

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 key

Free tier · no credit card · any MCP host

New chat fetchlayer connected

Is this Paris hotel worth it for three nights in October?

Used fetchlayer.booking_hotel_reviews

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.

Ask a follow-up…

Works with every MCP-compatible tool

Cursor
Claude
VS Code
Windsurf
Cline
Hermes
OpenClaw
Kiro
No wrapper code
All 4 endpoints exposed as tools
Official & maintained
Free to install

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.

01

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.

pricingdatasetsresearch
02

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.

researchreportinghospitality
03

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.

reportingaccuracyresearch
04

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.

benchmarkingdatasetshospitality
05

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.

trendscronpricing
06

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.

opspipelinesfree

Compare approaches

Spend time on the insight, not the collection layer.

What you needFetchLayerOfficial APIBuild it yourself
Every room priced, not just the propertyn/aYou click into each one
Reviews say how complete they aren/aYou would not know
Liked and disliked kept apartn/aYou split the sentences
Scores broken into seven categoriesn/aYou get one number
Prices returned as numbersn/aYou parse the string
No Booking.com account requiredn/aYou keep one warm
Ready for AI and MCP workflowsn/aYour 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.

Try free

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
Get API key

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.