← Health board

Google Hotels Scraper: Prices, Rates, Phone & Email by City/ZIP

Every hotel Google Hotels lists in a city, ZIP code, county or near a landmark, priced for your dates: stars, rating, phone, street address, website and the hotel's own email. Booking-site rates on request.

0%golden-diff pass
Run it on Apify → verified nightly

Verification

0%golden-diff success
2canary runs
0days since last canary run

Output fields

Authoritative field set from the dataset schema.

FieldType
namestring|null
property_typestring|null
hotel_classinteger|null
ratingnumber|null
review_countinteger|null
rating_breakdownobject|null
price_per_nightnumber|null
currencystring|null
check_instring|null
check_outstring|null
dealstring|null
phonestring|null
addressstring|null
websitestring|null
emailstring|null
emailsarray|null
latitudenumber|null
longitudenumber|null
check_in_timestring|null
check_out_timestring|null
nearest_airportstring|null
airport_drive_minutesinteger|null
booking_ratesarray|null
entity_idstring|null
google_hotel_urlstring|null
querystring|null
noticestring|null
notice_typestring|null
source_urlstring|null

Sample row

{
  "name": "Hotel Griffon",
  "property_type": "hotel",
  "hotel_class": 3,
  "rating": 4.2,
  "review_count": 911,
  "rating_breakdown": {
    "1": 50,
    "2": 23,
    "3": 98,
    "4": 228,
    "5": 512
  },
  "price_per_night": 86.82,
  "currency": "USD",
  "check_in": "2026-11-20",
  "check_out": "2026-11-22",
  "deal": "20% less than usual",
  "phone": "(415) 495-2100",
  "address": "155 Steuart St, San Francisco, CA 94105",
  "website": "http://www.hotelgriffon.com/",
  "email": null,
  "emails": [],
  "latitude": 37.7927002,
  "longitude": -122.3923344,
  "check_in_time": "3:00 PM",
  "check_out_time": "11:00 AM",
  "nearest_airport": "San Francisco International Airport",
  "airport_drive_minutes": 25,
  "booking_rates": [],
  "entity_id": "ChgI5NCc0fWC5K2LARoLL2cvMXZ2MnNnZzYQAQ",
  "google_hotel_url": "https://www.google.com/travel/hotels/entity/ChgI5NCc0fWC5K2LARoLL2cvMXZ2MnNnZzYQAQ",
  "query": "San Francisco, CA",
  "source_url": "https://www.google.com/travel/hotels/entity/ChgI5NCc0fWC5K2LARoLL2cvMXZ2MnNnZzYQAQ"
}

Inputs

FieldTypeReqDefaultDescription
queries array no ["San Francisco, CA"] Where to look, one per line: a city (San Francisco, CA), a ZIP code (89501), a county (Washoe County, NV), a region (Lake Tahoe), a landmark (near Moscone Center) or a hotel's name. Each place is searched on its own and a hotel found twice is returned and charged once.
query string no — One place, for saved tasks and API calls that send a single value. Use Places above for several.
checkIn string no — YYYY-MM-DD. Prices are for this stay. Empty means 14 days from today. A date in the past moves to tomorrow (same number of nights) instead of failing the run, and a free row says so.
checkOut string no — YYYY-MM-DD. Empty means check-in plus the number of nights below.
nights integer no 1 Length of the stay when no check-out date is given (up to 30).
propertyType string no "hotels" Google mixes hotels and vacation rentals in its results. Hotels includes motels, inns and resorts.
maxResults integer no 20 Cap for EACH place. Google lists up to a few hundred per city; a whole state stops around 600, so split a state into counties or cities.
includeDetails boolean no true On by default: reads each hotel's own Google page for its street address and phone. Google's search list carries a phone only for the first ~18 hotels. No extra charge; turn off for a faster run with prices only.
includeEmails boolean no true On by default: visits each hotel's own website and returns the email published there. Charged separately, only for hotels where one is found. Chain brand sites (Marriott, Hilton, Hyatt...) publish no property email and are skipped.
includeOffers boolean no false Off by default: adds every booking site's price for the stay (Booking.com, Expedia, Hotels.com, the hotel's own site...) with a link, from each hotel's Google page. Charged per hotel that has rates.
proxyConfiguration object no {"useApifyProxy":false} Off by default, which is how this actor was tested. If a run comes back with a 'blocked' row, turn on a proxy (residential works). Included in the price.

Pricing

Pay per result (hotel) — no charge for empty runs.
Example: 1000 hotels at $0.003/result ≈ $3.00.

FAQ

What can I search for?

Anything Google Hotels understands as a place: a city ("San Francisco, CA"), a ZIP code ("89501"), a county ("Washoe County, NV"), a region ("Lake Tahoe"), a landmark ("near Moscone Center") or a hotel's name. Put several in Places; each is searched on its own and a hotel found by two of them is returned and charged once. Latitude and longitude are not accepted: Google answers them with the whole country.

Which dates are the prices for?

The check-in and check-out you give (or check-in plus a number of nights). Every row carries the check_in and check_out its price is for, as Google reported it. Leave check-in empty for a stay 14 days from today. A check-in in the past moves to tomorrow, same number of nights, and a free row says so, so a saved task keeps working.

Where do the phone and address come from?

Google's hotel list shows a phone for only its first page of hotels and no street address, so the actor opens each hotel's own Google Hotels page and reads both from there ("Phone and address for every hotel", on by default, no extra charge). Vacation rentals have no business phone and are not opened.

How does the email lookup work?

Unless you switch it off, the actor reads up to 4 pages of each hotel's own website (homepage plus contact pages) and returns the emails published there; booking-platform addresses are dropped. Chain brand sites (Marriott, Hilton, Hyatt, IHG, Wyndham, Choice, Best Western and others) publish no address for a single property and are skipped, so independent hotels are where emails come from. Measured in San Francisco on 2026-10-31: 7 of the first 18 hotels had an email on their website, all of them independents; none of the 6 chain sites did.

What are booking-site rates?

Switch on "Booking-site rates" and each hotel's row gets every site Google shows for your stay (Booking.com, Expedia, Trip.com, the hotel's own site and others), each with its price per night and total, before and after taxes, and a link to that site. Nob Hill Hotel in San Francisco had 20 sites for 20 to 22 November 2026.

How many hotels come back, and how long does it take?

Measured on 2026-10-31, run outside Apify through one proxy: San Francisco, priced for 20 to 22 November 2026, returned 419 hotels in about 5.5 minutes (searching about 1 minute, each hotel's page about 1.5 minutes, the email lookup about 2.5 minutes). Of the 419: 419 with a street address, 389 with a phone, 408 with a rating, 317 with a website, 246 with a price for those nights (Google had no rate for the rest on those dates) and 60 with an email found on their website. Google refused nothing. A first run of 20 hotels takes well under a minute.

How am I charged?

$0.003 per hotel returned. With the email lookup on (the default), $0.002 more per hotel where an email was found. With booking-site rates on, $0.001 more per hotel that has rates. Phone and address are included. Free rows (a refused search, a past date moved forward, input to fix) are never charged. Set "Maximum properties per place" to cap a run.

What if Google refuses a search?

The page is retried once after a pause. If Google still refuses, the hotels found so far are delivered and a free row says which place to run again; a refusal never reads as "no hotels here". Turning on a proxy (residential works) is the fix if it keeps happening.

Guides & use cases

Related actors