Google Hotels Scraper
Pricing
from $2.99 / 1,000 hotels
Google Hotels Scraper
Google Hotels API for hotel prices by city and dates: nightly rate, stay total, star class, rating, reviews and deals, checked against the dates you asked for.
Pricing
from $2.99 / 1,000 hotels
Rating
0.0
(0)
Developer
Final Dynamics
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
A Google Hotels API for hotel prices. Search cities, or name the hotels you track by ID, Google Hotels or Google Maps link, or plain name. You get nightly rates and stay totals for your dates, currency and guests, plus booking sites' prices, room rates, guest reviews and a day-by-day price calendar when you ask for them.
Use it to check competitor rates every morning, fill a price comparison page, or see when a market gets cheap. Each hotel row carries the dates, currency and guests Google actually quoted, and the actor checks them against what you asked for. If Google answers for a different stay, that page is discarded. You keep the verified rows from earlier pages and get a note saying why the search stopped.
What you get
A real run for Miami, December 5 to 7, 2026: 4 stars and up, free cancellation, lowest price first.
| Hotel | Class | Rating | Reviews | Per night | Stay total | Deal |
|---|---|---|---|---|---|---|
| Four Points by Sheraton Coral Gables | 4 | 4.2 | 871 | $219.59 | $439 | |
| Pullman Miami Airport | 4 | 4.0 | 4,539 | $232.00 | $464 | 20% less than usual |
| Sheraton Miami Airport Hotel & Executive M... | 4 | 3.9 | 5,230 | $234.89 | $470 | |
| DoubleTree by Hilton Miami North I-95 | 4 | 3.7 | 1,036 | $249.11 | $498 | 39% less than usual |
| Beach Park Hotel | 4 | 3.2 | 708 | $250.84 | $502 |
Every row in that run had free cancellation confirmed in Google's quote. Vacation rentals come back
too, marked in propertyType, unless you leave them out.
Quick start
- Open the Miami hotel prices, two weeks out example on this page and click Try for free.
- Change the location to your city, or add several. To follow set hotels, fill Hotel names or Specific hotel IDs instead.
- Click Start. Larger searches need more requests. If you clear every location and hotel, the run does a sample search for Miami and says so in its status.
- Open the Output tab to see the table, then click Export for CSV, Excel or JSON.
- To work in Google Sheets, open the CSV there with File > Import.
Input
{"locations": ["Paris"],"checkInDate": "2026-12-05","checkOutDate": "2026-12-07","adults": 3,"children": 2,"childrenAges": [5, 9],"currency": "EUR","maxResults": 20,"includeBookingSources": true,"includeRoomRates": true}
What to search
- Locations: up to 100 cities or areas, such as
MiamiorMoab, Utah. Add the state or country when a name is common. If Google can't find a place, that search returns no rows and a warning, so you never get another town's hotels by mistake. - Specific hotels: put Google IDs from the
hotelIdoutput inhotelIds, paste property links intohotelUrls, or type names intohotelNames, such asHotel Plaza Athenee Paris. Google's own search picks the hotel for a name, and the row shows the name it matched. Each hotel returns one row for your stay. A hotel returned earlier in the run isn't charged twice. Up to 100 hotels. - Google Maps links:
hotelUrlsalso takes a hotel's Google Maps link, a Maps share link such ashttps://maps.app.goo.gl/..., or a Maps place ID that starts withChIJ. A share link costs one extra request to see where it points. A Maps link without a place in it, such as a map view, is refused before the run starts. A place that isn't a hotel, like a restaurant, returns an error for that line and isn't charged. - Maximum hotels per location: 1 to 1,000. The default is 20, which reads one page. Higher values read more pages until Google runs out. In a Paris test Google stopped after position 722, which held 552 different properties once repeats were removed.
- No target: a run with no location and no hotel, such as Apify's own test with an empty input,
searches Miami with your other settings. The log, status and
OUTPUTsay it was a sample.
Dates and guests
- Check-in and check-out:
YYYY-MM-DD. Leave both empty and the actor searches a 2-night stay starting 14 days from today, which suits a daily schedule. Stays can be up to 30 nights. - Price calendar: set
priceWindowEndand the actor reprices the same length of stay for every check-in day up to that date, at most 60 days after check-in. Each day is its own row with its own dates, andcalendarDaysays how many days after your check-in it starts. It works for locations and specific hotels. Filters apply to the first stay only. - Guests:
adultsfrom 1 to 12,childrenwith one age from 0 to 17 inchildrenAgesfor each child. This actor caps the group at 12 guests. - Currency: a three-letter code Google accepts. USD is the default. EUR, GBP and JPY have been checked live. Every quote must confirm your currency, and the actor never converts prices.
Filters and sorting
Google applies all of these, and each results page must confirm them before any row is saved. Amenities, hotel types and the rental filters work on location searches. Specific hotels come back as you asked for them, with price, rating, stars and cancellation still checked.
- Sort: Google's order, or Google's own sort by lowest price, highest rating or most reviews.
- Price:
minPriceandmaxPriceper night in your currency. Zero means no limit. - Guest rating:
minRatingon Google's 0 to 5 scale. Every row is checked against your exact number. At 3.5, 4.0 or 4.5 and up Google filters too, so more pages hold matches. - Stars:
hotelClassfor a minimum, orhotelClassesfor exact classes such as 3 and 4. - Hotel amenities: the 19 options in Google's filter panel, such as
freeWifi,pool,freeBreakfast,petFriendly,evChargerorallInclusive. A hotel must have all you pick.airportShuttleworks too, but Google's panel doesn't have it, so the actor checks it itself: it keeps hotels whose amenity list names an airport shuttle. Pages can then hold fewer hotels. - Hotel types:
beachHotels,hostels,inns,motels,resorts,spaHotels,bedAndBreakfasts, and for Japanminshuku,japaneseBusinessHotelsandryokan. These are the types this actor checked against live results, by name or by each result's Google Maps category. Boutique hotels, apartment hotels and "other" aren't offered: Google didn't apply the first two in a Paris test, and "other" returned ordinary hotels. - Free cancellation: asks Google for cancellable rates. Booking sites without free cancellation are left out, and each shows its deadline when Google gives one.
- Vacation rentals:
includemixes them with hotels as Google does,onlyasks Google for rentals, andexcludeleaves them out. Withonlyyou can also setrentalTypes(apartments, houses, villas, cottages, cabins, chalets, gites, holidayVillages, houseboats, other),rentalAmenities(such askitchenorhotTub), and minimumbedroomsandbathrooms. With a room minimum, a rental that doesn't state its count is left out. Counts are read from English labels, so room minimums needlanguageCodeen. Bungalows aren't offered: Google dropped that filter in Gatlinburg and Tulum. excludeis the actor's own check on each row. Google mixes rentals into later pages, and none of the request settings tried in a test turned that off. So a page can hold fewer than 20 hotels.
Extra data
- Booking sites: set
includeBookingSourcestotrue. Each row lists the booking sites Google shows for your stay that come with a rate and a booking link. You get the site's logo, whether it's sponsored or the hotel's own site, nightly rate, stay total, both with taxes, the guests the price covers, free cancellation and the booking link. A site without a rate or link is left out with a warning, and so is one without free cancellation when you ask for it. A location result needs one extra request per hotel. - Hotel details: set
includeHotelDetailstotrueto look up each hotel from a location on its own Google page, as specific hotels are. You get more photos (13 to 28 in tests instead of 9), the neighborhood, the Maps place ID, other review sites' scores and the typical price range. It takes one extra request per hotel and costs nothing extra. Booking sites include it already. - Photos: each row has
photos, up tomaxPhotos(25 by default, 0 to 100). Each photo has its link and, when Google has them, the original image link, size, caption, source and date. The actor reads the photos in the data it already fetches. It doesn't open Google's full gallery, which holds hundreds of photos for a big hotel. - Room rates: set
includeRoomRatestotrueas well. Each booking site then lists its rooms with every rate: room name, photos, prices with and without taxes, breakfast, cancellation deadline and booking link. Google gives rooms for the sites that send them to it. - Reviews: set
includeReviewstotrue. Each hotel row then has areviewslist with up tomaxReviewsreviews, andreviewsExtractedsays how many it holds. Pick the order withreviewsSort(most helpful, newest, highest or lowest score), and narrow to one topic fromreviewsBreakdownwithreviewsTopic, such asService. Reviews come from Google and partner sites such as Tripadvisor. To keep one source, list it inreviewsSources, such asTripadvisor. The actor reads Google's review pages and keeps the matches, reading at most 500 reviews per hotel, because the request behind Google's own source menu wasn't found. - Text summary:
includeMarkdownaddsmarkdownContent, a readable summary of each row and its reviews for search indexes and AI tools.
Market and requests
- Language and country: Google's interface language and search region. The defaults are
enandus. - Device:
desktopormobile. In a live test Google showed a phone offers a desktop didn't get, such as a lower Vio.com rate and a Tripadvisor.com offer. - Request timeout: seconds to wait for each Google response before a retry, 5 to 120.
- Proxies: none. Requests go straight to Google from Apify's servers. If you paste an input from
another actor, its
proxyConfigurationis accepted and ignored, and the log says so.
Output
This is a real row from the Paris run above, 3 adults and 2 children. You get one row like it for each property.
{"position": 3,"location": "Paris","name": "JO&JOE Paris Gentilly","hotelId": "ChkIy5q-tZ-KsLYZGg0vZy8xMWd5MXR3Y2d6EAE","propertyType": "hotel","rating": 4.4,"reviewCount": 5100,"pricePerNight": 117,"priceDisplay": "€117","pricePerNightWithTaxes": 134,"totalPrice": 234,"totalPriceDisplay": "€234","currency": "EUR","checkInDate": "2026-12-05","checkOutDate": "2026-12-07","nights": 2,"adults": 3,"children": 2,"childrenAges": [5, 9],"calendarDay": 0}
Its first booking site, with one of its rooms, shortened:
{"vendorName": "Booking.com","vendorIcon": "https://www.gstatic.com/travel-hotels/branding/icon_184.png","isSponsored": true,"isOfficial": false,"ratePerNight": 117,"ratePerNightDisplay": "€117","ratePerNightWithTaxes": 133.8,"totalRate": 234,"totalRateDisplay": "€234","totalRateWithTaxes": 267.59,"currency": "EUR","numGuests": 5,"coversAllGuests": true,"freeCancellation": false,"freeCancellationUntil": null,"rooms": [{"roomName": "Private Bedroom for 5 people with a bathroom","offers": [{ "ratePerNight": 117, "totalRateWithTaxes": 267.6, "breakfastIncluded": false }]}]}
Rows also include, when Google supplies them: address, neighborhood, phone, website,
coordinates, hotelClassLabel, hotelDescription, check-in and check-out times, readable
amenities, excludedAmenities, images, ratingsBreakdown, reviewsBreakdown,
otherReviewSites (such as Tripadvisor's score), nearbyPlaces, deal, googleHotelsUrl,
googleMapsUrl, placeId, mapsFeatureId and mapsCid. Vacation rentals add essentialInfo,
sleeps, bedrooms, bathrooms and beds. Unknown fields are null and absent lists are empty.
-
locationRatingis Google's hotel location score from 1 to 5.locationRatingshas its four parts:thingsToDo,restaurants,transitandairportAccess. -
mapsCategoryis the property's main Google Maps category, such ashotel,hostelorjapanese_inns, andmapsCategorieslists all of them. Most vacation rentals have none. -
mapsCidopens the place athttps://maps.google.com/?cid=plus this number. -
pricePerNightis Google's exact nightly rate.priceDisplayis the rounded figure Google shows. Prices with taxes are Google's displayed figures, rounded as shown. -
typicalPriceLowandtypicalPriceHighare Google's price insight: the range this hotel usually costs per night for these dates. They come with property lookups, so fill them by using specific hotels, booking sites or room rates. -
A booking site's
numGuestsis the number of guests its price covers, as the site tells Google. Some sites quote for fewer or more guests than you asked for.coversAllGuestsis true when the price covers exactly the adults and children you asked for. -
hotelIdstays the same between runs, so you can join today's prices to yesterday's. -
The actor doesn't follow booking links or make reservations. Google may reset the dates when you open
googleHotelsUrl. The dataset dates are checked separately. -
nearbyPlaceskeeps Google's transportation codes without guessing their meanings.
With reviews on, each row's reviews list holds entries like this one, shortened:
{"source": "Google","reviewerName": "Patriek Dob","rating": 5,"bestRating": 5,"relativeDate": "5 days ago","publishedDateEstimate": "2026-09-20","visited": "Visited in September","visitedMonth": "2026-09","ownerResponse": "Dear Mr Patriek,\n\nThank you for your rating and for visiting us..."}
Each review also has subRatings, the reviewer's aspect scores, each with Google's category number,
rating and bestRating. Google's data doesn't name the categories, so they come as numbers.
publishedDateEstimate subtracts Google's relative date from the scrape time, so "3 weeks ago" is
as precise as a week. Google Hotels sends no exact review date.
Automate it
- Open your saved task, or save one from the example with Save as a new task.
- On the task, click Schedules > Create schedule and pick a time, such as 7:00 every morning.
- Leave the dates empty. Each run then searches two weeks ahead of that day.
- To land the rows in Google Sheets, build an n8n workflow. Start it with an Apify Trigger node on "task run succeeded", add an Apify Get Dataset Items node for that run, then a Google Sheets node that appends the rows.
Each row has a scrapedAt time, so the sheet keeps a dated price history for your market.
Pricing
There's no start fee. You pay for each hotel row saved to your dataset, and that price drops on higher Apify plans. Reviews cost extra, and only when you turn them on.
| You pay for | Free plan | Bronze | Silver | Gold and up | When you pay |
|---|---|---|---|---|---|
| Hotel row | $0.00499 | $0.00432 | $0.00366 | $0.00299 | Apify charges it as the row is saved |
| Review | $0.0005 | $0.0005 | $0.0005 | $0.0005 | After the hotel row holding the review is saved |
On the free plan, a search that returns 18 hotels costs about $0.09. A daily run over 5 cities is about 90 hotels, or $0.45 a day and about $13.50 a month. On Gold it's $0.27 a day. Booking sites, room rates, photos and hotel details are included in the hotel row. Each price-calendar day is one more row: 10 hotels over 7 check-in days is 70 rows, or about $0.35 on the free plan. Twenty reviews for each of those 10 hotels add 200 reviews, or $0.10.
You never pay for a row you don't get. Apify charges a hotel row only when it's saved in your
dataset, so a run that stops early charges only for the rows it saved. Reviews are charged after the
row holding them is saved. If Apify refuses the review charge, you keep those reviews for free. If
Apify does not confirm a charge, the reviews may or may not have been charged. OUTPUT reports free
and uncertain reviews separately. Uncertain charges still count toward your maximum charge.
Set a maximum charge on the run and the actor stops before the next row would go over it. Before it
fetches a hotel's reviews, it checks what's left. If your maximum covers the row but not all its
reviews, it fetches fewer reviews for that hotel, or none, and says so in OUTPUT. So the review
charge never takes you past your maximum.
A hotel is saved and charged once per run, even when several of your locations or pages list it. The price calendar adds its own rows, one per check-in day. If Apify's dataset doesn't answer a save, the actor reads the dataset back before it tries again, so a row is never saved, or charged, twice. If Apify moves your run to another server mid-run, the actor reads back the rows already saved and doesn't save or charge them again, and it doesn't charge their reviews twice.
Good to know
- After every run, the
OUTPUTrecord in the key-value store lists each search with its status, hotel and review counts, and any warning or error.eventscounts hotel rows and reviews against the charge cap, including review charges that did not confirm.reviewsCharged,reviewsFreeandreviewsUncertainseparate the review outcomes.maxChargedUsdis the most this run can have cost, at the Free-plan price. Paid Apify plans pay less; the exact amount is in the run's Apify billing. For a location it also hassearchMetadata: Google's result count, the brands its brand filter lists, and the filter chips it suggests. - If Google refuses a search, the actor waits and retries it at most twice. It never solves or works around a CAPTCHA. After three refused searches in a row, the run stops.
- Every page must match your dates, currency, guests, resolved place and filters. A continuation
with different dates gets one retry with the verified selection. If it still fails, you keep
earlier rows and see a
partialstatus with a warning. - A run can finish Succeeded with no matching rows. Check
OUTPUTfor empty searches and warnings. A failed later search doesn't discard rows from earlier ones. - Requests go out at least two seconds apart, with at most two in flight. So 1,000 requests take at least 33 minutes. Booking sites, hotel details, price calendars and reviews add requests per hotel. The actor sizes its request limit from your input, from 1,000 up to 10,000 requests, including retries and redirects. If your input needs more than that, or more time than the run's timeout allows, the run says so when it starts. It then stops before the limit or the timeout, keeps the rows it has and says why in its status. Raise the run timeout or split the input to get the rest.
- Room counts aren't offered. Google's guest picker has adults and children only. In the one hotel tested, a 2-room request got the same offers and prices as 1 room.
- Eco-certified filtering isn't offered. With Google's own eco-certified switch on, Google returned no certified properties in the four markets tested (Paris, Amsterdam, Miami and Copenhagen, September 2026).
FAQ
Is there an official Google Hotels API?
Google's hotel APIs take in rates from hotels and booking sites. They don't give you the prices Google shows travellers. This actor reads those prices from Google Hotels and returns them as data.
How do I get hotel prices for specific dates?
Set checkInDate and checkOutDate. Every row returns the dates Google quoted. Pages with other
dates are never saved or charged. For many check-in days at once, set priceWindowEnd.
Can I track a fixed list of competitor hotels?
Yes. Put their names in hotelNames once, copy the hotelId values from the first run into
hotelIds, and schedule the task. IDs skip the name lookup and always hit the same property.
Can I track hotel rates over time?
Schedule a saved task to run every day with the dates left empty, and send each run's rows to a
sheet or database. Use hotelId and scrapedAt to line up the same hotel across days.
Why do I get fewer hotels than requested?
The default reads one page. Set maxResults above 20 to continue through more pages. Google may run
out of results or repeat properties. Filters can remove rows from a page. Your charge budget, the
request limit and the run timeout can also stop a run. Check OUTPUT and the status message for
your location's status and warnings.