Google Hotels Scraper & API - Google Travel Hotel Prices, Deals
Pricing
from $0.15 / 1,000 hotel results
Google Hotels Scraper & API - Google Travel Hotel Prices, Deals
Google Hotels scraper and API (Google Travel): enter a city or "hotels near" search plus dates; get one row per hotel with nightly and total price incl. taxes, star class, rating, reviews, amenities, coordinates and deal badges. $0.15 per 1,000 hotels, against $1.00 and $4.99 for the two most-used.
Pricing
from $0.15 / 1,000 hotel results
Rating
0.0
(0)
Developer
Giovanni Rich
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
11 hours ago
Last modified
Categories
Share
Google Hotels scraper and unofficial Google Hotels API: enter a city or "hotels near ..." search plus your dates, and get every property's nightly price, total stay price with taxes, rating, review count, star class, amenities, coordinates and deal badges as clean JSON, CSV or Excel. Use it for hotel price monitoring, hotel rate comparison and rate-parity checks: it reads the data Google already embeds in the page over plain HTTP, with no headless browser, so runs finish in seconds and use very little compute. $0.15 per 1,000 hotels, against $1.00 and $4.99 for the two most-used Google Hotels scrapers (read 5 Nov 2026).
What you get
- Prices: nightly price, nightly price with taxes, total for the whole stay, taxes and fees, currency, and Google's deal badge (e.g. "DEAL 24% less than usual").
- Quality: Google rating (1-5), review count, a 1-to-5-star review breakdown, and hotel class (2-star, 3-star, ...).
- Location: latitude and longitude, nearby places (airport, transit, attractions, restaurants) with travel times, and optionally the full street address and phone number.
- Property info: amenities (Free Wi-Fi, Pool, Free breakfast, ...), a short description, check-in and check-out times, official website, a thumbnail plus up to 10 photos.
- IDs and links: Google Hotels URL, Google Maps URL, Google entity token and Maps feature ID, to join with other datasets or track the same hotel over time.
- Pagination: the scraper pages through the results until it reaches your
maxResults. Duplicates across pages are removed automatically.
Sample output
Real rows from a test run: "hotels in Charlotte", 3 nights, 15-18 Oct 2026, 2 adults, USD.
| name | pricePerNight | totalPrice | rating | reviewCount | hotelClass | deal |
|---|---|---|---|---|---|---|
| Sonesta Select Charlotte University Research Park | 75 | 263 | 3.9 | 915 | 3 | DEAL 19% less than usual |
| Sleep Inn Charlotte University Place | 82 | 283 | 3.7 | 955 | 4 | DEAL 15% less than usual |
| Country Inn & Suites by Radisson, Charlotte University Place, NC | 93 | 323 | 4 | 1473 | 4 | - |
Use cases
- Hotel price monitoring and rate-parity checks for a city or a list of competitor hotels
- Daily price tracking: schedule the same searches and compare by
entityTokenover time - Travel apps, comparison sites, trip planners and AI travel agents
- Market research: supply, star mix and price bands by neighbourhood
- Lead lists of hotels, with website and phone (turn on
includeDetails)
Pricing
$0.15 per 1,000 hotels (pay per result; failed requests and duplicates are never charged), plus a $0.00005 start fee per run. Platform usage and proxies are included. Address, phone, website and photos (includeDetails) cost the same per hotel.
| You scrape | You pay |
|---|---|
| 20 hotels (the prefilled input) | about $0.003 |
| 100 hotels | $0.015 |
| 1,000 hotels | $0.15 |
| 10,000 hotels | $1.50 |
| 100,000 hotels | $15.00 |
The Apify free plan's $5 monthly credit covers about 33,000 hotels. The prefilled input ("hotels in Charlotte" and "hotels in Paris", 10 each) returns 20 hotels in about 7 seconds.
How that compares with the other Google Hotels scrapers on the Store (Free-plan prices per 1,000 results, read 5 Nov 2026):
| Actor | 30-day users | Price per 1,000 hotels |
|---|---|---|
| zerobreak / Google Hotels Scraper | 534 | $4.99 |
| vittuhy / Google Travel Hotel Prices | 533 | $1.00 + $0.005 per run |
| kestrel / Google Hotels Prices Scraper | 128 | $4.00 + $2.00 per 1,000 offers |
| johnvc / Google Hotels Search Scraper | 66 | $0.01 + $0.02 per page + $0.02 setup (about $1.00 at 20 hotels per page) |
| factden / Google Hotels Scraper | 48 | $4.00 (+ $5.00 per 1,000 price lists) |
| lergassy / Google Hotels Scraper | 23 | $3.00 ($8.00 with details) |
| kaix / Google Hotels & Vacation Scraper | 18 | $0.08 + $0.00005 per run |
| martin.forejt / Google Hotels Scraper | 6 | $0.10 + $0.00005 per run |
| danthedataman / Google Hotels Stay Ledger | 1 | $0.09 + $0.00005 per run |
| topapi / Google Hotels Scraper | 2 | $0.095 (+ $1.00 per 1,000 with booking-site prices) |
| thescrappa / Google Hotels Search Scraper | 0 | $0.20 + $0.00005 per run |
| nice_dev / Google Hotels Scraper | 1 | $0.072 + $0.01 per run (+ $2.79 per 1,000 with details) |
| azzouzana / Google Hotels Scraper (guest reviews, not hotel rows) | 3 | $0.90 per review + $0.005 per run |
| cheapapi / Google Hotels Scraper | 2 | $0.45 + $0.003 per search |
| cozybit / Google Hotels Scraper | 1 | $0.01, stated as a trial until 30 Nov 2026 |
| gravelly_caladium and trap_check / Google Hotels | 1 each | free today |
| This actor | $0.15 + $0.00005 per run |
So it costs under a sixth of vittuhy's price and about a thirtieth of zerobreak's. It is not the cheapest: gravelly_caladium and trap_check are free today, cozybit charges $0.01 as a trial, and nice_dev, kaix, danthedataman, topapi and martin.forejt charge $0.07-$0.10 (1-18 users each). This one is for you if you want the full tax-inclusive price breakdown, the 1-to-5-star review split and join-ready IDs in every row.
Why this one
- A fraction of the price of the two most-used Google Hotels scrapers: $0.15 per 1,000 hotels, against $1.00 plus a start fee and $4.99.
- The full price picture in one row: nightly price, nightly price with taxes, total stay price, taxes and fees, and Google's deal badge, with no separate per-offer charge.
- Review quality, not just a score: rating, review count and the 1-to-5-star breakdown, plus hotel class.
- Join-ready IDs:
entityTokenand the Maps feature ID stay the same across runs, so daily price tracking is a simple join. - Light: plain HTTP, no browser, so a 50-hotel query usually finishes in well under a minute and big schedules stay cheap.
- Address, phone, website and photos when you turn on
includeDetails, at the same price per hotel.
FAQ
Is there an official Google Hotels API? Not for reading search results. Google's Hotel Prices / Travel Partner APIs are for hotels and booking sites that send their own rates to Google; there's no public API that returns Google Hotels search results, prices and ratings. This actor fills that gap: you call it like an API (see "API example" below) and get JSON back.
What does a typical run cost? $0.15 per 1,000 hotels plus $0.00005 per run. The prefilled 20-hotel run costs about $0.003; tracking 5 cities x 100 hotels every day is about $0.08 a day, or about $2.30 a month. A one-off sweep of 10 cities x 200 hotels is $0.30.
Is it legal to scrape Google Hotels? This actor collects only publicly available data about businesses (hotels), not personal data. You're responsible for using it in line with Google's terms of service and privacy laws such as GDPR. This is not legal advice: if you're unsure, check with a lawyer.
Does it need a login, cookies, a browser or a Google API key? No. It makes plain HTTPS requests and reads the structured data Google embeds in the page. That's why it's fast and cheap to run.
How fast is it and how many hotels can I get?
A 50-hotel query usually finishes in well under a minute. Google serves about 150-250 unique hotels per query; to cover a big city in full, split it into areas ("hotels in Shinjuku", "hotels in Shibuya"). If a query returns fewer than maxResults, Google ran out of new hotels; the RUN_SUMMARY record shows the stop reason. To get a single hotel, use its name as the query with maxResults: 1.
Can I schedule it or call it from my code?
Yes. Use an Apify Schedule to run the same searches daily, or start runs through the Apify API, the JavaScript/Python clients, Make, Zapier, n8n or the Apify MCP server. For different dates, run once per date range; entityToken stays the same across runs so you can join the results.
Do I need proxies? How does it avoid blocks? Apify Proxy (datacenter) is on by default, with realistic Chrome desktop headers and a session pool. When Google blocks a request (403/429, a captcha page, or a page with no result data), that session is retired and the request is retried on a fresh IP, up to 6 retries by default. If the log shows repeated "Blocked by Google" retries, switch the proxy group to RESIDENTIAL.
How to use
- Enter one or more searches in Search queries (e.g.
hotels in Paris,hotels near Times Square) and, optionally, check-in / check-out dates, guests and currency. - Click Start. A 50-hotel query usually finishes in well under a minute.
- Download the results as JSON, CSV, Excel or HTML from the Output tab, or call the actor through the Apify API and pull the dataset from your own code.
Input example
| Field | Default | Description |
|---|---|---|
queries | - | What you'd type into Google Hotels: "hotels in Paris", "hotels near Times Square", "boutique hotels in Lisbon" |
checkIn / checkOut | Google's default | YYYY-MM-DD. If you leave checkOut empty, the stay is one night. Stays can be up to 30 nights. |
adults | 2 | Guests (occupancy changes prices) |
currency | USD | Any 3-letter ISO code: EUR, GBP, JPY, ... |
maxResults | 50 | Unique properties per query (0 = as many as Google returns) |
includeVacationRentals | false | Include the apartments and houses Google mixes into hotel results |
includeDetails | false | Adds the street address and phone number. Costs one extra request per hotel. |
language / country | en / us | Google hl / gl parameters |
proxyConfiguration | Apify Proxy | Switch to RESIDENTIAL if you see blocks |
Example:
{"queries": ["hotels in Charlotte", "hotels in Paris", "hotels in Tokyo"],"checkIn": "2026-12-10","checkOut": "2026-12-13","adults": 2,"currency": "USD","maxResults": 100}
Output example
One dataset item per property. This one is from a real run: Paris, 3 nights, 15-18 Oct 2026 (arrays shortened).
{"query": "hotels in Paris","position": 1,"name": "Les Jardins de Saint-Cloud","propertyType": "hotel","category": "extended_stay_hotel","pricePerNight": 116,"pricePerNightWithTaxes": 127,"priceText": "$116","currency": "USD","totalPrice": 382,"totalPriceBeforeTaxes": 347,"totalTaxesAndFees": 34.67,"totalPriceText": "$382","deal": "DEAL 24% less than usual","checkIn": "2026-10-15","checkOut": "2026-10-18","nights": 3,"rating": 4.4,"reviewCount": 338,"ratingBreakdown": { "5star": 238, "4star": 53, "3star": 15, "2star": 9, "1star": 23 },"hotelClass": 3,"hotelClassText": "3-star tourist hotel","address": null,"phone": null,"latitude": 48.8439194,"longitude": 2.2217806,"checkInTime": "3:00 PM","checkOutTime": "12:00 PM","description": "Chic studios in a refined apartment hotel offering a breakfast buffet, plus an indoor pool & a gym.","amenities": ["Breakfast ($)", "Free Wi-Fi", "Indoor pool", "Air conditioning", "Pet-friendly", "Fitness center", "Parking", "Bar"],"nearbyPlaces": [{ "name": "Aéroport de Paris-Charles de Gaulle", "type": "airport", "transport": [{ "mode": "car", "duration": "40 min" }, { "mode": "transit", "duration": "1 hr 19 min" }] }],"thumbnail": "https://lh3.googleusercontent.com/grass-cs/ACvplmPh...=s150-w92-h150-n-k-no","images": ["https://lh3.googleusercontent.com/grass-cs/ACvplmPh...=w1024"],"website": "http://www.lesjardinsdesaintcloud.fr/","entityToken": "ChkI5cSZt5rXifwfGg0vZy8xMWMycTMxeW5rEAE","googleMapsFeatureId": "0x47e67b2498ee8a6b:0x1ff826b9a6e66265","googleMapsUrl": "https://www.google.com/maps?cid=3339634915179124171","googleHotelsUrl": "https://www.google.com/travel/hotels/entity/ChkI5cSZt5rXifwfGg0vZy8xMWMycTMxeW5rEAE?hl=en&gl=us&curr=USD&ts=...","searchPage": 1,"scrapedAt": "2026-09-23T23:01:41.052Z"}
With includeDetails: true, address and phone are filled in, for example "8629 J M Keynes Dr, Charlotte, NC 28262" and "(704) 547-7444".
The dataset has two ready-made views: Overview (photo, name, stars, rating, price, deal, link) and Prices (the full price breakdown).
Field fill rates (real test run: 300 hotels across Charlotte, Paris and Tokyo)
| Field | Fill rate |
|---|---|
| name, coordinates, photos, Google Hotels URL, Maps URL, currency | 100% |
| rating, reviewCount | 100% |
| amenities | 96% |
| website | 96% |
| pricePerNight, totalPrice | 91% (the rest had no rooms available for the dates) |
| hotelClass | 86% (Google lists no class for some properties) |
| checkInTime | 83% |
| description | 73% |
| deal | 25% (only properties Google flags as a deal) |
| address, phone | 13% without includeDetails, 95-100% with it |
API example
Python (pip install apify-client):
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("rel8ble/google-hotels-scraper").call(run_input={"queries":["hotels in Paris"],"checkIn":"2026-12-10","checkOut":"2026-12-13","adults":2,"currency":"EUR","maxResults":50})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["name"], item["pricePerNight"], item["totalPrice"], item["rating"], item.get("deal"))
One HTTP call that runs the actor and returns the rows (curl):
curl -X POST "https://api.apify.com/v2/acts/rel8ble~google-hotels-scraper/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \-H "Content-Type: application/json" \-d '{"queries":["hotels in Paris"],"checkIn":"2026-12-10","checkOut":"2026-12-13","adults":2,"currency":"EUR","maxResults":50}'
Integrations
- Make, Zapier and n8n: start runs and send new hotel data to your other apps.
- Google Sheets: export the dataset straight into a spreadsheet, or refresh it on a schedule.
- Apify API: run the actor and fetch results over REST, or with the official JavaScript and Python clients.
- Webhooks: get notified when a run finishes and process the data right away.
- Schedules: run the same searches daily to track Google Hotels prices over time.
- MCP for AI agents: through the Apify MCP server (https://mcp.apify.com), Claude, ChatGPT, Cursor and other agents can call this Google Hotels API directly and read the results.
Limits (read before large runs)
- About 150-250 unique hotels per query. Google keeps serving pages after that, but deeper pages contain only vacation rentals or listings you've already seen. The scraper notices this and stops the query. To cover a big city in full, split it into areas:
"hotels in Shinjuku","hotels in Shibuya", ... - Search ranking is not stable. Google reshuffles the order between pages, so the same hotel can come up twice. The scraper removes these duplicates, and that's why a page sometimes adds fewer than 20 new hotels.
- Prices are Google's "from" prices for the dates and occupancy you set: the lowest rate across booking partners, shown in the currency you chose. Properties with no availability for your dates come back with
pricePerNight: null. - Street address and phone need
includeDetails. That opens one extra page per hotel, so the run is slower and uses more proxy traffic. - Amenity and deal labels come in the language you set. They're most complete with
language: "en". - Per-partner price lists (Booking.com vs Expedia vs the hotel's own site) and review texts are not included in this version.
How it works (for developers)
Google Hotels pages carry their result data in AF_initDataCallback({key: 'ds:N', data: ...}) script blobs. The scraper parses every blob. It then walks the nested arrays and picks out anything shaped like a hotel record (a name, a [lat, lng] pair, and an entity token or Maps ID). It doesn't rely on fixed array indexes. Every field is read defensively: if one record is malformed, that record just has fewer fields, and the run doesn't crash. Pagination, dates, guests and currency use the same ts/qs URL parameters Google's own interface uses.
Run it locally:
npm installnpm test # parser tests on saved fixturesAPIFY_LOCAL_STORAGE_DIR=./storage node src/main.js # input in storage/key_value_stores/default/INPUT.json
Need a custom scraper or a ready dataset? Hire me on Fiverr: https://www.fiverr.com/rel8ble