Hotel Review Insights: Guest Topics, Sentiment & Ratings avatar

Hotel Review Insights: Guest Topics, Sentiment & Ratings

Pricing

from $2.50 / 1,000 hotels

Go to Apify Store
Hotel Review Insights: Guest Topics, Sentiment & Ratings

Hotel Review Insights: Guest Topics, Sentiment & Ratings

Guest opinion of hotels from Google Hotels: the topics guests write about (service, rooms, breakfast, cleanliness) with positive and negative counts, ratings on Tripadvisor and other sites, quoted reviews, and a benchmark of a whole city. Not affiliated with Google.

Pricing

from $2.50 / 1,000 hotels

Rating

0.0

(0)

Developer

Aleksandr Kobtsev

Aleksandr Kobtsev

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

5 days ago

Last modified

Share

Search a city or name your hotels and get what guests think of each one, as Google Hotels summarises it: the topics guests write about (service, rooms, breakfast, cleanliness, air conditioning) with how many mentions are positive and negative, what is praised and what is criticised, the ratings the hotel has on Tripadvisor, Trip.com and other travel sites, and the reviews Google quotes. One dataset row per hotel, and one benchmark of the whole market the run saw.

There is no login, no browser and no partner API. The Actor reads the pages Google Hotels serves to anyone, over plain HTTP, and takes the aggregates Google has already computed from hundreds or thousands of reviews: a hotel page costs one request, not one request per review. It reads only the pages Google's robots.txt leaves open to crawlers (see the last section).

Who is this hotel review scraper for?

You areWhat you runWhat you get
A hotel owner or a revenue manageryour hotel and its competitive set, by nametopic by topic, where guests prefer a competitor: your air conditioning at -0.60 against theirs at +0.40
A hospitality agency or a software vendora city or a regionhotels with a specific complaint (bathroom, noise, check-in) to open a conversation with, and the sites where their rating is weaker
A reputation or market analysta market, a star rangethe spread of every topic across the market and the hotels at both ends, in one record
An investor or a travel branda destinationwhich hotels have inflated Google ratings next to Tripadvisor, and what guests complain about in the destination

What makes this different from other review scrapers?

  • Aggregates, not a pile of reviews. Google groups what guests wrote into topics and counts the positive and the negative mentions of each. A row carries 10 to 30 topics with mentions, positive, negative, a score from -1 to 1 and Google's own sentiment flag. A hotel with 4,000 reviews is one request.
  • Other sites in the same row. Google shows the hotel's rating and number of reviews on Tripadvisor, Trip.com, Priceline and others. The row has each with the rating on a five-point scale, the review-weighted mean of the others and the gap to Google's rating.
  • What is praised and criticised, in one list each. Topics with enough mentions (you choose how many) and a clearly positive or negative score, the best and the worst first.
  • A market benchmark. At the end of a run the TOPIC_BENCHMARK record gives, for every topic, how many hotels have it, the mean, the median and the quartiles of their scores, the share of positive mentions, and the three best and three worst hotels.
  • It stays inside robots.txt. Only /travel/hotels/ addresses are requested; the Actor reads Google's robots.txt at the start of every run and refuses any address it closes.
  • Honest about what it could not read. A hotel name that matches nothing well enough is listed in FAILED_HOTELS with what Google offered instead, and is not charged. A hotel with no topics and no ratings elsewhere is delivered and not charged either.

What data does it return?

One row per hotel.

FieldWhat it is
name, propertyType, hotelClassThe hotel, Google's wording for it ("3-star hotel") and its stars (null for properties Google does not class).
address, city, region, district, countryCode, latitude, longitude, phone, websiteWhere it is and how to reach it, from the hotel's Google page.
googleUrl, googleMid, entityTokenThe hotel's Google Hotels page and Google's own identifiers (googleMid is null for vacation rentals). Stable, so they are the keys to join runs on.
rating, reviewsCount, ratingDistributionGoogle's guest rating of 5, the number of reviews and the count per star.
otherSitesThe hotel's rating on each other travel site Google shows (below).
otherSitesAverage, otherSitesReviews, ratingGapThe mean of the other sites' ratings on a five-point scale, weighted by their number of reviews; how many reviews that is; and Google's rating minus that mean (positive when Google guests are kinder). null when no other site is shown.
topics, topicsCountEvery topic Google lists, and how many (below).
praised, criticisedTopics with at least Minimum mentions and a score of 0.2 or more, best first (three of them), and of -0.2 or less, worst first. Each with topic, score, mentions, positive, negative.
highlightsThe lines Google writes about the hotel ("Guests praised the service", "Guests mentioned beaches 17 times", "Featured in ..."), with text, topic and mentions where it has them.
topicSummariesThe sentence Google writes for a topic ("Features a beautiful rooftop garden and terrace with great views") and its number of mentions.
reviewSamplesUp to twelve reviews Google quotes on the page, its own first (below). Empty when Include quoted reviews is off.
dealLabelGoogle's words for the price against the usual one ("19% less than usual"), when it has them.
topicsFrom, googlePageReadWhere the topics came from: hotel_page (all of them) or search_card (the first six, when Read each hotel's Google page is off or the page could not be read); and whether the hotel's page was read.
query, source, scrapedAtThe search text or name the row came from, whether it was a search, a name or a link, and when it was collected (ISO-8601, UTC).
customDataYour own JSON from the input, copied onto every row. Present only when you give it.

Each entry of topics:

FieldWhat it is
name, chipGoogle's name of the topic as it writes it in sentences ("Bathroom and toiletries") and the short name on the chip ("Bathroom").
mentions, positive, negative, neutralHow many reviews mention it, how many of those are positive and negative, and what is left.
netPositive minus negative mentions over all mentions, -1 to 1. It is the plain count behind score, which Google leaves at 0 for a topic that guests are split on (97 positive and 53 negative mentions can sit at a score of 0).
score, sentimentGoogle's sentiment score of the topic, -1 to 1, and its flag: positive, negative, or neutral for a topic it leaves unflagged.
shownWhether Google puts the topic first, as a chip, and not under "more".

Each entry of otherSites: site, rating, scale (5 for stars, 10 for some sites), ratingOutOf5 (the rating on a five-point scale), reviewsCount and url. A site can appear twice when Google links two pages of it.

Each entry of reviewSamples: source (Google or the other site), author (the display name the site shows), rating and scale, postedAt (ISO, for Google's own) or postedAgo ("2 weeks ago", for other sites), language, text, topic (the topic Google quotes it for) and url.

An example row, as a run returned it on 11 October 2026: a hotel in Lisbon. The lists are shortened to three topics and two quoted reviews; a run returns all of them.

{
"name": "Secret Patio Lisbon",
"propertyType": "3-star hotel",
"hotelClass": 3,
"address": "BC do Carrasco 1, 1200-096 Lisboa, Portugal",
"city": "Lisbon",
"region": "Lisbon",
"district": "Lisbon",
"countryCode": "PT",
"latitude": 38.710096199999995,
"longitude": -9.1508241,
"phone": "+351 937 532 538",
"website": "https://www.secretpatiolisbon.com/",
"googleUrl": "https://www.google.com/travel/hotels/entity/ChoI89vpl_i-4PjMARoNL2cvMTFneTd5Z3Z6eBAB/prices?hl=en&gl=us&ts=CAESCgoCCAMKAggDEAAaGBIWEhQKBwjqDxALGAoSBwjqDxALGAsYASoHCgU6A1VTRA",
"googleMid": "0xd193571e34950e7:0xccf181f782fa6df3",
"entityToken": "ChoI89vpl_i-4PjMARoNL2cvMTFneTd5Z3Z6eBAB",
"rating": 4,
"reviewsCount": 1205,
"ratingDistribution": [{ "stars": 5, "count": 675 }, { "stars": 4, "count": 204 }, { "stars": 3, "count": 111 }, { "stars": 2, "count": 78 }, { "stars": 1, "count": 137 }],
"otherSites": [
{ "site": "Tripadvisor", "rating": 2.8, "scale": 5, "ratingOutOf5": 2.8, "reviewsCount": 102, "url": "https://www.tripadvisor.com/Hotel_Review-g189158-d17464255-r1066350257?m=68573&staydates=2026_10_25_2026_10_26" },
{ "site": "Trip.com", "rating": 4.1, "scale": 5, "ratingOutOf5": 4.1, "reviewsCount": 48, "url": "https://www.trip.com/hotels/detail?hotelid=10183478&Allianceid=810504&Sid=1394411" }
],
"otherSitesAverage": 3.22,
"otherSitesReviews": 150,
"ratingGap": 0.78,
"topics": [
{ "name": "Bathroom and toiletries", "chip": "Bathroom", "mentions": 84, "positive": 17, "negative": 61, "neutral": 6, "net": -0.524, "score": -0.417, "sentiment": "negative", "shown": true },
{ "name": "Service", "chip": "Service", "mentions": 159, "positive": 97, "negative": 53, "neutral": 9, "net": 0.277, "score": 0, "sentiment": "neutral", "shown": true },
{ "name": "Atmosphere", "chip": "Atmosphere", "mentions": 64, "positive": 56, "negative": 3, "neutral": 5, "net": 0.828, "score": 0.772, "sentiment": "positive", "shown": false }
],
"topicsCount": 27,
"praised": [
{ "topic": "Atmosphere", "score": 0.772, "mentions": 64, "positive": 56, "negative": 3 },
{ "topic": "Pool", "score": 0.711, "mentions": 44, "positive": 38, "negative": 4 },
{ "topic": "Fitness", "score": 0.576, "mentions": 77, "positive": 62, "negative": 8 }
],
"criticised": [
{ "topic": "Air Conditioning", "score": -0.565, "mentions": 21, "positive": 2, "negative": 17 },
{ "topic": "Bathroom", "score": -0.417, "mentions": 84, "positive": 17, "negative": 61 },
{ "topic": "Safety", "score": -0.349, "mentions": 12, "positive": 2, "negative": 8 }
],
"highlights": [
{ "text": "Featured in Digital Nomad Lisbon Guide 2020", "topic": null, "mentions": null }
],
"topicSummaries": [
{ "summary": "Offers robust coworking space with free Wi-Fi, offices, and snacks", "mentions": 66 },
{ "summary": "Features a beautiful rooftop garden and terrace with great views", "mentions": 64 }
],
"reviewSamples": [
{ "source": "Google", "author": "Ciara", "rating": 5, "scale": 5, "postedAt": "2023-05-12T21:20:58.459Z", "postedAgo": null, "language": null, "text": "Staff were very friendly and welcoming and reception is open 24 hours for all queries.", "topic": null, "url": null }
],
"dealLabel": null,
"topicsFrom": "hotel_page",
"googlePageRead": true,
"query": "hotels in Lisbon",
"source": "search",
"scrapedAt": "2026-10-11T20:20:42.565Z"
}

The example shows what the data says, not a verdict: a hotel rated 4.0 on Google and 2.8 on Tripadvisor, with 17 of 84 mentions of its bathroom positive.

The market benchmark

The TOPIC_BENCHMARK record of the run (key-value store) has one entry for each topic that at least two hotels have Minimum mentions or more of, most common first:

FieldWhat it is
topic, hotels, mentionsThe topic, how many hotels of the run have it with enough mentions, and the mentions in all.
averageScore, weightedScore, medianScore, p25, p75The mean of the hotels' scores (each hotel once), the mean weighted by mentions, the median and the quartiles.
positiveSharePositive mentions over positive and negative ones together.
best, worstThe three hotels with the highest and the lowest score of the topic: name, entityToken, score, mentions.

A hotel is placed in the market by comparing its score to p25, medianScore and p75 of the same topic: air conditioning at -0.60 is far below a market median of -0.05.

How do I use it?

  1. Under Searches type what you would type into Google Hotels: hotels in Batumi, boutique hotels in Lisbon. Or under Hotels put hotel names with the city (Hilton Batumi), or paste a Google Hotels link of a hotel.
  2. Set Hotels per run and the filters you want: reviews, stars, the minimum mentions that make a topic count.
  3. Press Start. 60 hotels of three cities took under a minute.

From the API:

{
"searchQueries": ["hotels in Batumi"],
"hotels": ["Hilton Batumi"],
"maxHotelsPerSearch": 40,
"maxHotels": 60,
"minMentions": 15,
"language": "en"
}

What can I set?

SettingWhat it does
SearchesTexts to search on Google Hotels. Each returns up to Hotels per search hotels.
HotelsHotels by name with the city, or by Google Hotels link.
Hotels per searchHow many hotels to collect per search text, 1 to 200.
Hotels per runThe most hotels the run delivers and charges for, 1 to 2,000.
Minimum reviewsLeave out hotels with fewer Google reviews than this (10 by default): they have no topics.
Minimum starsLeave out hotels with fewer stars, and hotels with no star class.
Leave out vacation rentalsOn by default: listings of rental marketplaces have a few reviews and no topics.
Read each hotel's Google pageOn by default: every topic, the ratings on other sites and the quoted reviews, one request per hotel. Off: the first six topics from the search card, twenty hotels per request, nothing from other sites.
Minimum mentionsA topic needs this many mentions (10 by default) to count as praised or criticised and to enter the benchmark.
Include quoted reviewsOn by default: up to twelve quoted reviews with author, rating, date and text.
Language, Country of saleThe language of Google's texts, which includes the names of the topics (keep one across runs you compare), and the country code Google answers for.
Requests in parallel1 to 10, five by default.
Custom dataJSON copied onto every row.
ProxyApify datacenter proxies by default; your own proxies if you choose Custom proxies.

How many hotels does a search return?

Google lists about twenty hotels per page and fills a page from the sixty or so it has for a text, in an order that changes from one request to the next. The Actor asks again a few times and keeps what is new. A big city gives fifty to sixty hotels per text at most; to go further use several texts (hotels in Lisbon, boutique hotels in Lisbon, 5 star hotels in Lisbon). The Actor reads each hotel once however many searches name it.

What does it cost?

Pay per event: one hotel event for every hotel delivered with something to report, $0.004 on the free plan, $0.0035 Bronze, $0.003 Silver, $0.0025 Gold and above. A hotel with no topics and no ratings elsewhere is delivered and not charged. The platform's own events are the start of the run ($0.00005) and the dataset item ($0.00001).

Measured on the platform on 11 October 2026: 60 hotels of Lisbon, Istanbul and Prague took 55 seconds and used $0.0023 of platform usage. All 60 had topics (11 to 29 each), 59 had a rating on another site, and the benchmark had 30 topics. Google answered 68 requests without a failed attempt.

Limits

  • The topics, the mentions and the scores are Google's own. The Actor does not read the reviews behind them and cannot say which review a mention is. The count of mentions of a topic is the count of reviews that mention it, not of reviews in all.
  • Ratings on other sites are the ones Google shows for the hotel on the day; not every hotel has them (a small hotel often has none), and a site can appear twice when Google links two of its pages.
  • Google writes the topic names in the language of the run. Compare hotels within one language.
  • A search card carries the first six topics; with Read each hotel's Google page off, the benchmark is made of six topics a hotel at most.
  • A quoted review is one Google chose to show, not a sample of all of them. Its author is the display name the site publishes.
  • Google changes the layout of its pages from time to time. The Actor finds hotels by their shape and checks that every page answers for the stay it asked, so a change shows as a clear error rather than as wrong rows; if it ever does, open an issue with the run link.

This is an unofficial tool, not affiliated with, endorsed by or connected to Google LLC. It reads publicly visible pages and collects no private data; the author names in quoted reviews are the display names the sites show publicly, and you can switch the quoted reviews off. Google's terms restrict automated access, and you are responsible for making sure your use complies with those terms and with the law in your jurisdiction. See Apify's stance on web scraping legality.

What the Actor does about robots.txt: Google's robots.txt closes /travel/search, /travel/entity and /travel/lodging/clk to crawlers and leaves /travel/hotels/ open. The Actor requests only /travel/hotels/ pages (the search page and the hotel page), reads Google's robots.txt at the start of each run and refuses any address it closes. That does not change what the terms say; it means the Actor does not go where robots.txt asks crawlers not to.

Found a problem?

Open an issue on the Issues tab with the run link and the hotel. Breakages in Google's pages are the expected failure mode of any scraper, and this one is built to say so rather than to deliver wrong data. Reports get read.