Google Hotels Scraper | Prices, Offers and Ratings
Pricing
from $2.55 / 1,000 hotels
Google Hotels Scraper | Prices, Offers and Ratings
Google Hotels scraper that turns any destination into a hotel price table: rates for your dates, star class, guest ratings, taxes and fees, plus the offers of Booking.com, Expedia, Agoda and the hotel's own site with booking links. Address, phone, coordinates, amenities, photos. No account needed.
Pricing
from $2.55 / 1,000 hotels
Rating
0.0
(0)
Developer
SilentFlow
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Google Hotels Scraper
Turn Google Hotels into a table: every hotel of a destination, priced for your dates, with the rate of every booking site Google compares on the same row. 20 hotels with their offers in about ten seconds, a whole city in a few minutes.
How it works

- You type destinations, hotel names or hotel links, and your dates.
hotels in Paris,resorts in Bali,Ritz Paris, or the link of a hotel page on Google Hotels. Pick the check-in and check-out, the number of adults and the currency. Leave the dates empty to price one night starting tomorrow. - One row comes back per hotel. 34 fields: name, star class, guest rating and review histogram, price per night and total with taxes and fees, the offers of Booking.com, Expedia, Agoda, Trip.com, the hotel's own site and every other seller Google lists, each with its per-night price, total and booking link, plus address, phone, coordinates, amenities, photos and description. Ready for a spreadsheet, a warehouse, a rate parity dashboard or an AI pipeline.
✨ Why teams choose this over other Google Hotels scrapers
Checking hotel rates city by city in a browser? Copying prices into a sheet the night before a pricing meeting? Running a scraper that returns 20 hotels and stops, or prices for dates you did not ask for?
- 💵 Prices for your stay, not for a random night. Check-in, check-out, party size and currency are part of the request, so every price per night, every total and every offer is the one Google shows a traveler with your dates. The taxes and fees are broken out on the row.
- 🏷️ The whole offers ladder on every hotel. Up to 24 sellers per hotel on our Paris test: the hotel's own site flagged as official, Booking.com, Expedia, Hotels.com, Agoda, Trip.com, Vio.com, Priceline, Super.com and the others, each with its per-night rate, its total and its booking link. Rate parity in one column instead of one tab per site.
- 📄 Hundreds of hotels per destination. The walk follows Google's own pagination, 20 hotels per page, page after page, until your cap. Duplicates across pages are removed on the hotel's stable id.
- ⭐ Ratings you can compare. Guest rating, review count and the 1 to 5 star histogram as numbers, the star class as an integer, never "4.5/5 (1,2K)" strings.
- 🗺️ Where it is and how to reach it. Street address, phone, latitude and longitude, country code, check-in and check-out times, the hotel's website and its Google Maps link.
- 🌐 Any market, any currency. 24 currencies and 14 languages: price Tokyo in yen with Japanese descriptions, London in pounds, Dubai in dirhams.
- 🔓 No account, no API key. Click Start on the prefilled form and the first 50 hotels of Paris arrive with their offers in about half a minute.
🎯 What you can do with Google Hotels data
| Team | What they build |
|---|---|
| Revenue management | A nightly rate shop of the 30 competitors of each property, with the rate of every OTA next to the hotel's own, to spot parity breaks before guests do |
| OTAs and metasearch | A price index of a destination for a given stay, refreshed every morning, to check their own placement and undercut where it matters |
| Travel agencies and TMCs | A quote of every hotel of a city for the client's exact dates, party size and currency, exported to a proposal in minutes |
| Market analysts | The average price per night by star class and neighborhood across 500 hotels of a city, for a report or an investor deck |
| Hotel groups | The guest rating and review histogram of every property of a brand and its competitors, tracked week by week |
| Data and AI teams | A structured hotel dataset with prices, coordinates, amenities and descriptions to feed a travel assistant or a recommendation model |
| Growth and SEO | Destination pages with live prices from, ratings and hotel counts, regenerated from the dataset on a schedule |
📥 Input parameters
Type a destination like hotels in Paris, pick your dates and hit Start. Each hotel becomes one row of the dataset, priced for your stay.
| Field | Type | Default | What it does |
|---|---|---|---|
searchQueries | array | ["hotels in Paris"] | What to search, one per line: a destination (hotels in Paris, resorts in Bali, hotels near Times Square), a hotel name (Ritz Paris) or the link of a hotel page (https://www.google.com/travel/hotels/entity/...). A destination returns hotels in Google's order, 20 per page; a hotel name or link returns that hotel alone. |
checkInDate | string | empty | First night of the stay, YYYY-MM-DD. Empty with an empty check-out: one night starting tomorrow, computed when the run starts. |
checkOutDate | string | empty | Departure day, YYYY-MM-DD, after the check-in. Empty: one night. Stays of up to 30 nights are priced. |
maxItems | integer | 50 | How many hotels to save in all, across every search. |
👥 Guests and prices
| Field | Type | Default | What it does |
|---|---|---|---|
adults | integer | 2 | Adults in the room, 1 to 8. Prices change with the party size. |
currency | string | USD | Currency of every price in the output, as Google converts it. 24 codes available: USD, EUR, GBP, CHF, CAD, AUD, JPY, CNY, INR, AED, BRL, MXN and more. |
language | string | en | Language of the descriptions and of the hotel pages Google returns: en, fr, de, es, it, pt, nl, ja, ko, zh-CN, ar, ru, tr, pl. Amenity names are always in English. |
📄 Output
| Field | Type | Default | What it does |
|---|---|---|---|
includeDetails | boolean | true | On: every row also carries the street address, the phone, the price breakdown of the stay (base, taxes and fees, total) and the offers of every booking site with their links. One extra read per hotel, about ten seconds per page of 20. Off: the search columns only, for the fastest list. |
⚙️ Advanced
| Field | Type | Default | What it does |
|---|---|---|---|
debugMode | boolean | false | Adds detailed lines to the run log. Only useful when you report a problem. |
📊 Output data
One row per hotel. A resort of "resorts in Bali", three adults, 20 to 23 December, prices in AUD, with the details on:
{"id": "ChoI3LHO6tXtkviSARoNL2cvMTFieGY2ZmRiahAB","url": "https://www.google.com/travel/hotels/entity/ChoI3LHO6tXtkviSARoNL2cvMTFieGY2ZmRiahAB","name": "Sumberkima Hill Retreat","hotelClass": 4,"propertyType": "resort hotel","description": "Refined rooms & posh villas with infinity pools in an elegant resort offering sea & mountain views.\nOn a remote hilltop overlooking the Bali Sea, this elegant resort is 21 km from mountainous Barat National Park and 27 km from the Gilimanuk ferry port.\nAccommodations range from refined rooms with verandahs, suspended lounge beds and a shared outdoor infinity pool, to posh 5-bedroom villas that sleep up to 11, and feature private terraces and pools, kitchens, indoor/outdoor bathrooms, and flat-screen TVs. All have sea and/or mountain views, Wi-Fi access, safes and mosquito nets.\nThere's an open-air restaurant offering Asian and western cuisines, plus scenic views. Yoga, spa services and bike rentals are also available.","amenities": ["Spa", "Pool", "Wi-Fi", "Parking", "Restaurant", "Airport shuttle", "Fitness center"],"checkInTime": "3:00 PM","checkOutTime": "12:00 PM","pricePerNight": 149.96,"totalPrice": 449.87,"basePrice": 408.96,"taxesAndFees": 40.91,"currency": "AUD","rating": 4.7,"reviewsCount": 1544,"ratingHistogram": { "1": 33, "2": 36, "3": 42, "4": 144, "5": 1289 },"offers": [{"provider": "Booking.com","pricePerNight": 150,"totalPrice": 450,"currency": "AUD","url": "https://www.google.com/travel/lodging/clk?pc=AA80OszyrJffUy4CV0Qi...&ap=1","isOfficial": false}],"offersCount": 1,"address": "Sumberkima, Gerokgak, Buleleng Regency, Bali 81155, Indonesia","phone": "+62 812-8212-9211","latitude": -8.1513898,"longitude": 114.60883679999998,"countryCode": "ID","checkInDate": "2026-12-20","checkOutDate": "2026-12-23","nights": 3,"adults": 3,"imageUrl": "https://lh3.googleusercontent.com/gps-cs-s/AHRPTWl58c-dLCokHgTL9vVG5XK3YbrqhmEDU1bAi_JmCIPAqkTZ...=s150-w92-h150-n-k-no","images": ["https://lh3.googleusercontent.com/gps-cs-s/AHRPTWl58c-dLCokHgTL9vVG5XK3YbrqhmEDU1bAi_JmCIPAqkTZ...=s287-w287-h192-n-k-no-v1","https://lh3.googleusercontent.com/gps-cs-s/AHRPTWkBdU3ZhP4yf2CEGOZjglqK8ckCbG8T_iAraM-kZlGy26hC...=s287-w287-h192-n-k-no-v1"],"website": "https://sumberkimahill.com/","mapsUrl": "https://www.google.com/maps?cid=10588045657037314268","searchQuery": "resorts in Bali","scrapedAt": "2026-09-20T15:58:39Z"}
The same shape with the details off, from a French search (hôtels à Lyon, language: fr, one adult, two nights in EUR). The search page already carries the price breakdown and the address for many hotels; the offers ladder needs the details:
{"id": "ChkI-PHLhdCU3o0dGg0vZy8xMXRiZmhreHNkEAE","url": "https://www.google.com/travel/hotels/entity/ChkI-PHLhdCU3o0dGg0vZy8xMXRiZmhreHNkEAE","name": "The People Lyon","hotelClass": null,"propertyType": "hostel","description": "Dortoirs modernes et chambres privées dans une auberge de jeunesse décontractée proposant un restaurant et une cuisine commune.","amenities": [],"checkInTime": "15:00","checkOutTime": "11:00","pricePerNight": 23.08,"totalPrice": 46.17,"basePrice": 44.51,"taxesAndFees": 1.66,"currency": "EUR","rating": 4.3,"reviewsCount": 1175,"ratingHistogram": { "1": 102, "2": 43, "3": 71, "4": 168, "5": 791 },"offers": [],"offersCount": 0,"address": "10 Mnt des Carmélites","phone": "04 28 01 86 00","latitude": 45.7717096,"longitude": 4.8273408,"countryCode": "FR","checkInDate": "2026-11-06","checkOutDate": "2026-11-08","nights": 2,"adults": 1,"imageUrl": "https://lh3.googleusercontent.com/gps-cs-s/AHRPTWn7z2Erg-gYovaG20ZowU0VZTlnV9DNOTrXBG-4b1WVr8Df...=s150-w92-h150-n-k-no","images": ["https://lh3.googleusercontent.com/gps-cs-s/AHRPTWn7z2Erg-gYovaG20ZowU0VZTlnV9DNOTrXBG-4b1WVr8Df...=s287-w287-h192-n-k-no-v1"],"website": "https://www.thepeoplehostel.com/fr/destinations/lyon/","mapsUrl": "https://www.google.com/maps?cid=2097402701547763960","searchQuery": "hôtels à Lyon","scrapedAt": "2026-09-20T16:00:27Z"}
🗂️ Data fields
34 fields per hotel, plus 6 per offer. A value Google does not show is null (or an empty list), never an empty string or a zero.
Identity
| Field | Type | Description |
|---|---|---|
id | string | Google's stable token of the hotel. Paste it, or the url, back into searchQueries to read that hotel again |
url | string | Permanent link of the hotel page on Google Hotels |
name | string | Hotel name as Google displays it |
Content
| Field | Type | Description |
|---|---|---|
hotelClass | integer | Star class, 1 to 5; null for hostels and unclassified properties |
propertyType | string | Google's category: hotel, hostel, resort hotel, bed and breakfast, motel... |
description | string | Google's summary, with the full paragraphs when the details are on. In the language you picked |
amenities | array | The amenities Google highlights, in English: Wi-Fi, Air conditioning, Pool, Spa, Parking, Breakfast, Restaurant, Fitness center, Pet-friendly, Beach access, Beach front, Hot tub, Airport shuttle. Empty when the hotel highlights none of them |
checkInTime, checkOutTime | string | As displayed, in the format of the language picked (3:00 PM, 15:00) |
Measures
| Field | Type | Description |
|---|---|---|
pricePerNight | number | Lowest price per night Google shows for your stay, taxes included where Google includes them |
totalPrice | number | Total of the stay, taxes and fees included |
basePrice, taxesAndFees | number | The breakdown of totalPrice |
currency | string | ISO 4217 code of every price on the row, the one you asked for |
rating | number | Guest rating, 0 to 5 |
reviewsCount | integer | Number of reviews behind the rating |
ratingHistogram | object | Reviews per star, {"1": n, ..., "5": n} |
offers | array | One entry per seller Google compares for your stay: provider, pricePerNight, totalPrice, currency, url (the booking link through Google, which opens the seller's page for these dates), isOfficial (true for the hotel's own site) |
offersCount | integer | Length of offers |
Place and time
| Field | Type | Description |
|---|---|---|
address | string | Street address as Google displays it |
phone | string | Phone number as displayed |
latitude, longitude | number | Coordinates of the property |
countryCode | string | ISO 3166-1 alpha-2 |
checkInDate, checkOutDate | string | The stay every price refers to, YYYY-MM-DD |
nights, adults | integer | Length of the stay and party size the prices are for |
Media and links
| Field | Type | Description |
|---|---|---|
imageUrl | string | Thumbnail of the hotel. Google image links stay valid for months |
images | array | The first photos of the hotel, larger variants |
website | string | The hotel's own website when Google shows one |
mapsUrl | string | Link to the property on Google Maps |
Meta
| Field | Type | Description |
|---|---|---|
searchQuery | string | The entry of searchQueries that produced the row |
scrapedAt | string | Time of the read, RFC 3339 UTC |
🚀 Examples
Get the hotels of Paris with their offers for next weekend
{"searchQueries": ["hotels in Paris"],"checkInDate": "2026-10-10","checkOutDate": "2026-10-12","maxItems": 50}
Price a whole city in euros for a family of four
{"searchQueries": ["hotels in Barcelona"],"checkInDate": "2026-12-27","checkOutDate": "2026-12-30","adults": 4,"currency": "EUR","maxItems": 300}
Run a rate parity check on the hotels you track
Paste hotel links or exact names. Each one comes back as a row with the rate of every seller next to the hotel's own (isOfficial: true).
{"searchQueries": ["https://www.google.com/travel/hotels/entity/ChUImcGKtLfWgL9OGgkvbS8wNTZuODEQAQ","Hotel Saint Paul Rive Gauche Paris","The Plaza New York"],"checkInDate": "2026-11-06","checkOutDate": "2026-11-08","currency": "USD"}
List Tokyo hotels in Japanese, priced in yen, without the offers
The fastest list: 20 hotels every couple of seconds, with rating, class, lead price and coordinates.
{"searchQueries": ["東京 ホテル"],"language": "ja","currency": "JPY","includeDetails": false,"maxItems": 200}
Compare resorts around a landmark for a long stay
{"searchQueries": ["resorts near Nusa Dua Bali", "resorts in Seminyak"],"checkInDate": "2027-01-10","checkOutDate": "2027-01-24","adults": 2,"currency": "AUD","maxItems": 80}
Get tonight's prices for a last-minute deal page
No dates: one night starting tomorrow, computed at run time. Schedule the run daily and the dates move with it.
{"searchQueries": ["hotels in Miami Beach"],"maxItems": 100}
🤖 Copy to your AI assistant
Paste this block into Claude, ChatGPT or Cursor to give it full context about this scraper:
You have access to the Google Hotels Scraper on Apify: silentflow/google-hotels-scraperInput schema:- searchQueries (array of strings, prefill ["hotels in Paris"]): destinations, hotel names, or Google Hotels hotel links (https://www.google.com/travel/hotels/entity/...)- checkInDate (string YYYY-MM-DD, optional): first night; empty with an empty checkOutDate = one night starting tomorrow- checkOutDate (string YYYY-MM-DD, optional): departure day, after checkInDate; up to 30 nights- maxItems (integer, default 50): hotels to save in all- adults (integer, default 2, 1 to 8)- currency (string, default "USD"): USD, EUR, GBP, CHF, CAD, AUD, NZD, JPY, CNY, HKD, SGD, INR, AED, BRL, MXN, SEK, NOK, DKK, PLN, CZK, TRY, ZAR, THB, KRW- language (string, default "en"): en, fr, de, es, it, pt, nl, ja, ko, zh-CN, ar, ru, tr, pl- includeDetails (boolean, default true): add address, phone, price breakdown and the offers of every booking site- debugMode (boolean, default false)Output per hotel (34 fields):- id, url, name (string)- hotelClass (integer or null), propertyType (string), description (string), amenities (string[]), checkInTime, checkOutTime (string)- pricePerNight, totalPrice, basePrice, taxesAndFees (number), currency (string), rating (number), reviewsCount (integer), ratingHistogram ({"1".."5": integer})- offers (array of {provider, pricePerNight, totalPrice, currency, url, isOfficial}), offersCount (integer)- address, phone (string), latitude, longitude (number), countryCode (string), checkInDate, checkOutDate (string), nights, adults (integer)- imageUrl (string), images (string[]), website, mapsUrl (string)- searchQuery, scrapedAt (string, RFC 3339)Pay per result. No account or API key needed. Use apify-client for Python or JavaScript.
💻 Integrations
Build a nightly rate shop of your competitors (Python)
from apify_client import ApifyClientimport pandas as pdclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("silentflow/google-hotels-scraper").call(run_input={"searchQueries": ["Hotel Saint Paul Rive Gauche Paris","Hôtel Le Six Paris","Hotel Le Littré Paris",],"checkInDate": "2026-11-06","checkOutDate": "2026-11-08","currency": "EUR",})rows = []for hotel in client.dataset(run["defaultDatasetId"]).iterate_items():own = next((o for o in hotel["offers"] if o["isOfficial"]), None)for offer in hotel["offers"]:rows.append({"hotel": hotel["name"],"seller": offer["provider"],"per_night": offer["pricePerNight"],"vs_official": (offer["pricePerNight"] or 0) - (own["pricePerNight"] if own else 0),})report = pd.DataFrame(rows).sort_values(["hotel", "per_night"])undercuts = report[report["vs_official"] < 0]print(undercuts) # sellers cheaper than the hotel's own site
Feed a destination price index into a dashboard (JavaScript)
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });const run = await client.actor('silentflow/google-hotels-scraper').call({searchQueries: ['hotels in Lisbon'],checkInDate: '2026-11-20',checkOutDate: '2026-11-22',currency: 'EUR',maxItems: 200,includeDetails: false,});const { items } = await client.dataset(run.defaultDatasetId).listItems();const byClass = {};for (const h of items) {if (!h.pricePerNight || !h.hotelClass) continue;(byClass[h.hotelClass] ??= []).push(h.pricePerNight);}for (const [stars, prices] of Object.entries(byClass)) {const median = prices.sort((a, b) => a - b)[Math.floor(prices.length / 2)];console.log(`${stars} stars: median ${median} EUR per night over ${prices.length} hotels`);}
Export a city to CSV for a spreadsheet (Apify CLI)
apify call silentflow/google-hotels-scraper --input '{"searchQueries": ["hotels in Rome"], "checkInDate": "2026-10-03", "checkOutDate": "2026-10-05", "currency": "EUR", "maxItems": 100}'# then download the dataset of the run as CSVcurl "https://api.apify.com/v2/datasets/DATASET_ID/items?format=csv&token=YOUR_TOKEN" -o rome-hotels.csv
📈 Performance
Measured on 20 September 2026, without any option beyond the ones shown.
| Run | Rows | Duration |
|---|---|---|
hotels in Paris, details on (default form) | 50 hotels, 49 with offers | 1 min 25 s |
resorts in Bali, 3 adults, 3 nights in AUD, details on | 30 hotels | 55 s |
A hotel link, a hotel name and hôtels à Lyon in French, details off | 14 hotels | 5 s |
A search page returns 20 hotels in about two seconds. The details add about eight seconds per page of 20, so 50 hotels with their offers take about half a minute. A destination yields several hundred hotels before Google stops paging; there is no fixed limit per run beyond maxItems.
💾 Data export
The dataset is available from the run page in JSON, CSV, Excel, XML, HTML and RSS, or through the API:
https://api.apify.com/v2/datasets/DATASET_ID/items?format=csv&token=YOUR_TOKEN
Nested fields (offers, ratingHistogram, images) are flattened as offers/0/provider columns in CSV and Excel.
💡 Tips for best results
- Name the city in the query.
hotels in Lyonreads as a destination. A bareLyoncan be read as a hotel name and return one property. - Set the dates you will actually sell. Prices and offers change with the stay and the party size; a run without dates prices tomorrow night, which is a last-minute price.
- Use the offers for parity, the lead price for ranking.
pricePerNightis the lowest rate Google found;offersholds every seller, with the hotel's own site flagged. - Turn the details off for a quick market scan. Class, rating, reviews and lead price are on the search page; 200 hotels take under a minute.
- Paste
urlvalues back in to track the same hotels every day. A hotel link returns exactly that hotel, whatever Google ranks around it.
❓ FAQ
What does the scraper extract exactly? The hotels Google Hotels lists for a destination, a hotel name or a hotel link, priced for the stay you set: name, star class, rating and review histogram, price per night, total with taxes and fees, the offers of every booking site Google compares, address, phone, coordinates, amenities, photos, description and links.
Do I need a Google account or an API key? No. Everything comes from the public Google Hotels pages. No login, no API key, nothing to paste from your browser.
Are the prices the ones a traveler would see? Yes, for the dates, party size and currency of the run. The lead price is the lowest rate Google shows on the hotel card; each offer is the rate of one seller for that stay. Prices move during the day, so re-run before you act on them.
How many hotels can one search return?
Google pages 20 hotels at a time and keeps paging for several hundred hotels on a large destination. Set maxItems to what you need; a search stops earlier when Google has nothing new.
Why does a hotel have no offers, or only one? Google lists the sellers that have availability for the stay. A sold-out night, a small party or a distant date can leave one seller or none. The row is still delivered with everything else.
Can I search in another language or currency?
Yes: language sets the descriptions and the hotel pages, currency converts every price. Amenity names are always in English.
Can I scrape several destinations in one run?
Yes. Each entry of searchQueries is searched in turn, in the same stay; maxItems caps the total. A hotel found by two searches is delivered once.
Which fields can be missing?
hotelClass is null for hostels and unclassified properties. address, phone, the price breakdown and offers need the details on for most hotels. amenities is empty when Google highlights none of the ones it names. Nothing is ever an empty string.
Are the links permanent?
url and mapsUrl are permanent. Offer links open the seller's page for the run's dates and stay valid for days. Image links stay valid for months.
How fresh is the data? Live: every run reads Google Hotels at that moment, nothing is cached. Schedule the run to track prices over time.
Does it handle children? Prices are computed for the adults you set, in one room. Add children's ages later if you need them; tell us in a feature request.
⚖️ Legal
This Actor extracts publicly available data from Google Hotels. It does not bypass any login, paywall or CAPTCHA. Users are responsible for complying with Google's terms of service and applicable data protection laws (GDPR, CCPA and PIPL where relevant). The output describes businesses, not private individuals; hotel phone numbers and addresses are the public contact details of those businesses. Prices are informational and change often; verify them before a booking or a regulated use.
🔗 Related scrapers
- Booking.com Scraper: hotels, prices and reviews from Booking.com.
- Airbnb Pro Host Scraper: listings and hosts from Airbnb.
- More travel and local data actors: silentflow on Apify.
📬 Support
Need something this scraper doesn't do yet? We ship features fast.
- Feature requests go straight to our backlog
- Enterprise needs? We do custom integrations and high-volume plans
- Pricing questions? Check the Monetization tab on the actor page
Response time: usually under 24 hours.
Check out our other scrapers: silentflow on Apify