Google Hotels Scraper & API — Hotel Prices & Rates
Pricing
from $2.00 / 1,000 hotels
Google Hotels Scraper & API — Hotel Prices & Rates
Google Hotels scraper and API for hotel price comparison: prices for your dates, ratings, amenities, deals and price calendars. Full details add every booking site's price (Booking.com, Expedia, the hotel's own site…), room rates and rate parity. Search any city or paste links. No platform fees.
Pricing
from $2.00 / 1,000 hotels
Rating
0.0
(0)
Developer
Aaron Tuttle
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
7 days ago
Last modified
Categories
Share
Google Hotels prices for your dates and guests: $2.50 per 1,000 hotels, from $2 on higher Apify plans, plus a small start fee and no platform fees. Built for hotel price comparison and rate shopping: turn on Full details to get every booking site's price (Booking.com, Expedia, Hotels.com, the hotel's own site and more) and a rate-parity check for $5 per 1,000 hotels (from $4). One hotel's prices on every booking site for 30 check-in dates cost about $0.16.
Search any city, area or landmark, paste Google Hotels links, or list specific hotels by name, link or Google Hotels ID. Every hotel comes with its rating and review breakdown, class, amenities, location and nearby places, deals and cheaper dates, and links to the same view on Google Hotels and Google Maps, for hotels and vacation rentals alike. Get the data as JSON, CSV, Excel or flat spreadsheet rows, or through the API.
Instead of loading pages in a browser, the scraper reads the same data feed the Google Hotels page loads in the background, so runs are fast and cheap: the prefilled example (20 New York hotels) usually finishes in under 20 seconds. People use it for hotel rate shopping, OTA rate-parity monitoring, hotel price tracking, travel price research, and hotel data for apps and AI agents.
What this tool doesn't do
- No individual reviews. You get ratings, review counts, star breakdowns and what guests mention. Review texts, reviewer names and profile photos are never collected.
- No member or signed-in prices. It sees what a signed-out visitor from your chosen country sees.
- No hotels beyond Google's list. A search returns the hotels Google Hotels lists for it (the run summary shows Google's total). For more, add neighborhoods or landmarks as extra destinations.
- No booking. It returns prices and booking links; you book on the site you pick.
Google Hotels scraper: why this one
- Every booking site's price in one charge. With Full details, a hotel with 20 booking sites is one result: each site's price per night and for the stay, with taxes, its free-cancellation deadline and a direct booking link, plus room-by-room rates.
- Rate parity built in. Each hotel with full details says whether its own website matches, beats or loses to the cheapest other booking site, by how much, and how far all the sites' prices spread.
- Price calendars. Check up to 60 consecutive check-in dates in one run to find the cheapest days for a hotel or a whole city.
- Reliable by design. Every throttled request is retried on a fresh session and IP with short backoff. Each page and hotel has a time limit, so runs never hang. If Google keeps blocking the default proxy, the scraper switches to residential proxy automatically, at no extra cost to you.
- Failed searches are free. Searches that fail and searches with no hotels cost nothing. Compute and proxies are included in the price.
- Google's own filters. Price range, hotel class, guest rating, amenities, hotel brands, free cancellation, special offers, eco-certified, and sorting by price, rating or reviews.
- Paste Google Hotels links or IDs. Set up a search or open a hotel on google.com/travel/hotels, copy the link, done. If you don't set dates, the link's own dates are used.
- Spreadsheet-ready. Pick Rows to get one row per hotel and booking site, with the same columns everywhere, for CSV, Excel, Google Sheets and BI tools.
What Google Hotels data can you scrape?
| Data | Details |
|---|---|
| Hotel | Name, hotel class, guest rating, review count, rating breakdown (5★ to 1★), what guests mention (e.g. Location: 111 positive, 5 negative), Google's review summary, ratings on other sites |
| Price | Price per night as Google shows it, with taxes, total for the stay, taxes and fees, deals (20% less than usual), cheaper dates nearby |
| Booking sites | Every site's price per night and total, official-site flag, free cancellation and its deadline, direct booking link, logo |
| Rate parity | The hotel's own price, the cheapest other site and its price, the difference, the spread across all sites, and a verdict: parity, OTA cheaper or direct cheaper |
| Rooms | Room names with each site's rate and cancellation terms |
| Location | Address, latitude/longitude, neighborhood, area hierarchy, Google's location scores (overall, things to do, restaurants, transit, airport access), nearby attractions, transit, airports and restaurants with walking, transit and driving times |
| Property | Amenities, description, check-in and check-out times, photos, phone, website |
| Vacation rentals | Sleeps, bedrooms, bathrooms, essentials (Entire apartment, 2 beds), provider links |
| IDs and links | Google Hotels ID, Knowledge Graph ID, Google Place ID, Google Hotels link, Google Maps link |
Search results already include price, rating, class, location, amenities and photos. Full details adds every booking site, rate parity, room rates, address, phone, nearby places and the full review breakdown.
Rate parity (with Full details)
| Field | Meaning |
|---|---|
parityStatus | parity when the hotel's own site and the cheapest other site are within 1% (or one currency unit) of each other, otherwise OTA cheaper or direct cheaper |
officialSitePrice | Price per night on the hotel's own website |
cheapestOtaName, cheapestOtaPrice | The cheapest other booking site (online travel agency) and its price per night |
directUndercutBy | officialSitePrice minus cheapestOtaPrice: positive when another site undercuts the hotel's own site, negative when the hotel's own site is cheaper |
priceSpreadPercent | How far the highest booking-site price is above the lowest, in percent |
Prices are per night as Google shows them for your country. Without Full details, or when the hotel's own site or the other sites show no price, these fields are null. In the Rows format they repeat on each of the hotel's rows.
How much does it cost to scrape Google Hotels?
You pay per hotel, plus a $0.005 start fee per run. Compute and proxies are included; there are no platform-usage fees. The price per hotel depends on your Apify plan:
| Free | Starter | Scale | Business | |
|---|---|---|---|---|
| Hotel (from a search) | $0.003 | $0.0025 | $0.0022 | $0.002 |
| Hotel with all booking sites (Full details) | $0.006 | $0.005 | $0.0045 | $0.004 |
| Prefilled example: 20 hotels in New York | $0.065 | $0.055 | $0.049 | $0.045 |
| 20 hotels in each of 10 cities | $0.605 | $0.505 | $0.445 | $0.405 |
| 1,000 hotels | $3.01 | $2.51 | $2.21 | $2.01 |
| 50 hotels with all booking sites | $0.305 | $0.255 | $0.23 | $0.205 |
| One hotel on all booking sites, 30 check-in dates | $0.185 | $0.155 | $0.14 | $0.125 |
The examples include the start fee. One result per hotel carries every booking site's price, so a hotel with 20 booking sites is still one charge. Apify's $5 free plan covers about 1,600 hotels, or about 800 with all booking sites.
Searches that fail after all retries, searches where Google finds no hotels, and hotel names Google doesn't know are not charged. If the full details of a hotel from a search can't be loaded, you get its search listing instead, charged as a Hotel. To cap any run, use Apify's Maximum cost per run setting. The scraper stops cleanly at the limit.
How to scrape Google Hotels
- Enter your destinations, one per line, as you'd type them on Google Hotels (
Austin, TX,hotels near Times Square,Lake Tahoe cabins). You can also paste Google Hotels links, or list specific hotels by name, link or Google Hotels ID. - Set the check-in date (e.g.
2026-11-20, or14 daysfrom the run), the nights and the guests. - Optionally set currency, country, filters and sort order.
- Turn on Full details if you need every booking site's price, rate parity and room rates.
- Click Start, then download your results as JSON, CSV or Excel, or get them through the API.
Already have Google Hotels IDs (they start with Ch, e.g. ChYInb3Dn7D48odRGgovbS8wODBteGw4EAE)? Paste them into Specific hotels: no name lookup needed. Every result's hotelId works there too.
Input examples
Hotels in two cities for a 2-night stay:
{ "searchQueries": ["Austin, TX", "Paris"], "checkInDate": "2026-11-20", "nights": 2, "adults": 2 }
Rate shopping: a hotel and its competitors on every booking site, as spreadsheet rows (specific hotels always come with full details):
{ "hotels": ["The Plaza New York", "The St. Regis New York", "Park Hyatt New York"], "checkInDate": "14 days", "outputFormat": "rows" }
The cheapest dates for one hotel over the next month, with every booking site's price:
{ "hotels": ["The Plaza New York"], "checkInDate": "7 days", "numberOfCheckInDates": 30 }
Filtered and sorted, as spreadsheet rows:
{ "searchQueries": ["Miami Beach"], "checkInDate": "30 days", "sortBy": "lowestPrice", "minRating": "4", "hotelClass": ["4", "5"], "maxPrice": 400, "freeCancellation": true, "outputFormat": "rows" }
Vacation rentals for a family:
{ "searchQueries": ["Lake Tahoe"], "propertyType": "vacationRentals", "checkInDate": "30 days", "nights": 3, "adults": 4, "childrenAges": ["8", "12"] }
Output example (shortened)
{"type": "hotel","searchQuery": "New York","position": 1,"name": "Mandarin Oriental, New York","propertyType": "hotel","hotelClass": 5,"rating": 4.6,"reviewCount": 1841,"ratingBreakdown": [{ "stars": 5, "percent": 79, "count": 1423 }],"reviewTopics": [{ "topic": "Spa", "mentions": 33, "positive": 28, "negative": 4 }],"checkInDate": "2026-11-20","checkOutDate": "2026-11-23","nights": 3,"adults": 2,"children": 0,"currency": "USD","pricePerNight": 816,"pricePerNightWithTaxes": 940,"priceIncludesTaxes": false,"totalPriceWithTaxes": 2818.76,"taxes": 371.47,"cheapestBookingSite": "Evendo","parityStatus": "OTA cheaper","officialSitePrice": 995,"cheapestOtaPrice": 816,"cheapestOtaName": "Evendo","directUndercutBy": 179,"priceSpreadPercent": 21.9,"bookingSites": [{ "name": "Mandarinoriental.com", "isOfficialSite": true, "pricePerNight": 995, "pricePerNightWithTaxes": 1146, "totalPriceWithTaxes": 3439, "freeCancellation": true, "freeCancellationUntil": "2026-11-19", "bookingUrl": "https://..." },{ "name": "Evendo", "isOfficialSite": false, "pricePerNight": 816, "pricePerNightWithTaxes": 940, "totalPriceWithTaxes": 2819, "freeCancellation": true, "freeCancellationUntil": "2026-11-19", "bookingUrl": "https://..." }],"roomOffers": [{ "bookingSite": "Hotels.com", "roomName": "Room, 1 King Bed (Hudson View)", "pricePerNight": 996, "freeCancellation": true }],"latitude": 40.7688844,"longitude": -73.983044,"address": "80 Columbus Cir, New York, NY 10023, United States","neighborhood": "Midtown Manhattan","locationScores": { "overall": 4.4, "thingsToDo": 4.8, "restaurants": 4.7, "transit": 4.5, "airportAccess": 4.1 },"checkInTime": "3:00 PM","checkOutTime": "12:00 PM","amenities": ["Indoor pool", "Fitness center", "Restaurant", "Bar", "Free Wi-Fi", "Pet-friendly"],"nearbyPlaces": [{ "name": "Central Park", "category": "attraction", "travelTimes": { "walk": "4 min" } }],"hotelId": "ChYInb3Dn7D48odRGgovbS8wODBteGw4EAE","googleHotelsUrl": "https://www.google.com/travel/hotels/entity/ChYInb3Dn7D48odRGgovbS8wODBteGw4EAE?hl=en-US&gl=us&ts=...","googleMapsUrl": "https://www.google.com/maps?cid=5841111280168001181","hasAllPrices": true,"warnings": []}
Searches that fail, or find nothing, appear as "type": "error" items with an error message (never charged).
Rows format returns rows with recordType set to hotel_booking_site (one per hotel and booking site), hotel (a hotel without booking-site prices) or error, and the same columns on every row, rate parity included.
The dataset also has ready-made table views: Overview, Prices, Hotel details and Rows, and every field is described in the dataset schema. The run's key-value store has an OUTPUT record with a summary: hotels returned, failures, Google's total result count per search, and retries.
Google Hotels API: Python, JavaScript, Zapier, Make and AI agents (MCP)
JavaScript:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'MY_APIFY_TOKEN' });const run = await client.actor('aaronoptimus/google-hotels-scraper').call({ searchQueries: ['Austin, TX'], checkInDate: '14 days' });const { items } = await client.dataset(run.defaultDatasetId).listItems();
Python:
from apify_client import ApifyClientclient = ApifyClient("MY_APIFY_TOKEN")run = client.actor("aaronoptimus/google-hotels-scraper").call(run_input={"searchQueries": ["Austin, TX"], "checkInDate": "14 days"})items = client.dataset(run["defaultDatasetId"]).list_items().items
AI agents (MCP): add https://mcp.apify.com?tools=aaronoptimus/google-hotels-scraper to Claude, Cursor or any MCP client. In Claude Code: claude mcp add --transport http google-hotels "https://mcp.apify.com?tools=aaronoptimus/google-hotels-scraper".
You can also schedule runs (for example a daily price check) and send the results to Google Sheets, Slack, Zapier, Make or webhooks with Apify integrations.
Tips
- Prices depend on dates, guests, currency and country, just like on Google. Set them the way your travelers would, including each child's age (0 to 17). Without a check-in date, Google uses its own default dates.
- Specific hotels by name: the scraper picks the Google Hotels result whose name matches yours. If Google doesn't know the name, you get an error for it instead of a random hotel, and it isn't charged. A hotel's Google Hotels link or ID always finds the exact hotel.
- Taxes: in some countries Google shows prices before taxes, elsewhere with taxes. In the US, for example, the price includes fees but not taxes.
pricePerNightis the price as Google shows it for your country,priceIncludesTaxessays which it is, andpricePerNightWithTaxesandtotalPriceWithTaxesalways include taxes and fees. - Hotels and vacation rentals: like on Google, a hotel search can include a few vacation rentals.
propertyType(hotelorvacation rental) tells them apart. Set Property type to Vacation rentals to search rentals only. - More hotels per destination: Google shows about 20 hotels per page. Raise Max hotels per destination to get more pages, up to the number Google lists for that search (shown in the run summary).
- Price calendars: combine Specific hotels with Price calendar: number of check-in dates to track one hotel day by day. Schedule the run daily to watch prices change.
- Full details only when you need them. Each hotel's details take one more request, so leave it off for quick price lists.
- Big runs: raise Parallel sessions for speed. If the log shows many retries, add a small Delay between requests.
FAQ
Can I track one hotel's prices across many dates? Yes. Put the hotel (name, Google Hotels link or ID) in Specific hotels and set Price calendar: number of check-in dates (up to 60). Specific hotels always come with every booking site's price, so 30 dates cost about $0.16 on the Starter plan.
How do I monitor hotel prices every day? Save the input as a task, use a relative check-in such as 30 days, and add a daily schedule. Each run prices the same stay length from that day.
How do I check rate parity for my hotel? Put your hotel, and a few competitors if you like, in Specific hotels. Each result's parityStatus says whether the hotel's own website matches the cheapest other booking site, and directUndercutBy by how much. Schedule it daily to catch undercutting early.
Why do some prices differ from what I see on Google? Hotel prices change by the minute, and Google adapts them to your country, currency and whether you're signed in (some sites show member-only rates). The scraper sees the prices a signed-out visitor from your chosen country would see: Google picks booking sites and the tax display by where a visitor is, so the scraper's Apify Proxy IPs are in that country. Now and then Google places one of those IPs in another country. The scraper notices (from the booking links and the price format) and asks again from another IP; if Google keeps doing it, those hotels say so in warnings.
Why do some hotels have no price? Google lists them, but no booking site has rates for those dates (sold out, or not yet published). They're returned like any other hotel (and count as a result), with pricePerNight: null and a note in warnings.
Why does a search return no hotels when Google Hotels shows some? When nothing matches your destination or filters, Google says "0 results" and fills the page with other hotels as suggestions. The scraper doesn't return those (or charge for them); the search is listed as having no hotels. Loosen the filters or check the spelling.
Do I get individual reviews? No. You get the rating, review count, star breakdown, what guests mention, Google's review summary and ratings on other sites. Individual reviews, reviewer names and profile photos are never collected.
Is there an official Google Hotels API? Google's hotel APIs are for hotels and booking partners that send prices to Google, not for reading Google Hotels results. This scraper reads the same public data the Google Hotels website shows.
What happens if Google blocks a request? The scraper retries on a fresh session and IP, and switches to residential proxy if needed, at no extra cost to you. If a search still fails within its time limit, it's listed with an error and not charged. If the details of a hotel from a search fail, you still get its search listing, at the lower price. Anything that fails completely is listed with an error and not charged.
Is it legal? The scraper only collects publicly available information that Google Hotels shows to any visitor. It doesn't log in, solve CAPTCHAs or collect personal data. You're responsible for using the data in line with Google's terms and your local laws.
Related tools
- Google Flights Scraper: fares, booking links and cheapest-date calendars for the same trip.
- Google Trends Scraper: when interest in a destination peaks through the year.
Support
Found a problem or need a field? Open an issue on the Issues tab. If the Actor saves you time, a short review helps others find it. See the Changelog for updates.
This Actor is an independent tool and is not affiliated with, endorsed by or sponsored by Google.