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

Hotel prices from Google Hotels for any destination and dates: price per night and total, taxes, star class, rating, review topics, amenities, photos, coordinates and the price on every booking site (Booking.com, Expedia, Agoda, official site…). No login.

- **URL**: https://apify.com/signalmole/google-hotels-scraper.md
- **Developed by:** [SignalMole](https://apify.com/signalmole) (community)
- **Categories:** Travel, E-commerce, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$2.00 / 1,000 hotels

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

![Hotel prices on every booking site](https://gat-assets.pages.dev/hotels/hero.png)

## Google Hotels Scraper

Get hotel prices from [Google Hotels](https://www.google.com/travel/hotels) for **any destination and dates**: price per night, total with taxes, star class, rating, what guests praise or complain about, amenities, photos, location, and — optionally — **the price on every booking site** (Booking.com, Expedia, Agoda, Trip.com, the hotel's own site…) with room rates and free-cancellation dates.

No login, no API key, no browser. **$2 per 1,000 hotels — booking site prices included.**

### ✨ Why this scraper?

| Feature | What you get |
| :--- | :--- |
| 💲 **Real stay prices** | Per night, total before taxes, taxes and fees, total with taxes — for your dates and guests |
| 🏷️ **Every booking site** | ~15 sites per hotel on average, cheapest first, official site flagged |
| 🛏️ **Room rates** | Room names with price and "free cancellation until" date where Google has them |
| ⭐ **Review insight** | Rating, 1–5 star distribution and topics (Service, Location, Cleanliness…) with positive / negative mention counts |
| 🏠 **Hotels and rentals** | Hotels, hostels, apartments and vacation rentals, with property type |
| ⚡ **Fast** | ~500 hotels in 2 minutes; ~200 hotels with all booking site prices in 90 seconds |
| 💰 **One simple price** | $2 per 1,000 hotels, price comparison included, platform usage included |

### 🎯 Use cases

- **Hotel revenue management** — track your rates against the competitive set every day.
- **Rate parity checks** — see whether OTAs undercut your official site.
- **Travel apps and newsletters** — find the cheapest well-rated stays for a city and dates.
- **Market research** — price levels, star mix and guest sentiment across a whole city.
- **AI agents** — call it through the Apify MCP server: *"Cheapest 4-star hotel in Lisbon for Dec 10–13?"*

### 🚀 How to use

1. Add one or more **searches**: `hotels in Paris`, `Shibuya Tokyo`, `resorts in Bali`, `Hilton London`.
2. Pick **check-in / check-out dates** and the number of **adults**.
3. Turn on **Include price on every booking site** if you need the comparison.
4. Click **Start**. Download the results as JSON, CSV or Excel, or pull them via API.

```json
{
  "queries": ["hotels in Lisbon", "hotels in Porto"],
  "checkInDate": "2026-12-10",
  "checkOutDate": "2026-12-13",
  "adults": 2,
  "maxHotelsPerQuery": 200,
  "includePrices": true,
  "currency": "EUR"
}
```

| Input | What it does |
| :--- | :--- |
| `queries` | Destinations or searches, typed as you would on Google Hotels. |
| `checkInDate`, `checkOutDate` | `YYYY-MM-DD`. Defaults: 14 days from today, one night. |
| `adults` | 1–10 adult guests. Default 2. |
| `maxHotelsPerQuery` | Stop after this many properties per search. `0` = everything Google returns (often 500+ for big cities). |
| `includePrices` | Add the full booking site comparison and room rates to each hotel. |
| `currency` | `USD`, `EUR`, `GBP`, `JPY`, `TWD`… |
| `language`, `country` | Language of names and descriptions, and the traveler's country. |
| `proxyConfiguration` | Booking sites follow the proxy's location (US by default). For another market, choose **Residential** proxy and that country. |

### 📦 Output

One item per property. Real example (shortened):

```json
{
  "name": "Park Hotel Tokyo",
  "propertyType": "hotel",
  "stars": 4,
  "rating": 4.4,
  "reviewCount": 2661,
  "reviewTopics": [
    { "topic": "Service", "mentions": 453, "positive": 414, "negative": 26 }
  ],
  "pricePerNight": 157.33,
  "totalBeforeTaxes": 314.66,
  "taxesAndFees": 83.42,
  "totalWithTaxes": 398.08,
  "currency": "USD",
  "deal": "20% less than usual",
  "checkInDate": "2026-12-10",
  "checkOutDate": "2026-12-12",
  "checkInTime": "3:00 PM",
  "checkOutTime": "11:00 AM",
  "latitude": 35.6630543,
  "longitude": 139.7594515,
  "amenities": ["Free Wi-Fi", "Paid parking", "Bar", "Restaurant", "Accessible"],
  "nearbyPlaces": [
    { "name": "Hamarikyu Gardens", "travel": [{ "mode": "walking", "time": "9 min" }] }
  ],
  "offers": [
    { "source": "klook", "pricePerNight": 157.33, "totalPrice": 314.66, "official": false, "rooms": [] },
    { "source": "Park Hotel Tokyo", "pricePerNight": 185.04, "totalPrice": 370.08, "official": true, "rooms": [] }
  ],
  "googleHotelsUrl": "https://www.google.com/travel/hotels/entity/ChcI16HOlsC3uckCGgsvZy8xMjJqcjV5YhAB?…",
  "googleMapsUrl": "https://www.google.com/maps?cid=185463130339643607",
  "query": "hotels in Tokyo"
}
```

| Field | Description |
| :--- | :--- |
| `name`, `propertyType`, `hotelClass`, `stars` | Property and its official star class |
| `rating`, `reviewCount`, `ratingDistribution` | Google guest rating (out of 5) and star breakdown |
| `reviewTopics` | Topics guests mention, with positive and negative counts |
| `pricePerNight`, `pricePerNightText` | Lowest nightly price Google shows (before taxes in most markets) |
| `totalBeforeTaxes`, `taxesAndFees`, `totalWithTaxes` | The whole stay |
| `deal` | Google's price note, e.g. "20% less than usual" |
| `offers` | With `includePrices`: each booking site's nightly and total price, `official` site flag and `rooms` (name, price, `freeCancellationUntil`) |
| `amenities`, `rentalDetails` | Amenities; for rentals also "Sleeps 4", "1 bedroom"… |
| `latitude`, `longitude`, `countryCode`, `nearbyPlaces` | Location and travel times to nearby places and airports |
| `description`, `website`, `images`, `thumbnailUrl` | Description, official website and photos |
| `checkInTime`, `checkOutTime` | Property check-in / check-out times when listed |
| `hotelId`, `googleHotelsUrl`, `googleMapsUrl` | Stable ID and links (the Google Hotels link opens the same dates) |

> Booking sites' own links are Google ad-click URLs, so they are not included. Use `googleHotelsUrl` to open the hotel's price list.

### 💰 How much does it cost?

You pay **$0.002 per hotel** ($2 per 1,000), with or without booking site prices. Platform usage and proxies (including residential) are included.

| Hotels | Cost |
| :--- | ---: |
| 100 | $0.20 |
| 1,000 | $2.00 |
| 10,000 | $20.00 |

Apify's free plan includes $5 of monthly credit — enough for about 2,500 hotels.

### 🔁 Price tracking

Schedule the Actor daily (Apify **Schedules**) with the same dates and compare `pricePerNight` by `hotelId`. Run several date ranges to see how prices move toward the stay date.

### 🔌 Integrations

- **API / SDKs** — start runs and fetch results from Python, JavaScript or any HTTP client.
- **Zapier, Make, n8n, Google Sheets, Slack** — via Apify integrations.
- **MCP** — add the [Apify MCP server](https://mcp.apify.com) to Claude, Cursor or any MCP client and call this Actor as a tool.

### ❓ FAQ

**Do I need a Google account or API key?**
No.

**Why do prices differ slightly from what I see in my browser?**
Google personalizes prices by market and currency. Set `currency`, and use a residential proxy in the traveler's country.

**How many hotels can I get for a city?**
Google pages through hundreds of properties for large cities. Set `maxHotelsPerQuery` to `0` to take everything.

**Some hotels have no price.**
Google shows no price when no booking site has availability for your dates.

**Can I export to CSV or Excel?**
Yes — every Apify dataset downloads as JSON, CSV, Excel, XML or HTML.

### ⚖️ Is this legal?

This Actor reads publicly visible Google Hotels results and does not log in. It does not click ads or booking links. You are responsible for how you use the data; check the rules that apply to you.

### 💬 Need help?

Open an issue on the **Issues** tab — feature requests welcome.

# Actor input Schema

## `queries` (type: `array`):

One per line, typed the way you would on Google Hotels. Examples: hotels in Paris, Shibuya Tokyo, resorts in Bali, Hilton London.

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

YYYY-MM-DD. Leave empty for 14 days from today.

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

YYYY-MM-DD. Leave empty for one night.

## `adults` (type: `integer`):

Number of adult guests (1-10).

## `maxHotelsPerQuery` (type: `integer`):

Stop after this many properties for each search. 0 means as many as Google returns (often 500+ for a big city).

## `includePrices` (type: `boolean`):

Also get each hotel's full price comparison: Booking.com, Expedia, Agoda, the official site and others, with room types and free-cancellation dates. One extra request per hotel.

## `currency` (type: `string`):

Three-letter currency code: USD, EUR, GBP, JPY, TWD…

## `language` (type: `string`):

Language code for names and descriptions (en, de, fr, ja, zh-TW…).

## `country` (type: `string`):

Two-letter country code of the traveler (Google's gl setting).

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

Apify datacenter proxy works well and is included in the price. Booking sites follow the proxy's location (US by default). For another market, choose Residential and that country.

## Actor input object example

```json
{
  "queries": [
    "hotels in Paris"
  ],
  "adults": 2,
  "maxHotelsPerQuery": 100,
  "includePrices": false,
  "currency": "USD",
  "language": "en",
  "country": "us",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `hotels` (type: `string`):

One item per property: prices, rating, review topics, amenities, photos, location and (optionally) the price on every booking site.

# 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 = {
    "queries": [
        "hotels in Paris"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("signalmole/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 = { "queries": ["hotels in Paris"] }

# Run the Actor and wait for it to finish
run = client.actor("signalmole/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 '{
  "queries": [
    "hotels in Paris"
  ]
}' |
apify call signalmole/google-hotels-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,signalmole/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/YHcEnbzTkuAQ6Bh2U/builds/nSIs3MboRgeBfEcS4/openapi.json
