Google Hotels Scraper: Prices, Offers & Hotel Data
Pricing
from $0.60 / 1,000 hotels
Google Hotels Scraper: Prices, Offers & Hotel Data
Google Hotels by place, dates and guests: nightly and total prices, booking-site offers, official-site flags, ratings, amenities, photos and location. Paged results, confirmed currency, free failure notes and a spending limit.
Pricing
from $0.60 / 1,000 hotels
Rating
0.0
(0)
Developer
Zaiq
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
11 days ago
Last modified
Categories
Features
Share

Get hotels for a place, dates and guests, with nightly prices, stay totals, ratings, amenities, photos and optional booking-site offers. Each hotel starts with a plain verdict showing the price and whether offers were found. Results page automatically, with duplicates removed.
Price: $0.00075 per priced hotel, or $0.00275 per hotel with booking offers, plus $0.003 per successful search. The offer price includes the hotel; the two hotel events are alternatives. A 20-hotel search costs $0.01805 including Apify's start charge. Start with {"searches":["hotels in Lisbon"]}.
What you get
| Field | What it holds |
|---|---|
| Hotel | verdict, kind, status, name, type, hotelClass, rating, reviews, rank, url |
| Stay prices | pricePerNight and priceTotal before taxes with fees included; taxes, fees, totalWithTaxes, totalWithTaxesPerNight; displayedPricePerNight and priceBasis when a breakdown is unavailable |
| Dates, guests and currency | checkIn, checkOut, nights, adults, childrenAges, stayConfirmed, requestedCurrency, actual currency and priceNote. Unconfirmed prices are withheld. |
| Details | Amenities and availability flags, description, coordinates, country, website, photo links, rating breakdown, review topics, nearby places and source IDs. Address and phone when supplied. |
| Booking offers | offers: site, nightly/stay price, currency, official-site and sponsored flags, deal labels and safe direct booking links where supplied. rooms: featured room rates and cancellation terms. Each offer has guestCoverage and guestMatch; children priced as adults are marked, and prices for a different guest mix are withheld. |
| Comparison | lowestPricePerNight, lowestPriceSite, hotelWebsitePricePerNight, sites, offerCount, offersStatus, dealLabels |
| Advertising | Sponsored-only placements are separate, free sponsored-hotel rows. Organic rows can have hasSponsoredPlacement. |
| SUMMARY | Per-input counts, stopping reasons, incomplete-result warnings, source totals, route changes, traffic, timing and charges. |
What people use it for
- Price monitoring: Repeat the same searches and dates on a schedule.
- Booking-site comparison: Compare the hotel website with the offers Google exposes for the same stay.
- Travel data: Collect prices, ratings, amenities, locations and photo links.
- Market research: Compare the hotel supply Google shows for several places.
How to use it
- Enter a place in Searches, or leave the form as it is for the 20-hotel first run.
- Optionally set dates, adults, child ages, currency, country and language. Blank dates mean 14 days from the run date, for 2 nights.
- Turn on Every booking site’s price for offers. Set Maximum cost per run, then start.
Input
| Field | Example | Notes |
|---|---|---|
| Searches | hotels in Lisbon | One query per line, up to 100. Empty searches and hotel links use the first-run example. |
| Check-in / check-out | 2027-02-10 / 2027-02-13 | One stay per run; 1–30 nights. Invalid dates return a free note. |
| Adults / children’s ages | 2 / ["7", "10"] | 1–12 adults and up to 8 children aged 0–17; one room. |
| Currency | EUR | Requested currency; each row records what Google actually returned. |
| Hotels per search | 20 | 1–10,000 organic results. Google may end earlier. Search records, notes and sponsored rows are extra. |
| Every booking site’s price | off | On: one combined hotel-and-offers event. Missing offers use the basic event only if a confirmed hotel price was delivered. |
| Include vacation rentals | on | Off excludes records Google identifies as vacation rentals. Unknown types remain visible. |
| Include sponsored placements | on | Free supplementary ads with a smaller field set. Offers are not fetched for these rows. |
| Hotel links | tokens from earlier results | Entity links or property tokens. Always fetches offers and available details. One shared successful-search fee for the link list. |
| Country / language | pt / en | Google market and content language. Direct and datacenter routes do not guarantee visitor country. Common amenity labels are in English. |
| Request limit | 1500 | Whole-run source limit, including retries; up to 10,000. Stops with a free note. |
Output
Each result is one row in the run's dataset (download it as JSON, CSV, Excel, XML or HTML, or read it through the API). An example row (values shortened):
{"verdict": "EUR 287.34 for 3 nights including taxes; 14 booking sites.","kind": "hotel","name": "Example Central Hotel","hotelClass": 5,"rating": 4.7,"reviews": 6546,"pricePerNight": 82.81,"priceTotal": 248.43,"taxes": 38.91,"fees": 0.0,"totalWithTaxes": 287.34,"currency": "EUR","checkIn": "2026-11-20","checkOut": "2026-11-23","nights": 3,"adults": 2,"childrenAges": [],"amenities": ["Paid breakfast","Free Wi-Fi","Paid parking","Indoor pool","Hot tub","Air conditioning","Pet-friendly","Fitness center","Spa","Bar","Restaurant","Room service","Full-service laundry","Accessible","Business center","Kid-friendly","Smoke-free property"],"isSponsored": false,"offersStatus": "available","offerCount": 18,"url": "https://hotels.example.com/property/sample","offers": [{"site": "Example hotel website","pricePerNight": 207.2,"priceTotal": 621.59,"currency": "EUR","isOfficialSite": true,"isSponsored": false,"freeCancellation": null,"link": "https://booking1.example.com/stay"},{"site": "Example booking site 2","pricePerNight": 95.78,"priceTotal": 287.34,"currency": "EUR","isOfficialSite": false,"isSponsored": false,"freeCancellation": null,"link": "https://booking2.example.com/stay"},{"site": "Example booking site 3","pricePerNight": 196.12,"priceTotal": 588.38,"currency": "EUR","isOfficialSite": false,"isSponsored": false,"freeCancellation": null,"link": "https://booking3.example.com/stay"}]}
This example comes from a real signed-out run on 25 October 2026. Hotel and booking-site names and site addresses have been replaced; price, rating and amenity values are from the run. Offers are shortened here. Filter kind = hotel for hotel records. The dataset also contains charged search records, free sponsored-hotel placements and free note rows. SUMMARY lists counts, charges and incomplete inputs.
Pricing
- $0.00075 per hotel with a confirmed price, when booking offers are off.
- $0.00275 per hotel with booking offers, including the hotel data. It is not added to the basic hotel event.
- $0.003 per successful search, once the search delivers its first priced hotel. A hotel-link list shares one fee.
- Invalid, blocked and wholly unpriced searches have no hotel or search event. Failed offers fall back to the basic event only if a confirmed hotel price was delivered.
- Sponsored placements, unavailable-price hotel rows and failure notes are free. The same price on every Apify plan.
- Apify's $0.00005 start charge counts towards the buyer's Maximum cost per run.
What typical jobs cost at the list price:
| Job | Cost |
|---|---|
| 20 priced hotels, one search, offers off | $0.01805 |
| 100 priced hotels, one search, offers off | $0.07805 |
| 1,000 priced hotels, one search, offers off | $0.75305 |
| 20 hotels with booking offers, one search | $0.05805 |
| 10 hotel links with offers, one shared search fee | $0.03055 |
| One priced hotel / one hotel with offers | $0.00380 / $0.00580 |
Examples include one $0.00005 start charge. Each additional successful search adds $0.003. Set Maximum cost per run to cover the search fee and at least one hotel: $0.00380 for basic data or $0.00580 for offers. Requests stop when the remaining limit cannot cover the work. Free notes still appear after the limit.
Tips
- Schedule repeated runs for price history; keep dates and guest mix consistent.
- Reuse property tokens in Hotel links. This run’s date inputs control the stay.
- Compare offers using their own price basis. Visitor country can affect whether displayed offer prices include taxes.
- Check
offersStatusandstayConfirmed. An absent price is not zero. - Read
SUMMARY.inputs[].stopReasonand warnings before treating the result as complete.
Use it through the API
Python
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("zaiq/google-hotels-scraper").call(run_input={"searches": ["hotels in Lisbon"], "maxHotelsPerSearch": 20, "currency": "EUR"})for row in client.dataset(run.default_dataset_id).iterate_items():print(row)
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });const run = await client.actor('zaiq/google-hotels-scraper').call({"searches": ["hotels in Lisbon"], "maxHotelsPerSearch": 20, "currency": "EUR"});const { items } = await client.dataset(run.defaultDatasetId).listItems();
HTTP (one call, results back)
curl -X POST 'https://api.apify.com/v2/acts/zaiq~google-hotels-scraper/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>' \-H 'Content-Type: application/json' \-d '{"searches": ["hotels in Lisbon"], "maxHotelsPerSearch": 20, "currency": "EUR"}'
Integrations and schedules
- Schedules: run it every hour, day or week from the Apify Console (Schedules) and keep a history of results.
- Make, Zapier, n8n, Google Sheets, Slack, Airtable: connect it through Apify's integrations, or send each finished run to a webhook.
- Datasets: results stay in the run's dataset; export them or read them by API whenever you need them.
Use it with AI agents (MCP)
Add Apify's MCP server (https://mcp.apify.com) to Claude, ChatGPT, Cursor, VS Code or any MCP client. The agent can find this Actor and run it for you: ask it for "hotels in Lisbon for three nights, with prices in euros and the booking sites Google shows for each". AI agents can also pay for runs directly through Apify's agentic payments.
Limits
- Only public signed-out data is read. Login walls and bot checks are reported, not solved.
- Google can withhold data, ignore guests or end pagination early. Suspect answers move through the available route ladder. The last answer is marked incomplete when needed.
- Google’s counts are estimates, not a guaranteed inventory. The result limit is a maximum, not a promise to return that many hotels.
- Offers are those Google exposes at run time, including featured sponsored rates. They are not every rate sold on the internet.
- Direct and datacenter calls use their actual visitor location. Residential fallback requests the input country when available; country of origin is not independently verified.
- Basic prices use the supplied numeric tax breakdown. Offers retain Google’s displayed tax basis. The actual currency is reported without local conversion.
- Ads can ignore child ages. Unconfirmed ad prices are withheld; the placement remains free.
- Ad-click and tracking-counter links are left out and never visited. Photos are links, not downloaded files.
- Amenities, address, phone, rooms and cancellation terms may be missing. There is one room and one stay per run.
- Stable IDs prevent duplicate delivery and charges after a restart of the same run with its dataset preserved.
- Some sites price children as adults. Offer-level guest coverage makes that adjustment explicit; missing coverage is marked as not supplied.
FAQ
Does the offer price include the hotel?
Yes. It replaces the basic hotel event. There is also one successful-search fee for the input.
Why charge a successful-search fee?
It covers fixed search work, including small jobs. It is charged only after priced hotel data is available.
Why are there extra rows?
The hotel limit excludes search records, free notes and free sponsored-only placements. Turn off Include sponsored placements to omit ads.
Nightly prices or stay totals?
Both. pricePerNight and priceTotal are before taxes, with fees included. totalWithTaxes includes supplied taxes. Displayed prices and booking offers carry their own priceBasis.
What if Google stops early?
Valid results are kept, with a free note and an incomplete status. SUMMARY distinguishes a source interruption from a result or spending limit.
Do restarts charge again?
Already-delivered hotels, search fees and notes are skipped. Separate new runs collect new snapshots.
Related Actors from Zaiq
- google-trends-scraper: search interest in a destination
- google-news-scraper: destination news
Support
Questions, a site that changed, or a field you need? Open an issue on this Actor's Issues tab: we answer there, usually within a day.
Also found as: google hotels scraper, google hotels api, hotel price scraper, google travel scraper, hotel price comparison, hotel rates by date, booking-site offers, hotel price monitoring.