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

Google Hotels scraper: hotel prices for any city and dates, prices from every booking site (Booking.com, Expedia, Agoda, official site), rating, reviews, class, amenities, photos. Price calendar for any hotel. Fast HTTP, no browser.

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

## Pricing

from $1.05 / 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.
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

Scrape **Google Hotels** for any city and dates: hotel prices per night and for the whole stay, taxes, deals, guest rating, review count, hotel class, amenities, photos, coordinates and nearby places. Turn on **prices from every booking site** to get the full offer list (Booking.com, Expedia, Hotels.com, Agoda, Trip.com, the official site, ...) with room types and free-cancellation deadlines. Track one hotel over many dates with the built-in **price calendar**.

Fast HTTP scraping, no browser, no login, no Google API key.

### Try it in one click

The input is prefilled with `hotels in Lisbon`: click **Start** and get 20 hotels with prices in about a minute, for about $0.03.

Real output, `hotels in Rome`, 2 nights from 10 Dec 2026, 2 adults, **prices from every booking site** on (October 2026):

| Hotel | Class | Rating (reviews) | Cheapest booking site | Per night | Next offer | Booking sites |
|---|---|---|---|---|---|---|
| Hotel Artemide | 4★ | 4.8 (2,037) | Priceline | $232.01 | Hotels.com $233.01 | 28 |
| Hotel Nord Nuova | 3★ | 4.1 (1,766) | Evendo | $99.37 | Agoda $101.62 | 28 |
| Adesso Hotel | 4★ | 4.6 (795) | Traveluro | $53.80 | Tripadvisor $70.37 | 24 |
| Rome Garden Hotel | 3★ | 4.1 (908) | Agoda | $76.57 | hotel's own site $94.08 | 6 |
| Hotel Indigo Rome – St. George | 5★ | 4.7 (990) | Reservation Day | $287.70 | Vio.com $288.86 | 27 |

Every row also has the total price with taxes, address, phone, coordinates, amenities, photos, room types and free-cancellation deadlines (full field list below).

### What can this Google Hotels scraper do?

- **Search hotels** by city, area or landmark ("hotels in Lisbon", "resorts in Bali", "hotels near Times Square"), up to 1,000 hotels per search.
- **Any dates, guests and currency**: check-in / check-out or number of nights, 1–12 adults, USD, EUR, GBP or any other currency Google supports.
- **Prices from every booking site** (optional): every offer with price per night, total price, room types and free cancellation.
- **Price calendar**: repeat a search or a hotel for up to 90 consecutive check-in dates in one run.
- **Filters** by guest rating, hotel class, price per night and property type. Filtered hotels are not charged.
- Hotels **and vacation rentals** (apartments, guesthouses) in the same dataset, marked with `type`.

### Who uses Google Hotels data?

- **Hotels and revenue managers**: rate shopping and rate parity checks against OTAs.
- **Travel startups and agencies**: price comparison, deal alerts, destination content.
- **Analysts and investors**: average daily rates by city and season, supply research.
- **AI agents and data pipelines**: clean JSON for LLM travel assistants.

### How to scrape Google Hotels

1. Enter one or more **Searches** (e.g. `hotels in Lisbon`) and/or paste **Hotel URLs** from Google Hotels.
2. Pick the **Check-in date** and **Nights** (or a check-out date), guests and currency.
3. Optional: turn on **Include prices from every booking site**, set **Consecutive check-in dates** for a price calendar, add filters.
4. Click **Start** and download the results as JSON, CSV, Excel or via the API.

### Input

| Field | What it does |
|---|---|
| `searchQueries` | Google Hotels searches, scraped separately. |
| `hotelUrls` | Google Hotels hotel pages (`https://www.google.com/travel/hotels/entity/...`). Always returns all booking-site prices. |
| `checkInDate`, `checkOutDate`, `nights` | Stay dates. Default: 1 night, 7 days from today. |
| `consecutiveDates` | Repeat for N check-in days in a row (price calendar). |
| `adults`, `currency`, `country`, `language` | Guests, currency, Google market (`gl`) and language (`hl`). |
| `maxHotelsPerSearch` | Hotels per search and date range (default 50). |
| `includeOffers` | Open each hotel's page for all booking-site prices, address and phone. |
| `minRating`, `minHotelClass`, `minPricePerNight`, `maxPricePerNight`, `hotelsOnly` | Filters (not charged). |

Example: 30-day price calendar for one hotel, 2 nights from 1 December, in euros:

```json
{
  "hotelUrls": [{ "url": "https://www.google.com/travel/hotels/entity/ChkIg-b2ismUj7M1Gg0vZy8xMWg3MThreGg1EAE" }],
  "checkInDate": "2026-12-01",
  "nights": 2,
  "consecutiveDates": 30,
  "currency": "EUR"
}
```

### Output: Google Hotels data

One row per hotel per date range (shortened):

```json
{
  "hotelId": "ChkIg-b2ismUj7M1Gg0vZy8xMWg3MThreGg1EAE",
  "name": "The Central House Lisbon Baixa",
  "type": "hotel",
  "hotelClass": 2,
  "rating": 4.3,
  "reviewCount": 751,
  "ratingHistogram": { "5": 497, "4": 125, "3": 51, "2": 25, "1": 53 },
  "reviewAspects": [{ "aspect": "Location", "mentions": 106, "positive": 98, "negative": 3 }],
  "pricePerNight": 59.59,
  "priceTotal": 119.19,
  "priceBeforeTaxes": 95.51,
  "taxesAndFees": 23.68,
  "currency": "USD",
  "deal": "32% less than usual",
  "checkIn": "2026-11-12",
  "checkOut": "2026-11-14",
  "nights": 2,
  "latitude": 38.7131,
  "longitude": -9.1368,
  "address": "R. dos Fanqueiros 300, 1100-233 Lisboa, Portugal",
  "phone": "+351 21 887 3552",
  "website": "https://www.thecentralhousegroup.com/",
  "checkInTime": "2:00 PM",
  "amenities": ["Free Wi-Fi", "Breakfast ($)", "Bar", "Restaurant", "Smoke-free property"],
  "nearby": [{ "name": "Praça do Comércio", "category": "attraction", "travelTime": { "walking": "9 min" } }],
  "photos": ["https://lh3.googleusercontent.com/...=s1024"],
  "offers": [
    { "provider": "Booking.com", "pricePerNight": 65.85, "priceTotal": 131.69, "freeCancellation": false, "url": "https://www.google.com/aclk?..." },
    { "provider": "Hotels.com", "pricePerNight": 138.26, "priceTotal": 276.53, "freeCancellation": true,
      "rooms": [{ "name": "Quadruple Room", "pricePerNight": 135.87, "freeCancellationUntil": "Nov 10 3:00 PM" }] }
  ],
  "lowestPriceProvider": "Booking.com",
  "url": "https://www.google.com/travel/hotels/entity/...",
  "query": "hotels in Lisbon",
  "position": 2
}
```

`offers`, `lowestPriceProvider`, `address` and `phone` come from the hotel page, so they are present for hotel URLs and when **Include prices from every booking site** is on.

### Ready-made setups

Copy the JSON into the **Input → JSON** tab, click **Save as a new task**, then add a **Schedule** and an integration (Google Sheets, Slack, email, webhook) on the task's **Integrations** tab.

**1. Daily rate shopping for your hotel and competitors** (revenue managers). Next 30 check-in dates for each hotel, every booking site. Schedule: daily. About $0.30 per day for 4 hotels.

```json
{
  "hotelUrls": [
    { "url": "https://www.google.com/travel/hotels/entity/ChkIg-b2ismUj7M1Gg0vZy8xMWg3MThreGg1EAE" }
  ],
  "nights": 1,
  "consecutiveDates": 30,
  "currency": "EUR"
}
```

**2. City price index** (analysts, travel startups). The 200 most visible hotels in a city for the next 7 check-in dates. Schedule: weekly. About $2.10 per run.

```json
{
  "searchQueries": ["hotels in Barcelona"],
  "maxHotelsPerSearch": 200,
  "consecutiveDates": 7,
  "nights": 2
}
```

**3. Deal finder** (travel agencies, deal newsletters). Well-rated hotels under a price for a stay starting 7 days after each run, with the cheapest booking site. Schedule: daily, send new rows to Slack or email.

```json
{
  "searchQueries": ["hotels in Lisbon", "hotels in Porto"],
  "nights": 3,
  "minRating": "4.5",
  "maxPricePerNight": 120,
  "includeOffers": true
}
```

### Use it from AI agents (MCP, Claude, ChatGPT, n8n)

**MCP server.** Add this URL to Claude, Cursor, VS Code or any other MCP client and sign in to Apify when asked:

```
https://mcp.apify.com?tools=d_nepoch/google-hotels-scraper
```

```json
{
  "mcpServers": {
    "google-hotels": { "url": "https://mcp.apify.com?tools=d_nepoch/google-hotels-scraper" }
  }
}
```

Then just ask, for example: *"Find 4-star hotels in Lisbon under $150 a night for 12–14 December and tell me which booking site is cheapest for each"* or *"Build a 30-day price calendar for this hotel: <Google Hotels link>"*. The agent fills `searchQueries` / `hotelUrls`, dates and filters itself.

**One HTTP call** (waits for the run and returns the hotels as JSON; for runs longer than 5 minutes use the async `runs` endpoint):

```bash
curl -X POST "https://api.apify.com/v2/acts/d_nepoch~google-hotels-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchQueries": ["hotels in Lisbon"], "maxHotelsPerSearch": 20, "checkInDate": "2026-12-12", "nights": 2}'
```

**Python** (`pip install apify-client`, version 3):

```python
from apify_client import ApifyClient

client = ApifyClient("<APIFY_TOKEN>")
run = client.actor("d_nepoch/google-hotels-scraper").call(
    run_input={"searchQueries": ["hotels in Lisbon"], "maxHotelsPerSearch": 20, "includeOffers": True},
    max_total_charge_usd=1,  # hard spending cap for this run
)
for hotel in client.dataset(run.default_dataset_id).iterate_items():
    print(hotel["name"], hotel["pricePerNight"], hotel.get("lowestPriceProvider"))
```

**No-code and agent frameworks**: the Apify integrations for n8n, Make, Zapier, LangChain, LlamaIndex and CrewAI call this Actor by the name `d_nepoch/google-hotels-scraper` with the same JSON input.

Tips for agents: one row = one hotel for one date range; `pricePerNight` and `priceTotal` are numbers in `currency`; `offers` is present only with `includeOffers: true` or `hotelUrls`; set `maxTotalChargeUsd` to cap spend.

### How much does it cost to scrape Google Hotels?

Paid Apify plans get lower prices: Starter −10%, Scale −20%, Business −30% (from **$1.05 per 1,000 hotels**).

You pay only for hotels saved to the dataset — see the **Pricing** tab (at launch: **$1.50 per 1,000 hotels** from search, **$2.50 per 1,000 hotels with prices from every booking site**). Filtered-out hotels and duplicates are not charged. Set **Max total charge** in run options to cap your spend; the Actor stops cleanly at the limit. New Apify accounts get free monthly credits.

Example: 30-day price calendar for 10 hotels = 300 rows ≈ $0.75.

### FAQ

**Which proxy should I use?** Keep the default Apify datacenter proxy. When Google slows down or blocks one IP, the Actor retries with a new one automatically.

**Why do prices differ from what I see in my browser?** Google personalizes prices by market and currency. Set `country` and `currency` to match the market you care about.

**Can I get the cheapest booking site for every hotel in a city?** Yes: run a search with **Include prices from every booking site** on and read `lowestPriceProvider` and `offers`.

**Is scraping Google Hotels legal?** The Actor collects only public prices and hotel information (no personal data, no login). Use it in line with Google's terms and the laws that apply to you.

### Limits

- Sponsored hotel ads at the top of Google Hotels are not included.
- Some fields (class, rating, website) are empty when Google has no data for a property.
- Booking links (`offers[].url`) are Google redirect links; they open the booking site with your dates.

### Other scrapers by this developer

- [App Store & Google Play Reviews Scraper](https://apify.com/d_nepoch/app-store-google-play-reviews) — app reviews from both stores with a built-in insights report.
- [AliExpress Product Search Scraper](https://apify.com/d_nepoch/aliexpress-product-search-scraper) — AliExpress search and category results with prices, sales and ratings.
- [TikTok Shop Product Scraper](https://apify.com/d_nepoch/tiktok-shop-product-scraper) — TikTok Shop products with units sold, stock and reviews.
- [App Store & Google Play Scraper](https://apify.com/d_nepoch/app-store-google-play-scraper) — app search ranks (ASO), top charts up to 200 apps and full app details from both stores.
- [Startup Funding Rounds Scraper](https://apify.com/d_nepoch/startup-funding-rounds-scraper) — new startup rounds from SEC Form D, Form C and the news, with filters and only-new monitoring.

### Feedback

Found a bug or need a field? Open an issue on the **Issues** tab — fixes usually ship within a few days.

# Actor input Schema

## `searchQueries` (type: `array`):

What you would type into Google Hotels, e.g. 'hotels in Lisbon', 'resorts in Bali', 'hotels near Times Square'. Each search is scraped separately.

## `hotelUrls` (type: `array`):

Google Hotels hotel pages (https://www.google.com/travel/hotels/entity/...). For each hotel and date range you get prices from every booking site. Combine with 'Consecutive check-in dates' for a price calendar.

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

YYYY-MM-DD. Default: 7 days from today.

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

YYYY-MM-DD. Leave empty to use 'Nights'.

## `nights` (type: `integer`):

Length of stay when no check-out date is set.

## `consecutiveDates` (type: `integer`):

Repeat everything for this many check-in days in a row (same length of stay). Example: 30 = a 30-day price calendar.

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

Number of adult guests. Prices are for the whole party.

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

Three-letter code: USD, EUR, GBP, JPY, TRY, ...

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

Two-letter code of the Google market (gl), e.g. us, gb, de. Some booking sites and prices depend on it.

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

Language of hotel descriptions and labels (hl), e.g. en, de, fr, es.

## `maxHotelsPerSearch` (type: `integer`):

Per search and per date range. Google shows 20 hotels per page.

## `includeOffers` (type: `boolean`):

Open each hotel's page to get all offers (Booking.com, Expedia, Agoda, official site, ...) with room types, free cancellation, address and phone. Charged as 'hotel with prices'.

## `minRating` (type: `string`):

Filtered hotels are not charged.

## `minHotelClass` (type: `integer`):

0 = any. Vacation rentals have no class and are skipped when this is set. Filtered hotels are not charged.

## `minPricePerNight` (type: `integer`):

In the selected currency. Filtered hotels are not charged.

## `maxPricePerNight` (type: `integer`):

In the selected currency. Filtered hotels are not charged.

## `hotelsOnly` (type: `boolean`):

Skip apartments and other vacation rentals. Filtered results are not charged.

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

Apify datacenter proxy (default) is recommended: the Actor rotates IPs automatically when Google slows down or blocks one.

## Actor input object example

```json
{
  "searchQueries": [
    "hotels in Lisbon"
  ],
  "nights": 1,
  "consecutiveDates": 1,
  "adults": 2,
  "currency": "USD",
  "country": "us",
  "language": "en",
  "maxHotelsPerSearch": 20,
  "includeOffers": false,
  "minRating": "0",
  "minHotelClass": 0,
  "hotelsOnly": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

No description

# 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 = {
    "searchQueries": [
        "hotels in Lisbon"
    ],
    "maxHotelsPerSearch": 20,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("d_nepoch/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 = {
    "searchQueries": ["hotels in Lisbon"],
    "maxHotelsPerSearch": 20,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("d_nepoch/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 '{
  "searchQueries": [
    "hotels in Lisbon"
  ],
  "maxHotelsPerSearch": 20,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call d_nepoch/google-hotels-scraper --silent --output-dataset

```

## MCP server setup

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