Booking Reviews Scraper

What guests said,
once they had stayed.

Paste Booking.com hotel URLs, one per line, and the review section comes back as a table - who wrote it and which country they booked from, what they liked and what they disliked in separate columns, alongside the score, the stay date, the room they had and the kind of trip they were on. Eleven columns, one row per review.

one-time 500 free rows$0.002 per row afterone row per reviewCSV · JSON · Excel
How it works

A hotel link,
and a sort.

One required field and two controls - plus one thing to set up before the first run.

  1. STEP 1Sign in to the platform.
  2. STEP 2Open the Booking Reviews Scraper.
  3. STEP 3Paste one booking.com/hotel/<cc>/<slug>.html URL per line - or upload a CSV, XLSX, TXT or Parquet file.
  4. STEP 4Set a residential PROXY_URL first. In the service's own words, Booking blocks free and datacenter IPs, so a paid residential one is needed - and your real IP is never used.
  5. STEP 5Set a limit per query if you want one. It defaults to 100, and the field's own hint says to leave it empty for all.
  6. STEP 6Pick a sort: Most Relevant, Newest First, Older First, Highest Scores or Lowest Scores.
  7. STEP 7Click Get Data and download as CSV, JSON or Excel.

The limit is per query, not per run: five hotels with a limit of a hundred is a hundred reviews from each, not a hundred altogether.

Why teams use it

Five sorts,
and two of them are the point.

Most Relevant is the default, not the neutral choice

The sort opens on Most Relevant, which is Booking's own ordering rather than an unopinionated one. Lowest Scores is the setting that answers the question most people arrive with, and Older First is the rare one - it lets you read the reviews from before a refurbishment or a change of management, which no amount of scrolling the newest ones will show you.

Liked and disliked are separate fields

Booking asks guests what they liked and what they disliked as two questions, and the export keeps them as two columns rather than one paragraph you have to read your way through. That is the structural reason to prefer this over a generic review scraper - though read the data dictionary first, because disliked is also the column our own runs never managed to fill.

Who the guest was, not just what they said

reviewer_country, room_type and traveler_type are declared alongside the text, and that combination is what a review export is actually for: a complaint from a solo business traveller in the cheapest room is a different signal from the same words written by a family in a suite. Confirm on your own run which of them arrive filled - ours came back with the text and the country, and not the rest.

Data dictionary

Eleven columns,
and only four we have seen work.

The names come from the service's own declared list, so the shape of the file is not in question. What each one contained is a much shorter story, and this page tells it rather than describing a schema as though it were a result.

query
The hotel URL you submitted, echoed back on every row that came from it - verbatim, including any query string or fragment you pasted along with it. Group by it whenever a file covers more than one hotel.
reviewer_name
The guest, as the review is credited. Not always a clean first name: in two of our rows the country had been folded into this field, and those were exactly the two rows where reviewer_country came back blank.
reviewer_country
The country the guest booked from - United States, Kazakhstan, Germany and so on, spelled out rather than a code. Filled on all but the two rows described above.
score
The guest's score for the stay. Read it on your own first run.
review_title
The review headline, which Booking collects separately from the body.
liked
What the guest said they liked - and in our runs the only piece of review text that ever arrived. Two things to know before you parse it. It is a snippet, not the full review: many values end in an ellipsis, and the same review came back cut at two different lengths in two different runs, so the cut-off point is not stable. And every value carried a leading and trailing space, so trim it. One row also held a bulleted, aggregated summary of the hotel rather than one guest's words, which is worth a glance before you feed the column to anything.
disliked
What the guest said they disliked, as its own column. On paper this is the most useful field in the export.
date
When the review was posted.
stay_date
When the guest actually stayed, which is a different fact from when they wrote.
room_type
The room the guest had.
traveler_type
The kind of trip - the segmentation field that makes a review export worth grouping.

The names are the service's own; the behaviour is a much narrower claim, and the gap between them is the whole point of this section. Our measurements come from thirty-six rows covering exactly two hotels - twenty-two distinct reviews once the rows repeated across runs are removed. On that sample, only four of the eleven columns ever carried a value: query, reviewer_name, reviewer_country and liked. The other seven - score, review_title, disliked, date, stay_date, room_type and traveler_type - were empty on every row. They are documented because they are part of the declared schema, not because we have seen them work, and this page therefore states no format for the dates, no scale for the score and no vocabulary for the two segmentation fields. What we can tell you about the four that did work is above, and the practical parts are that liked is a truncated snippet with spaces on both ends, and that a missing reviewer_country means the country ended up inside reviewer_name. Set a paid residential PROXY_URL before your first run - the service says plainly that Booking blocks free and datacenter IPs - then spend a few free rows on a hotel you care about and read the columns yourself.

Common workflows

Three jobs people
run this for.

All of them start from a hotel link you can copy out of the address bar.

Operations

Find the complaint that repeats across a season

One bad review is an anecdote; the same sentence in thirty is a maintenance ticket. Export a property's reviews, sort by Lowest Scores, and read the text end to end - the recurring words are usually about one lift, one breakfast service or one wall.

Hotel operations
Competitive

Read a rival's reviews instead of their photos

A competing hotel's review section is the most candid description of it available, and it is public. Point the scraper at their listing and you get the same eleven columns you get for your own, so the two files compare directly.

Commercial · Strategy
Due diligence

Check what a property was like before the refit

Older First is the sort you rarely get elsewhere. For an acquisition, a franchise review or a supplier decision, the reviews from two years ago tell you whether a problem was fixed or simply buried under newer ones.

Investment · Asset management
Pricing

Pay per review row,
nothing else.

No subscription, no minimum, no per-seat licence. Your first 500 rows are on us - after that it is pay-as-you-go.

Free tier

500 free rows - $0

For every new account, one time. No credit card. All scrapers unlocked. Given how much of this schema we have never seen populated, this is the part that matters most here: spend a few rows establishing which columns your run actually fills before you plan around them.

$0 forever
Pay-as-you-go

$0.002 per row, after the free tier

Roughly $2 per 1,000 reviews, the same flat rate as every other scraper on the platform. The limit is per query, so ten hotels with a limit of a hundred is a thousand rows - worth the arithmetic before you start, and a good reason to narrow the sort first.

Most popular
Enterprise

Custom - a portfolio, on a schedule

Volume pricing, SLAs, dedicated workers and tailored onboarding for teams tracking a portfolio rather than a property. Tell us your numbers and we will quote.

Talk to us
10% off your first paid run.Use code LIVESCRAPER10 at checkout.
Sign up
Pairs well with

The same property,
from another side.

A review is one fact about a hotel. These return the others.

The legal bit

Is it legal to scrape
Booking.com reviews?

Short answer: yes, when you only collect what is publicly visible on a hotel page - and that is all this service reads.

A hotel's review section is public. Anyone can open the listing without an account and read it, and collecting publicly visible information for market and competitive research is long-settled practice. As long as the data is publicly available and the process does not disrupt the service, there are no federal laws against it.

Reviews are written by people, though, and this export carries more about them than most: a display name, the country they booked from, and - where they arrive - the room they stayed in and the kind of trip they were on. Publicly visible is not the same as free of obligation. If you store it you are handling personal data, and the GDPR and similar regimes apply regardless of where you got it. Reading complaints in aggregate to fix a property is an easy case; assembling a file about identifiable guests is not, and this service is not intended for it.

Booking's terms restrict automated access, so this remains a question of terms. We touch nothing behind a login, read only what an ordinary visitor sees, run no third-party trackers on the data layer, and your exports self-delete after 30 days.

livescraper.app · principles
Public hotel pages only
No logins, no paywalls
Guest names and countries are personal data - aggregate, do not profile!
GDPR-aligned by default
Exports self-delete (30 days)
The same reviews any traveller sees on the listing.
Common questions

Things people ask before signing up.

The questions we hear most. Something else? Talk to us - humans write the answers, not bots.

What columns will the export contain?+
Eleven: query, reviewer_name, reviewer_country, score, review_title, liked, disliked, date, stay_date, room_type and traveler_type. That is the service's own declared list, and it is the key order of every export we hold. One row per review.
Which columns should I actually expect to be filled?+
Fewer than the schema suggests, and we would rather say so up front. Across the rows we hold, only four ever carried a value: query, reviewer_name, reviewer_country and liked. The other seven - score, review_title, disliked, date, stay_date, room_type and traveler_type - were empty on every row. Check your own first run before you build on any of them.
Is the liked column the full review text?+
No, it is a snippet. Many values end in an ellipsis, and the same review came back cut at two different lengths in two different runs, so the cut-off is not stable. Every value also arrived with a leading and a trailing space, so trim before you compare or hash them. One row held a bulleted summary of the hotel rather than one guest's words, which is worth checking for.
Do I need a residential proxy?+
Yes, and the service says so itself: Booking blocks free and datacenter IPs, so a paid residential PROXY_URL is needed, and your real IP is never used. Set it before your first run rather than after an empty one.
What are the sort options?+
Five: Most Relevant, Newest First, Older First, Highest Scores and Lowest Scores. Most Relevant is the default, which is worth knowing - it is Booking's own ordering rather than a neutral one. Older First is the one you rarely get elsewhere, and it is how you read the reviews from before a refurbishment.
What does the limit field do?+
It caps how many reviews come back per query. It defaults to 100, its minimum is 1, and the field's own hint reads: leave empty for all, 0 = all. The limit is per query rather than per run, so ten hotels at a hundred each is a thousand rows.
Does a bare hotel slug work instead of the full URL?+
The form says it does, and the full URL is what we would paste. Whatever you submit comes back verbatim in the query column, query string and fragment included - one of ours was a 300-character link and it was echoed whole - so you can always tell which input produced which rows.
Why is reviewer_country sometimes empty?+
In our rows it was not really missing. The two blanks lined up exactly with two rows where the country had been folded into reviewer_name instead, giving a value like "Melodee United States". If a country looks absent, check the name column before you treat it as a gap.
Have you actually run this?+
Yes, and the honest scope is narrow. Our measurements come from thirty-six rows covering exactly two hotels - twenty-two distinct reviews once rows repeated across runs are removed. That is enough to describe the four columns that arrived filled and to be certain the other seven did not, and it is not enough to promise anything else.
What does it cost?+
The first 500 rows on a new account are free and one-time; after that it is $0.002 per row - about $2 per 1,000 - pay-as-you-go with no subscription. Credits do not expire and there is no monthly reset.

Sort by lowest scores
and read the text.

Set a residential proxy, paste one hotel URL, change the sort away from Most Relevant and see what guests actually wrote. Your first 500 rows are free.

Activates instantly · no card required

Export Booking.com guest reviews as rows

Booking reviews are written by people who actually stayed - the platform only accepts them from completed bookings - which makes the review section unusually worth reading and unusually hard to read in bulk, because it is a widget you can only scroll. This service turns it into a table. Paste Booking.com hotel URLs, one per line, and each review comes back as a row: the guest's name and the country they booked from, what they liked and what they disliked as separate columns, the score, the date, the dates they stayed, the room they had and the kind of trip they were on. Eleven columns, one row per review.

Two controls shape the run. The limit is per query rather than per run, so ten hotels at a hundred each is a thousand rows; it defaults to 100 and the field's own hint says to leave it empty for all. The sort has five settings - Most Relevant, Newest First, Older First, Highest Scores and Lowest Scores - and the first is the default. That is worth a moment's thought: Most Relevant is Booking's own ordering, not a neutral one. Lowest Scores is the setting that answers the question most people arrive with, and Older First is the rare one that lets you read what a property was like before it was refurbished.

One thing has to be set up before the first run. In the service's own words, Booking blocks free and datacenter IPs, so a paid residential PROXY_URL is needed - and your real IP is never used. Doing that first saves you an empty run and a wrong conclusion about the service.

The honest limits are stated here rather than buried, because they change what to plan for. The eleven column names are the service's own declared list and are dependable. The behaviour behind them is measured on thirty-six rows covering exactly two hotels - twenty-two distinct reviews once duplicates across runs are removed - and on that sample only four of the eleven columns ever carried a value: query, reviewer_name, reviewer_country and liked. The other seven, disliked among them, were empty on every row, so this page claims no format for the dates, no scale for the score and no vocabulary for the room and traveller fields. Two practical details about the ones that did work: liked is a truncated snippet carrying a leading and trailing space, cut at different lengths in different runs; and where reviewer_country was blank, the country had been folded into reviewer_name. Run the free tier against a property you care about and read your own columns first. Your first 500 rows cost nothing and need no credit card. See pricing for current rates.