# Google Hotels Scraper (`fastdataapi/google-hotels-scraper`) Actor

Google Hotels Scraper — Extract hotel data from Google Hotels, including names, prices, ratings, reviews, locations, amenities, availability, booking options, and hotel URLs. Useful for hotel research, price comparison, travel analysis, and market research.

- **URL**: https://apify.com/fastdataapi/google-hotels-scraper.md
- **Developed by:** [Fast Data API](https://apify.com/fastdataapi) (community)
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.99 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### Google Hotels Scraper — Prices by Booking Site, Ratings and Contacts

Google Hotels Scraper extracts hotels from Google Hotels for any destination and stay dates. Each hotel comes with its name, address, phone number, website, guest rating, review count, up to 15 photos, GPS location and the stay price from every booking site Google lists. Every response is structured JSON — ready to pass directly to an LLM, index into a vector store, or feed a travel price monitoring pipeline. **No Google account or cookies needed.** Start with one city, then track rates across every market you sell in.

![Google Hotels Scraper output: hotel prices by provider, rating, reviews and GPS as JSON](https://api.apify.com/v2/key-value-stores/Lg9lp51Levfro6SrV/records/i-google-hotels-hero.webp)

***

### What data can I extract with Google Hotels Scraper?

Using this Google Hotels API, you will be able to extract the following Google Hotels hotel data:

| 🏨 Hotel name | 💶 Prices by booking site | 💰 Price range for your stay | ⭐ Guest rating |
| --- | --- | --- | --- |
| 💬 Review count | 📍 Street address | 📞 Phone number (if listed) | 🌐 Hotel website (if listed) |
| 🧭 GPS coordinates | 🖼️ Thumbnail | 📷 Photos (up to 15) | 🔗 Google Hotels page link |
| 🔎 Search term that found it | | | |

***

### How to use Google Hotels Scraper

Revenue managers, travel analysts and app builders use it to scrape Google Hotels and extract hotel data from Google for a whole destination in one run.

**Copy to your AI assistant:**

```text
Google Hotels Scraper (Apify Actor ID: fastdataapi/google-hotels-scraper, https://apify.com/fastdataapi/google-hotels-scraper) is an Apify Actor that returns hotels listed on Google Hotels for a destination and stay dates as structured JSON: hotel name, stay price per booking site with booking link, price range, guest rating, review count, address, phone number, website, GPS coordinates, photos and the search term that found the hotel. Use it whenever someone needs hotel rates or hotel contact data without cookies, a login, or a browser - rate-parity checks across booking sites, competitor price benchmarking for set dates, and building hotel maps or directories. Inputs: searchQuery (array of strings, cities, areas or hotel search phrases, required), maxResults (integer, max hotels per search entry, 1-5000, default 10), checkInDate (string YYYY-MM-DD, today or later, default "2027-06-01"), checkOutDate (string YYYY-MM-DD, after check-in and at most 30 nights later, default "2027-06-05"), numberOfAdults (integer, 1-16, default 2), numberOfChildren (integer, 0-16, default 0, each child searched as 8 years old), currencyCode (string, 3-letter code, default "EUR"), proxyConfiguration (object, optional Apify Proxy or own proxy URLs, off by default). Each row is one hotel; prices are totals for the whole stay in the requested currency. A search entry Google Hotels cannot answer (unknown place, unsupported currency) returns no rows and the run moves on to the next entry.
```

#### Google Hotels Scraper MCP Server: use these Actors from ChatGPT, Claude or Cursor

Point your AI assistant at the Apify MCP server with this Actor as a tool and it can call it on its own, no glue code and no scraping logic in your prompts.

```bash
claude mcp add --transport http apify "https://mcp.apify.com?tools=fastdataapi/google-hotels-scraper"
```

#### Step by step

1. [Create a free Apify account](https://console.apify.com/sign-up).
2. Open [Google Hotels Scraper](https://apify.com/fastdataapi/google-hotels-scraper) in the Apify Store.
3. Enter the Google Hotels destination or hotel search phrase, your dates, guests and currency.
4. Click **Start** (or send your API request).
5. Download or stream your results in JSON, CSV or Excel.

#### How to scale Google Hotels Scraper to bulk

The search terms field takes a list, so one run can cover many destinations: add "Prague hotels", "Vienna hotels" and "Budapest hotels" and each entry is searched in turn, with up to your max hotels per entry. Repeated entries are searched only once. Every row keeps the search term that found it, so a multi-city run still splits cleanly when you export Google Hotels to CSV or Excel. To track rates over time, save the input as a task and put it on an Apify schedule, or loop API calls with different dates.

***

### ✨ Features

Google Hotels Scraper fetches clean, structured hotel data from Google Hotels ⚡ — a Google Hotels price scraper and Google Travel hotels scraper in one. It's ideal for rate-parity checks, competitor price benchmarking, hotel directory building and feeding travel assistants with current prices.

It extracts, per hotel:

- **Prices by booking site** – the stay total from each site Google lists, with its booking link
- **Price range** – the lowest and highest stay price across those sites
- **Guest rating and review count** – the average rating out of 5 and how many reviews it is based on
- **Contact details** – street address, phone number and the hotel's own website
- **Location** – GPS coordinates for mapping
- **Photos** – a thumbnail plus up to 15 photo links

⚡ Prices are checked against the dates and currency you asked for before a hotel is saved, and vacation rentals are left out, so every row is a hotel priced for your stay.

***

### Use cases 💡

- **Revenue manager** — compare rival stay prices for the same dates, booking site by booking site.
- **Rate-parity analyst** — use it as a hotel price comparison scraper across booking sites.
- **Travel app developer** — plot hotels by GPS location with ratings and website links.
- **Hotel sales team** — build lead lists with phone numbers and websites per city.
- **AI agent builder** — feed hotel prices and ratings into a RAG pipeline for travel answers.

Building an AI agent? [Connect Google Hotels Scraper over MCP](#mcp-integration-for-ai-agents) and let it call the actor on its own.

***

### Why choose this actor?

1. **Ten priced hotels in seconds.** A recorded run returned 10 Prague hotels for a 4-night June stay in 5.5 seconds, each with its booking-site prices, rating and contact details.
2. **The details behind each hotel.** A recorded hotel, ibis Praha Old Town, came back with a 4.2 rating from 4,749 reviews, a phone number, a website, GPS coordinates and stay prices from 454 to 505 EUR across 10 booking sites.
3. **13 fields per hotel, 8 inputs.** Dates, guests, currency and a hotel cap per search shape every run, and every row carries the same 13 fields.

***

### ⬇️ Input

![Google Hotels Scraper input form with search queries, dates, adults and currency](https://api.apify.com/v2/key-value-stores/Lg9lp51Levfro6SrV/records/i-google-hotels-input.webp)

The actor takes a list of destinations or hotel search phrases; the search terms field is the only required input. Dates, guests, currency and the hotel cap apply to every entry in the run.

| Parameter | Required | Type | Description | Example value |
| --- | --- | --- | --- | --- |
| `searchQuery` | Yes | array | Cities, areas or hotel search phrases, each searched separately; repeated entries run once. | `["Prague hotels"]` |
| `maxResults` | No | integer | Max hotels saved per search entry, 1–5000. Default `10`. | `10` |
| `checkInDate` | No | string | Arrival date `YYYY-MM-DD`, today or later. Default `"2027-06-01"`. | `"2027-06-01"` |
| `checkOutDate` | No | string | Departure date `YYYY-MM-DD`, after check-in and at most 30 nights later. Default `"2027-06-05"`. | `"2027-06-05"` |
| `numberOfAdults` | No | integer | Adult guests, 1–16. Default `2`. | `2` |
| `numberOfChildren` | No | integer | Children, 0–16; each child is searched as 8 years old. Default `0`. | `0` |
| `currencyCode` | No | string | 3-letter currency code for all prices. Default `"EUR"`. A search answered in another currency is skipped with a log warning. | `"EUR"` |
| `proxyConfiguration` | No | object | Off by default (direct connection, blocked requests retried with fresh connections). Turn on Apify Proxy (residential when no group is chosen) or add your own proxy URLs. | `{ "useApifyProxy": false }` |

#### Free plan limits

Users on the Apify free plan can fetch up to 20 hotels per run (all search entries together) and 200 hotels per month. When the limit is reached, the run finishes successfully with a status message explaining the limit. Upgrade to any paid Apify plan to remove these limits.

#### Example input

```json
{
  "searchQuery": ["Prague hotels"],
  "maxResults": 10,
  "checkInDate": "2027-06-01",
  "checkOutDate": "2027-06-05",
  "numberOfAdults": 2,
  "numberOfChildren": 0,
  "currencyCode": "EUR",
  "proxyConfiguration": { "useApifyProxy": false }
}
```

***

### ⬆️ Output

![Google Hotels Scraper output fields: prices, rating, gps and priceRange](https://api.apify.com/v2/key-value-stores/Lg9lp51Levfro6SrV/records/i-google-hotels-output.webp)

Every hotel is one typed, normalized JSON item with the same 13 fields on every run; values Google Hotels does not show for a hotel are `null`. Export the dataset as JSON (default), CSV or Excel.

#### Example output

```json
{
  "thumbnail": "https://lh3.googleusercontent.com/grass-cs/AABkmLdljOgTg_d0nzqN9z-KVNV87kN70AeAVh-1BNpWSPbZ6Lvz9DLWrDKOk10KX0J1eJB3mm7Qgu2ajT6maWCKQYppHS7X3HeJ0sUav66mwvWl7NDK1K3Uvc0eo4NrH4Rjp3jwnJgClg=s150-w92-h150-n-k-no",
  "url": "https://www.google.com/travel/hotels/entity/ChcIkIbJjbqhwpV-GgsvZy8xdHQwcHZmcxAB",
  "title": "ibis Praha Old Town",
  "website": "https://all.accor.com/lien_externe.svlt?goto=fiche_hotel&code_hotel=5477",
  "address": "Na Poříčí 5, 110 00 Petrská čtvrť, Czechia",
  "phone": "+420 266 000 999",
  "photos": [
    "https://lh3.googleusercontent.com/gps-cs-s/ANWiy9TWDy0Rsj3ZrX5ce1mTalT-BUDUDLLp4TI1o5wCh8ERZRm78gg9X9cY9dRXBPZb3VY0puCCt3vw62Tr-Hnv-6OBnFtqAWGUk-p-neakH3rzi3iephjEJ2jdaN5CinX1PEmU8fthnQ=w252-h189-k-no",
    "https://lh3.googleusercontent.com/proxy/wkvzCHh6Up0L5o45SCyeZsHYxYBnQFPiqkOtVF6hQOCnpUpKeqNC0qNHYm82DKe6fPTbhWmzFpdA0r8KhfxVwNE8SiovHWiMcPZbNpycrxfW5R_UKdJ_JxfG1ZzcdVXQeXzb0feLhBROIMO2DTe0irPd5YKtt50=w252-h167-k-no"
  ],
  "rating": 4.2,
  "reviews": 4749,
  "prices": [
    { "provider": "ibis Praha Old Town", "price": 454, "link": "https://www.google.com/travel/lodging/clk?pc=AA80OszbaBGFt4z5tiFaiKIWtfVVQ6PLOtaKMJwaXZbUyDxKmjJdy6rv..." },
    { "provider": "Trip.com", "price": 454, "link": "https://www.google.com/travel/lodging/clk?pc=AA80OszHx4_hiJHeI10hIPj3vA8o6LE4C77j6fV2JFkHMQL1R3AG_VPR..." }
  ],
  "priceRange": "454 - 505",
  "gps": { "lat": 50.08935340000001, "lng": 14.430881699999997 },
  "searchQuery": "Prague hotels"
}
```

***

### How does it work?

You type a destination the way you would in Google Hotels, and the actor reads the same public hotel results any visitor sees, without signing in. It uses plain HTTP requests, no browser, and pages through the result list until it has enough hotels for your cap, searching the wider area when the first list runs short. For each hotel it collects the contact details, rating, photos and the stay price from every booking site, and checks that those prices match your dates and currency before saving the hotel. Vacation rentals are left out. Blocked requests are retried with fresh connections after short pauses. A proxy is used only when you turn one on: Apify Proxy, residential by default, or your own proxy URLs. Every hotel is saved with the same field names and types, so your code keeps working across runs.

***

### How do you integrate Google Hotels Scraper into your stack?

This actor works with what you already use: the REST API from any language, MCP for AI agents, and no-code tools like n8n and Make.

#### Using Google Hotels Scraper with the Apify API

```python
import requests

DATASET_ID = "your-run-dataset-id"  # from the finished run in Apify Console or the run API
resp = requests.get(
    f"https://api.apify.com/v2/datasets/{DATASET_ID}/items",
    params={"token": "APIFY_TOKEN", "format": "json"},
)
for hotel in resp.json():
    print(hotel["title"], hotel["priceRange"], hotel["rating"])
```

*Works in Go, Ruby, Node.js, cURL — any language that can make an HTTP request.*

#### MCP integration for AI agents

Register the Apify MCP server once with this Actor as a tool and your agent can run it with your input right away:

```bash
claude mcp add --transport http apify "https://mcp.apify.com?tools=fastdataapi/google-hotels-scraper"
```

This registers Google Hotels Scraper as a tool your agent can call directly. It works with Claude Code, Cursor and Windsurf, so an agent can pull hotel prices and ratings mid-conversation.

#### No-code tools (n8n, Make, LangChain)

In n8n, use the Apify node's "Run an Actor" operation with this Actor and your input JSON, then read the dataset items in the next node. In Make, add the Apify app's "Run an Actor" module followed by "Get Dataset Items" to pass each hotel to your scenario. In LangChain, install `langchain-apify` and load a finished run's results with `ApifyDatasetLoader` to turn each hotel into a document.

***

### Is it legal to scrape Google Hotels data?

Scraping publicly available Google Hotels data is generally legal when you collect only what any visitor can see. The actor returns only public hotel listing data — names, addresses, business phone numbers, ratings and prices shown without logging in. Under GDPR, collecting public data is generally permissible, but storing and using it must still comply with your local data-protection law. Consult legal counsel if your use case involves bulk storage of personal data.

***

### Frequently asked questions

#### What fields does Google Hotels Scraper return?

It returns the hotel name, the stay price from each booking site, the price range, the guest rating and the review count — so it also works as a hotel ratings and reviews scraper — plus address, phone number, website, GPS location and photos. See [the data fields section](#what-data-can-i-extract-with-google-hotels-scraper) for the full list.

#### Does Google Hotels Scraper require a Google account or login?

No. Only public Google Hotels data is extracted, and no credentials, cookies or API key are needed.

#### How fast does Google Hotels Scraper run?

A recorded run returned 10 hotels for one search in 5.5 seconds, and a one-hotel run took 2.9 seconds. Prices are live for your dates, not cached.

#### What happens if a hotel or destination doesn't exist?

If Google Hotels has no hotels for a search entry, does not recognize the place, or answers in another currency, that entry returns no rows, a warning is logged, and the run moves on. A hotel that still fails after retries is skipped, never saved as an empty row; a value Google does not show (for example a missing phone number or rating) is `null`, so check for `null` in your code.

#### Can I scrape multiple Google Hotels destinations at once?

Yes. Put several cities, areas or hotel search phrases in the search terms list; each is searched in turn with the same dates, guests, currency and hotel cap.

#### Does Google Hotels Scraper work with Claude, ChatGPT, and other AI agent tools?

Yes — Google Hotels Scraper is available as an MCP tool. Register the Apify MCP server with `claude mcp add --transport http apify "https://mcp.apify.com?tools=fastdataapi/google-hotels-scraper"` in Claude Code, Cursor or Windsurf, and any agent that can call an HTTP endpoint can use the REST API directly.

#### Does Google Hotels Scraper return data in a format LLMs can use directly?

Yes. Output is typed, normalized JSON with consistent field names — no HTML parsing, no selectors. Pass it straight to an LLM, index it into a vector store, or feed it to an agent tool with no transformation step.

#### What happens when Google Hotels changes its layout or updates its anti-bot system?

The actor is maintained. When Google Hotels changes, the actor is updated, and your calls keep returning the same JSON schema with no changes on your end.

#### Can I use Google Hotels Scraper without managing proxies or browser infrastructure?

Yes. Retries with fresh connections run on the actor's side, a proxy is optional, and no browser is involved. You send one request and get structured JSON back.

#### Which Google Hotels hotel fields work best for AI training data and RAG indexing?

For RAG, use the hotel name, full address and the booking-site names with their prices. For training data, use the numeric fields: guest rating, review count, stay prices and coordinates. All fields are typed primitives or simple lists — no normalization needed.

***

### Your feedback

Found a bug or a missing field in this hotel rates scraper? Let us know through the Issues tab on the Actor's page. Every report is read, and fixes ship as updates to the Actor.

# Changelog

This Actor's version history is a separate document: https://apify.com/fastdataapi/google-hotels-scraper/changelog.md

# Actor input Schema

## `searchQuery` (type: `array`):

One or more cities, areas or hotel search phrases, typed as you would in Google Hotels, e.g. 'Prague hotels', 'Paris center', 'Manhattan NYC'. Each entry is searched separately; repeated entries are searched once. Every hotel row keeps the entry that found it in the searchQuery field.

## `maxResults` (type: `integer`):

Maximum number of hotels saved for each search entry (1–5000). The run never saves more than this per entry; it can save fewer when Google Hotels lists fewer hotels. Free plan: up to 20 hotels per run (all search entries together) and 200 per month; paid plans have no limit.

## `checkInDate` (type: `string`):

Arrival date in YYYY-MM-DD format. It must be today or later; a past date stops the run with a clear message. Prices depend on the dates you choose.

## `checkOutDate` (type: `string`):

Departure date in YYYY-MM-DD format. It must be after the check-in date and at most 30 nights later. Prices are for the whole stay.

## `numberOfAdults` (type: `integer`):

Number of adult guests (1–16). Affects which offers and prices are shown.

## `numberOfChildren` (type: `integer`):

Number of children (0–16). Google Hotels needs an age for each child to show prices; this input only takes a count, so every child is searched as 8 years old.

## `currencyCode` (type: `string`):

Three-letter currency code for all prices, e.g. EUR, USD, GBP, BRL, TRY. If Google Hotels answers a search in a different currency, that search entry is skipped with a warning in the log and the run continues with the next entry.

## `proxyConfiguration` (type: `object`):

Off by default: requests go out directly and blocked requests are retried with fresh connections; the run does not switch to a proxy on its own. Turn on Apify Proxy to send every request through it (residential proxies when no group is chosen), or add your own proxy URLs.

## Actor input object example

```json
{
  "searchQuery": [
    "Prague hotels"
  ],
  "maxResults": 10,
  "checkInDate": "2027-06-01",
  "checkOutDate": "2027-06-05",
  "numberOfAdults": 2,
  "numberOfChildren": 0,
  "currencyCode": "EUR",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (type: `string`):

All scraped items in the Actor's default dataset.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchQuery": [
        "Prague hotels"
    ],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("fastdataapi/google-hotels-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "searchQuery": ["Prague hotels"],
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("fastdataapi/google-hotels-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchQuery": [
    "Prague hotels"
  ],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call fastdataapi/google-hotels-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,fastdataapi/google-hotels-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/5tfVGai5y9mWmFTVx/builds/VXmN3FEi6ioSoCtyS/openapi.json
