Google Hotels Reviews Scraper avatar

Google Hotels Reviews Scraper

Pricing

from $1.00 / 1,000 review-scrapeds

Go to Apify Store
Google Hotels Reviews Scraper

Google Hotels Reviews Scraper

Scrape Google Hotels reviews from every source Google shows, including the hotel's own site. Just add hotel names, URLs or ids and get rating, Rooms, Service and Location scores, trip type, text, author and date. Sort, filter Google reviews by topic, or get only new ones. $1.60 per 1,000 reviews.

Pricing

from $1.00 / 1,000 review-scrapeds

Rating

0.0

(0)

Developer

BonCross API

BonCross API

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Categories

Share

What is Google Hotels Reviews Scraper?

A hotel's Reviews tab on Google Hotels mixes Google's own reviews with ones from Tripadvisor, Trip.com, Priceline and the hotel's site. Google Hotels Reviews Scraper returns that mixed list as rows you can sort and count, with the Rooms, Service and Location scores Google collects from each guest. Type a hotel's name or paste its Google Hotels link.

Five things it does well:

  • More than one source per run. 900 reviews of three hotels came back as 794 from Google, 86 from Trip.com, 17 from Tripadvisor and 3 from elsewhere.
  • Scores below the headline rating. 592 of those 900 had per-aspect scores, and 391 had Google's highlight tags.
  • Quick on a long list. 32 hotels at 200 reviews each, 6,400 reviews, took 25 seconds.
  • A typed name gets you the hotel you meant, or a free row saying it didn't. 13 of 14 real names resolved in our test, among them names in Japanese, Korean, Chinese and Thai, and none of 4 invented names returned a hotel.
  • $1.60 per 1,000 reviews on the Free plan, $1.00 on Business. Reviews removed by a filter, duplicates and ones you've had before are free.

BonCross Verified means we tested this actor against the live site before release and kept the record:

  • 27 of 27 live checks on its inputs and filters passed on 7 October 2026
  • 11 hotel names run the same day, one invented: 250 reviews of the 10 real hotels
  • Name check: 13 of 14 real names resolved, 4 of 4 invented refused
  • A weak name match gets an uncharged row

This is the reviews actor of three. If it's prices you're after, Google Hotels Search Scraper prices the hotels of a whole area and Google Hotels Prices Scraper compares the sellers of one hotel.

Two review sources, and when to pick each

The actor reads a hotel's reviews from one of two places. You choose with "Review source".

All sources (default, hotels)Google only (maps)
Whose reviewsGoogle, Tripadvisor, Trip.com, Priceline, the hotel's siteGoogle's own
DateGoogle's relative wording, with a date derived from itExact timestamp, plus an edited flag
Aspect scores, highlight tags, trip typeWhere Google has themAspect scores and trip type, where the guest gave them
Owner's reply and reviewer photosNot availableIncluded
Likes, Local Guide flag, reviewer's countsNot availableIncluded
Topic filter and text searchWorkIgnored

Pick the default for sentiment work across sources. Pick Google only when you need to know exactly when a review was posted or whether the hotel answered it.

How to scrape Google Hotels reviews

You don't need to write code. It's a form.

  1. Open Google Hotels Reviews Scraper on Apify. If you don't have an account yet, signing up is free.
  2. List your hotels, one per line. "Four Seasons Hotel New York Downtown" works as typed. A Google Hotels link or an entity id works too.
  3. Choose a sort order and how many reviews you want per hotel. Add a topic or a rating filter if you only want part of the picture.
  4. Press Start, then download the reviews as a spreadsheet or as JSON.

What review data do you get?

📝 Full review text⭐ Rating and its scale
Source: Google, Tripadvisor, Trip.com and othersReview id and URL
Rooms, Service and Location scoresPer-topic comments
Google's highlight tags🧳 Trip type and travel group
👍 Likes and Local Guide flagTopic and sort used
👤 Reviewer name, profile and avatarReviewer's review and photo counts
📅 Relative date, and a date derived from itExact timestamp and edited flag
💬 Owner's reply📷 Reviewer photos
🏨 Hotel name, rating and review countHotel rating histogram
Hotel sentiment by topic📍 Hotel address and star class

Exact timestamps, likes, the Local Guide flag, reviewer counts, owner replies and reviewer photos come from the Google-only source.

⬇️ Input

The only thing you must give is a hotel. Names, Google Hotels URLs and entity ids can be mixed in one list. For a name Google doesn't recognise alone, add the city after a comma.

Start URLs is for long lists of links: it loads them from a file, a Google Sheet or a remote list, and adds them to whatever you typed under Hotels.

There are two caps. "Max reviews per hotel" (1 to 10,000, default 100) applies to each hotel separately: ten hotels at 50 each returns 500. "Maximum results for the whole run" is the ceiling for all hotels together. The run stops fetching there, and you aren't charged past it.

The most helpful 500 reviews of a hotel, all sources

{
"hotels": ["Four Seasons Hotel New York Downtown"],
"maxReviewsPerHotel": 500,
"sort": "helpful",
"language": "en",
"country": "us"
}

Complaints only, about one topic

{
"hotels": ["ChkIovWq7d7c9psTGg0vZy8xMWJ5eDhya2NsEAE"],
"maxReviewsPerHotel": 300,
"sort": "lowest",
"topic": "Cleanliness",
"maxRating": 2
}

Google applies the topic filter before anything is fetched, and reviews your rating filter removes are free.

Google reviews with exact timestamps, owner replies and photos

{
"hotels": ["https://www.google.com/travel/hotels/entity/ChkIovWq7d7c9psTGg0vZy8xMWJ5eDhya2NsEAE"],
"source": "maps",
"sort": "newest",
"maxReviewsPerHotel": 200
}

A daily feed of new reviews across a portfolio

{
"hotels": ["The Plaza, New York", "Hotel Adlon Kempinski Berlin", "Raffles Singapore"],
"sort": "newest",
"maxReviewsPerHotel": 100,
"dedupStoreName": "portfolio-reviews"
}

Only reviews you haven't had in an earlier run are returned and charged.

All inputs

FieldNotes
hotels, startUrlsHotels as names, links or entity ids, and the bulk loader for links.
maxReviewsPerHotel, maxItemsThe per-hotel cap and the run-wide cap. 0 on maxItems means no run-wide cap.
sourcehotels (default, all sources) or maps (Google only).
sorthelpful (default), newest, highest or lowest. These are Google's own orderings. newest returns Google reviews only, as on the site.
topicOnly reviews Google tags with a topic, in any letter case: Service, Location, Breakfast, Cleanliness, Pool, Sleep, Family friendly, Bar or lounge and so on.
searchFree-text search, like the "Search reviews" box on Google Hotels.
sourcesKeep only reviews whose source contains one of these, such as ["Google"] or ["Tripadvisor", "Trip.com"]. Empty keeps all.
minRating, maxRatingRating band on the review's own scale, usually 5. 0 is off.
includeHotelInfoOn by default. Adds the hotel's name, rating, review count, stars, address, star histogram and sentiment by topic to each review, at no extra charge.
language, countryDefaults en and us. Google translates reviews into the language where it can.
dedupStoreNameNames the store that remembers which reviews you've had.
maxConcurrency, delayMsRequest pacing. See the developer notes.

For developers

  • maxReviewsPerHotel is per hotel and maxItems is run-wide. Reviews arrive 100 per request.
  • When a rating filter, a source filter or the dedup store keeps nothing, a hotel's scan stops after five requests in a row with no review kept, and at three times the requests its limit needs (at least 20).
  • With sort: "newest" and a dedupStoreName, a hotel's list stops at the first review an earlier run returned. That's what keeps a daily feed short and cheap.
  • minRating above maxRating is refused.
  • sources is applied after fetching. topic is applied by Google before fetching. Both leave you paying only for the reviews you keep.
  • topic and search belong to the default source. With source: "maps" they're ignored.
  • A name is checked against the hotel Google resolves it to. A weak match writes an uncharged error row that names your input and Google's candidate. hotel-resolved is charged per plain name resolved. Links and entity ids skip both the name check and that fee.
  • maxConcurrency (default 32, 1 to 32) sets how many requests run at once, and delayMs (default 0) adds a pause before each. We'd leave them alone unless a run reports errors.
  • A run that Apify moves to another server, or that restarts, carries on where it stopped. No review is written or charged twice.

⬆️ Output

Each review is one record, and each one repeats the hotel summary, which means a single export is enough for analysis. This review is from the first example, run on 7 October 2026 on the default source.

{
"input": "Four Seasons Hotel New York Downtown",
"entityId": "ChkIovWq7d7c9psTGg0vZy8xMWJ5eDhya2NsEAE",
"entityUrl": "https://www.google.com/travel/hotels/entity/ChkIovWq7d7c9psTGg0vZy8xMWJ5eDhya2NsEAE",
"hotelName": "Four Seasons Hotel New York Downtown",
"hotelRating": 4.7,
"hotelRatingScale": 5,
"hotelReviewCount": 1321,
"hotelStars": 5,
"hotelAddress": "27 Barclay St, New York, NY 10007",
"hotelRatingHistogram": [ { "stars": 5, "percent": 84, "count": 1084 }, { "stars": 4, "percent": 10, "count": 140 }, "…" ],
"hotelSentiment": [ { "topic": "Wellness", "shortLabel": "Wellness", "mentions": 37, "positive": 27, "negative": 5, "positiveShare": 0.73, "highlighted": true }, "…" ],
"id": "Ci9DQUlRQUNvZENodHljRjlvT21oQ1dsbGlhakJSVUhscFFrOXlhVTVEY1hkVlprRRAB",
"url": null,
"reviewId": "Ci9DQUlRQUNvZENodHljRjlvT21oQ1dsbGlhakJSVUhscFFrOXlhVTVEY1hkVlprRRAB",
"source": "Google",
"sourceId": -1,
"author": "Vincent Malizia",
"authorUrl": "https://www.google.com/maps/contrib/116499948185041340762?hl=en",
"authorAvatar": "https://lh3.googleusercontent.com/…",
"postedText": "2 months ago",
"postedAt": "2026-08-08",
"postedAtIsApproximate": true,
"isEdited": false,
"rating": 5,
"ratingScale": 5,
"text": "There’s nothing better than staying at a Four Seasons Hotel! The room was clean and large. Service was exceptional as usual! Love the location! Close to Little Italy and some great shopping in SoHo. Highly recommend this hotel. One of my favorites in NYC",
"language": null,
"tripTypeIds": [6, 1],
"tripType": "Vacation",
"travelGroup": "Family",
"aspects": [
{ "aspect": "Rooms", "rating": 5, "ratingScale": 5 },
{ "aspect": "Service", "rating": 5, "ratingScale": 5 },
{ "aspect": "Location", "rating": 5, "ratingScale": 5 }
],
"aspectComments": [],
"highlights": ["Luxury"],
"reviewUrl": null,
"reviewSource": "hotels",
"sort": "helpful",
"topic": null,
"scrapedAt": "2026-10-07T20:26:15.147Z"
}

Columns worth a note:

ColumnMeaning
postedAt, postedAtIsApproximate, postedTextOn the Google-only source postedAt is an exact timestamp. On the default source Google publishes only relative wording ("a month ago", "4 weeks ago"), and postedAt is a date derived from it: right to the week for a recent review, to the month for an old one, with postedAtIsApproximate set to true. postedText always has Google's exact words.
isEditedA review Google shows as edited. Its date is the date of the edit.
aspects, aspectComments, highlightsDefault source, where Google has them. Per-topic comments are the rarest: 11% of reviews in a 275-review sample.
tripType, travelGroup, tripTypeIdsBusiness or Vacation, and who the guest travelled with (Family, Couple, Solo, Friends). Either can appear without the other.
languageThe language code of the review text. Filled on the Google-only source, null on the default one.
sourceIdGoogle's number for the partner a review came from, and -1 on Google's own reviews. Null on the Google-only source, which has no partners.
url, reviewUrlThe review's own link, where one is given. Tripadvisor and Trip.com reviews had one in the run above. Google's own reviews on the default source didn't.
likes, authorLocalGuide, authorId, authorReviewCount, authorPhotoCount, postedAtMs, ownerResponse, photosGoogle-only source.
reviewSource, sort, topicThe source, order and topic the run asked for.
errorOn a row for a hotel that couldn't be found, was matched too weakly, or couldn't be read. No review is charged for such a row.

How much does it cost to scrape Google Hotels reviews?

EventFree planStarterScaleBusiness
actor-start, per run$0.002$0.002$0.002$0.002
hotel-resolved, per plain name resolved to a hotel$0.002$0.002$0.002$0.002
review-scraped, per review returned$0.0016$0.00144$0.00128$0.001

Enterprise plans pay the Business price.

$1.60 per 1,000 reviews on the Free plan, $1.00 on Business, with proxy usage and platform usage included. Filtered, duplicate and previously seen reviews are free.

  • A full archive. One hotel by name, 5,000 reviews: $0.002 + $0.002 + 5,000 × $0.0016 = $8.004 ($5.004 on Business).
  • A daily monitor of 50 hotels by entity id with an only-new store. A day that brings 40 new reviews costs $0.002 + 40 × $0.0016 = $0.066 ($0.042 on Business).

Each month Apify's Free plan gives you $5 of credits, which is about 3,000 reviews with this actor: thirty runs of one named hotel at 100 reviews.

How many reviews can you get, and how fast?

Up to 10,000 reviews per hotel per run. Large hotels have thousands available.

Three hotels at 300 reviews each, measured on Apify on 26 September 2026:

Reviews returned900: 794 Google, 86 Trip.com, 17 Tripadvisor, 3 other
With per-aspect scores592
With highlight tags391

Whole runs at the default settings:

RunReviewsRun time
1 hotel by name, 10 reviews105 s (2 October 2026, two runs)
5 hotels, up to 300 each1,5007 to 19 s (2 October 2026, two runs)
32 hotels, 200 each6,40025 s (1 October 2026)
150 hotels, 20 each, with hotel details3,00069 s (2 October 2026)

A long list keeps its pace. 150 hotels took about a minute with the hotel summary on, roughly 130 hotels a minute, and it's quicker with the summary off.

FAQ

Does it include Tripadvisor and Trip.com reviews?

On the default source it does, in whatever proportion Google shows them. In the reference run 106 of 900 reviews came from third-party sites. To keep only those, put their names in "Only these sources".

How do I get exact review dates, owner replies and photos?

Set "Review source" to Google only. You get Google's own reviews with a timestamp, an edited flag, the owner's reply and the reviewer's photos. Third-party reviews only ever have a relative date on Google.

How do I get only the new reviews each day?

Give the only-new store a name, sort by newest and put the run on an Apify Schedule. Anything returned before is skipped and free, and each hotel's scan stops at the first review it already gave you.

Which topics can I filter by?

Google's review topics, such as Service, Location, Breakfast, Cleanliness, Pool or Sleep. They differ by hotel. The hotelSentiment list on each row shows which topics that hotel has, with counts.

I typed a hotel name and got an error row. What happened?

Google either found nothing or offered a hotel that doesn't look like yours. The row names both and costs nothing. Try the name with its city after a comma, or use the hotel's link from Google Hotels. Names in other scripts are fine: Japanese, Korean, Chinese and Thai names matched their hotels in an English run.

Are reviews translated?

Google translates reviews into your chosen language where it does so on the site, and keeps its "Translated by Google" prefix on them.

Do I need proxies, a Google account or an API key?

None of the three. Nothing is logged in to, and proxy usage is already in the price.

The actor reads only what Google serves to a logged-out visitor. Reviews are public content written by other people, and reviewer names are personal data in some jurisdictions. Scraping public data is generally legal, but what you do with it is your responsibility under Google's terms and your local law.

What it can't do

  • Google decides which third-party reviews it shows and in what proportion. You get what the Reviews tab would show, not a full Tripadvisor archive.
  • The default source gives relative dates only. Third-party reviews never have an exact timestamp anywhere on Google.
  • Sorting by newest returns Google reviews only, which is how the site behaves.
  • The Google-only source needs a hotel with a Google Maps listing. Vacation rentals have none and return an error row.
  • Trip type and travel group are decoded from Google's codes. A code we don't recognise appears as unknown(n) with the raw ids beside it.
  • isEdited is read from Google's own date wording in any interface language. Where the wording isn't recognised it's null, not a guess.
  • Names are checked as text, not as locations. For a name that several hotels share, add the city or use the link.

New reviews each morning, in your own tools

Reputation teams usually run the portfolio example on a daily schedule and send the output on. A webhook fires when the run ends, and Apify's integrations can drop the new reviews into Slack, Google Sheets, Zapier or Make. Add a maximum rating and the feed becomes an alert for bad reviews only.

To call it from code, POST https://api.apify.com/v2/acts/boncross~google-hotels-reviews/run-sync-get-dataset-items with the input JSON as the body. Short runs answer in that one call. For big archives, start a run and read its dataset, or use apify-client for Node.js or Python.

It's also a tool on the Apify MCP server (mcp.apify.com), under the name google-hotels-reviews. An agent can fetch a hotel's lowest-rated reviews and summarise what guests complain about.

More from BonCross

Your feedback

Seen a review on Google that the actor didn't return, or a date that looks off? Report it on the Issues tab in Apify Console and include the hotel. We look at every report and write back there.