Google Hotels Scraper - Google Travel Hotel Prices & OTAs
Pricing
from $3.00 / 1,000 hotel price with all ota offers
Google Hotels Scraper - Google Travel Hotel Prices & OTAs
Google Travel hotel prices for any city or hotel list: lowest nightly rate, every OTA offer (Booking.com, Expedia, Agoda, Trip.com, official site), price calendar across many check-in dates, typical price range and hotel details. Fast, no browser.
Pricing
from $3.00 / 1,000 hotel price with all ota offers
Rating
0.0
(0)
Developer
Kamer Ozkan
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
10 days ago
Last modified
Categories
Share
Google Hotels Scraper: Google Travel Hotel Prices & OTA Rates
Get Google Travel hotel prices for one hotel or a whole city. This Google Hotels scraper extracts real-time hotel prices, rate parity insights, and OTA booking offers from Google Hotels (Google Travel) for any city, landmark, or list of properties. Retrieve the lowest nightly rate, all booking site offers (Booking.com, Expedia, Hotels.com, Agoda, Trip.com, Priceline, official hotel sites), multi-date price calendars (up to 365 days), Google's typical price benchmark, tax breakdowns, and full property metadata.
Built for speed and reliability: browserless direct protocol engine, no login, no cookies, no heavy headless browser overhead.
Why Google Hotels Scraper?
| Feature | What you get |
|---|---|
| Pricing Model | $0.003 / hotel with all OTAs |
| Execution Speed | 2 to 4 seconds per search (no browser) |
| Memory Footprint | 512 MB |
| All OTA Offers | Yes (10+ booking channels in one row) |
| Price Benchmark | Yes (low, typical, high) |
| Multi-Date Calendars | Yes (up to 365 check-in dates) |
Core Use Cases
- Hotel Revenue Management & Rate Shopping: Track your hotel's competitive set daily. See which OTA undercuts your official rate and monitor price shifts in real time.
- Rate Parity Enforcement: Verify whether Booking.com, Expedia, or Agoda are violating parity agreements for your rooms across upcoming seasons.
- Price Calendars & Seasonality Analysis: Scan 30, 90, or 365 check-in dates in a single run to uncover peak demand dates, holiday surges, and low-season troughs.
- Travel Tech & Deal Sites: Build high-frequency hotel price comparison engines and deal alert feeds for any city worldwide.
- AI Agents & Workflows: Integrate clean JSON directly into n8n, Make, Zapier, LangChain, or LLM-driven travel planners.
Key Features
- Query-Based Discovery: Search any destination (
hotels in Paris,luxury hotels in Manhattan,cheap hotels near Colosseum) with automatic pagination. - Specific Hotel Monitoring: Track designated hotels by name, Google Hotels entity URL, or
hotelId. - All OTA Offers in One Row: Receive provider name, nightly price, stay total, and direct booking URL for every booking channel.
- Google Price Insight: Instant comparison against historical averages (
priceLevel:low,typical,high) with low/high threshold values. - Stay Total & Tax Breakdown: Base room total plus estimated taxes and fees.
- Filters Before Billing: Minimum stars, minimum guest rating and a nightly price range. Hotels that do not match are skipped and never charged.
- Relative Dates: Use dynamic expressions (
+14 days,tomorrow) for automated daily monitoring without updating dates manually. - 30+ Currencies & Global Point of Sale: Set currency (USD, EUR, GBP, TRY) and country market code (US, GB, DE, TR).
How to scrape Google Hotels
- Type one or more searches into Search queries, exactly as you would on Google Hotels (
hotels in Rome,hotels near Times Square), or paste hotel names, Google Hotels URLs or hotel IDs into Specific hotels. - Pick the check-in date, nights and guests. For a price calendar, raise Number of check-in dates (30 gives one row per hotel per day for a month).
- Leave Include all OTA offers on to get every booking site's price, or turn it off for a cheaper lowest-price-only run.
- Click Start and download the results as JSON, CSV or Excel, or schedule the run for daily rate tracking.
Input Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
searchQueries | Array of Strings | No | [] | Search destinations or landmarks to discover hotels. If both lists are empty, the example search hotels in Istanbul runs. |
hotels | Array of Strings | No | [] | Specific hotel names or Google Hotels URLs to track. |
checkInDate | String | No | "+14 days" | Check-in date (YYYY-MM-DD or relative like +14 days, today+14, tomorrow, 2 weeks). |
numberOfDates | Integer | No | 1 | Scan multiple consecutive check-in dates (1 to 365). |
dateStep | Integer | No | 1 | Step in days between calendar dates (e.g. 7 for weekly). |
nights | Integer | No | 1 | Length of stay in nights (1 to 30). |
adults | Integer | No | 2 | Number of adult guests (1 to 10). |
currency | String | No | "USD" | 3-letter currency code (USD, EUR, GBP, TRY, etc.). |
includeOtaOffers | Boolean | No | true | Extract all OTA booking site offers. If false, extracts lowest price only. |
maxHotelsPerSearch | Integer | No | 20 | Maximum properties to collect per search query (up to 500), counted after filters. |
minHotelClass | Integer | No | 0 | Only hotels with at least this many stars (search queries only). |
minRating | String | No | empty | Only hotels with at least this Google guest rating, e.g. 4.5. |
minPricePerNight / maxPricePerNight | Integer | No | 0 | Price range per night in the selected currency (lowest search price). Filtered-out hotels are not charged. |
proxyConfiguration | Object | No | { "useApifyProxy": true } | Apify proxy settings (Datacenter or Residential). |
Example JSON Output
Each record represents one hotel property for a specific check-in date:
{"hotelName": "The Marmara Taksim","hotelId": "ChoIv9zm0pCp0vObARoNL2cvMTFkZHd0ZzdmeBAB","checkIn": "2026-11-05","checkOut": "2026-11-07","nights": 2,"adults": 2,"currency": "EUR","lowestPricePerNight": 145.0,"lowestTotalPrice": 290.0,"lowestPriceProvider": "Booking.com","offersCount": 8,"offers": [{"provider": "Booking.com","pricePerNight": 145.0,"totalPrice": 290.0,"bookingUrl": "https://www.google.com/travel/lodging/clk?..."},{"provider": "Official Site","pricePerNight": 150.0,"totalPrice": 300.0,"bookingUrl": "https://www.google.com/travel/lodging/clk?..."},{"provider": "Expedia","pricePerNight": 152.0,"totalPrice": 304.0,"bookingUrl": "https://www.google.com/travel/lodging/clk?..."}],"priceInsight": {"currentPrice": 145,"typicalLowPrice": 130,"typicalHighPrice": 180,"priceLevel": "typical"},"stayTotal": {"baseTotal": 260.0,"taxesAndFees": 30.0,"grandTotal": 290.0},"rating": 4.5,"reviewCount": 4210,"address": "Taksim Meydani, Istanbul, Turkey","latitude": 41.0369,"longitude": 28.9850,"googleHotelsUrl": "https://www.google.com/travel/search?q=...","scrapedAt": "2026-10-06T20:30:00+00:00"}
Code Examples
Python (apify-client)
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_API_TOKEN")run_input = {"searchQueries": ["hotels in Istanbul"],"checkInDate": "+14 days","nights": 2,"adults": 2,"currency": "USD","includeOtaOffers": True,"maxHotelsPerSearch": 25,}# Run the Actor and wait for it to finishrun = client.actor("kamerozkan/google-hotels-prices").call(run_input=run_input)# Fetch results from default datasetfor item in client.dataset(run["defaultDatasetId"]).iterate_items():print(f"{item['hotelName']}: lowest ${item['lowestPricePerNight']} on {item['lowestPriceProvider']}")
JavaScript / Node.js (apify-client)
import { ApifyClient } from 'apify-client';const client = new ApifyClient({token: 'YOUR_APIFY_API_TOKEN',});const runInput = {searchQueries: ['hotels in Barcelona'],checkInDate: '+7 days',nights: 1,currency: 'EUR',includeOtaOffers: true,};const run = await client.actor('kamerozkan/google-hotels-prices').call(runInput);const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(`Extracted ${items.length} hotel rate records:`, items);
cURL
curl --request POST \--url "https://api.apify.com/v2/acts/kamerozkan~google-hotels-prices/runs?token=YOUR_APIFY_API_TOKEN" \--header "Content-Type: application/json" \--data '{"searchQueries": ["hotels in Rome"],"checkInDate": "2026-12-01","nights": 2,"currency": "EUR"}'
Pricing Details
This Actor operates under Pay-Per-Event (PPE):
- Full Hotel Offer ($0.003): Charged per hotel per check-in date with complete OTA rates, price insights, and stay total.
- Listing Only ($0.001): Charged per hotel when
includeOtaOffers: false(fastest search mode).
Platform compute usage is fully included in the event price. You can set a spending limit in Apify Console to prevent overruns.
Example: 20 hotels in one city for one check-in date with all OTA offers is 20 x $0.003 = $0.06. A 30-day price calendar for 10 hotels is 300 x $0.003 = $0.90.
FAQ
Do I need a Google account or an API key? No. The Actor reads the public Google Hotels pages without login or cookies.
Why did a hotel return no offers? Google shows no bookable offers for some hotels on some dates (sold out or not listed). The row still has isAvailable: false so you can see the gap.
Can I get Google Travel hotel prices for one hotel across many dates? Yes. Put the hotel name, its Google Travel URL or its hotel ID (Ch...) into Specific hotels and set Number of check-in dates (for example 30). You get one row per date with every booking site's price in offers, so 30 dates are 30 rows, not one row per site.
Can I track the same hotels every day? Yes. Put them in Specific hotels, use a relative check-in date such as +14 days, and add a schedule in Apify Console.
Am I charged per booking site? No. One row holds every OTA offer for one hotel and one check-in date, and that row is one $0.003 charge whether Google lists 3 booking sites or 15.
Which currencies and countries work? 30+ currencies in the Currency list and any two-letter country code as the point of sale.
Support and feedback
- Found a bug or missing a field? Open an issue on the Issues tab of this Actor. We reply within 48 hours and ship most fixes within a few days.
- Have an idea for a feature? Issues are the fastest way to get it built.
- If the Actor saves you time, a short review on this page helps other users find it.