# Google Hotels Scraper & Price Tracker: Rates & Ratings (`automationnation/google-hotels-scraper`) Actor

Scrape Google Hotels for any city: hotel prices for your dates (per night, with taxes), star class, rating, reviews, location, photos and links. Hotel price tracker: schedule it with Only price drops for an alert when a hotel gets cheaper. Rating, class and price filters. $1 per 1,000 hotels.

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

## Pricing

from $0.80 / 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 & Price Tracker: Rates & Ratings

**Google Hotels Scraper is an Apify Actor that returns Google Hotels results for any city or area: prices for your dates, star class, rating and reviews, location, photos and links for each hotel.** It reads Google Hotels over plain HTTP, so a search takes seconds and every hotel comes back as one clean JSON row.

#### Example result

Paris, one night from 6 October, from a real run on 6 October 2026:

| Hotel | Stars | Guest rating | Per night | With taxes |
|---|---|---|---|---|
| Hyatt Regency Paris Étoile | 4 | 4.4 (6,449) | $351 | $405 |
| ibis Paris Tour Eiffel Cambronne 15ème | 3 | 3.8 (6,697) | $223 | $257 |
| SO/ PARIS | 5 | 4.5 (1,444) | $689 | $784 |

Each hotel also includes coordinates, nearby places, photos, what reviews mention and links to Google Hotels and Maps.

#### Quick facts

- **What you get, one row per hotel:**
  - nightly price before and with taxes, currency, and the dates and nights the price is for
  - star class, Google rating, review count and the reviews per star
  - latitude and longitude, nearby places with travel times, and what reviews often mention
  - description, website, Google Hotels and Google Maps links, and photos
- **Your dates and guests:** set check-in, check-out and adults; Google prices those nights.
- **Filters:** minimum rating, minimum stars and maximum price per night.
- **Price:** $1 per 1,000 hotels (less on paid Apify plans). Apify's free $5 monthly credit covers 5,000 hotels.
- **AI agents:** connect `https://mcp.apify.com?tools=automationnation/google-hotels-scraper` (setup below).

### What can you do with it?

- **Price monitoring:** track rates for a city or a competitor set every day, by date.
- **Revenue management:** compare your hotel's price, rating and reviews with nearby rivals.
- **Travel apps and AI agents:** give a travel assistant live hotel options with prices, ratings and coordinates.
- **Market research:** map supply, star classes and price bands across neighbourhoods and cities.
- **Lead generation:** build hotel lists with websites and locations for B2B outreach.
- **Compare hotel prices and rates:** find cheap hotels or the best-rated accommodation in an area, with a simple hotel API for travel apps and price trackers.

### How to use it

1. Click **Try for free**.
2. Add **locations or searches**: `Paris`, `Shoreditch London`, `hotels near Times Square`, `4 star hotels in Rome`.
3. Set **check-in** and **check-out** dates and the number of adults for exact prices.
4. Optionally filter by rating, stars or price, then click **Start**. Download JSON, CSV or Excel, or use the API.

#### Run it on a schedule: hotel price tracker

**Know when a hotel gets cheaper:** schedule a search for your dates and turn on **Only price drops**. Each run saves a hotel only when its nightly price is lower than last time, with that previous price on the row; a run with no drops saves nothing and costs almost nothing. Add **Max price per night**, **Min rating** or **Min hotel class** to watch only the hotels you'd book.

1. Set the city and dates and turn on **Only price drops** (`"onlyPriceDrops": true`).
2. Click **Save as a new task**, then **Schedule** it daily.
3. On the task's **Integrations** tab, send the drops to Slack, email or a webhook, or pick them up in n8n, Make or Zapier.

```json
{
  "locations": ["Lisbon"],
  "checkIn": "2026-12-18",
  "checkOut": "2026-12-21",
  "minRating": "4",
  "onlyPriceDrops": true
}
```

Use **Monitor name** to keep separate price histories for the same city.

#### Input example

```json
{
  "locations": ["Paris", "Barcelona", "hotels near Times Square"],
  "checkIn": "2026-11-20",
  "checkOut": "2026-11-23",
  "adults": 2,
  "minRating": "4",
  "maxPricePerNight": 300
}
```

#### Output example

```json
{
  "search": "Paris",
  "position": 1,
  "name": "Aparthotel Adagio Access Paris Ivry Confluence",
  "hotelClass": 3,
  "classText": "3-star tourist residence",
  "rating": 3.4,
  "reviewCount": 25,
  "ratingBreakdown": { "5star": 12, "4star": 2, "3star": 3, "2star": 0, "1star": 8 },
  "pricePerNight": 53.48,
  "pricePerNightText": "$53",
  "pricePerNightWithTaxes": 71,
  "pricePerNightWithTaxesText": "$71",
  "estimatedStayTotal": 213,
  "currency": "USD",
  "checkIn": "2026-11-20",
  "checkOut": "2026-11-23",
  "nights": 3,
  "latitude": 48.8137863,
  "longitude": 2.4055655,
  "nearby": [{ "place": "Aéroport de Paris-Charles de Gaulle", "time": "34 min / 1 hr 12 min" }],
  "website": "https://www.adagio-city.com/C5J3",
  "googleHotelsUrl": "https://www.google.com/travel/hotels/entity/ChkI6KTxkq73kI1aGg0vZy8xMXl2cjhkNXQxEAE",
  "googleMapsUrl": "https://www.google.com/maps?cid=6492576282748670568",
  "photos": ["https://lh3.googleusercontent.com/…=w1024"],
  "scrapedAt": "2026-10-05T12:30:00.000Z"
}
```

#### Output fields

| Field | Description |
|---|---|
| `name`, `hotelClass`, `classText` | Hotel and its star class |
| `rating`, `reviewCount`, `ratingBreakdown` | Google rating, number of reviews, reviews per star |
| `pricePerNight`, `pricePerNightText` | Lowest nightly price before taxes |
| `pricePerNightWithTaxes`, `estimatedStayTotal` | Nightly price with taxes and fees, and that × nights |
| `currency`, `checkIn`, `checkOut`, `nights` | What the prices are for |
| `latitude`, `longitude`, `nearby` | Location and nearby places with travel times |
| `description`, `mentions` | Google's description and what reviews mention |
| `website`, `googleHotelsUrl`, `googleMapsUrl`, `photos` | Links and photos |
| `search`, `position`, `searchUrl` | Which search and rank |

### How much does it cost?

| Hotels | Free & Bronze plans | Silver | Gold and above |
|---|---|---|---|
| 1,000 | $1.00 | $0.90 | $0.80 |
| 10,000 | $10 | $9 | $8 |

Searches that fail are free. Set a **maximum cost per run** in the run options to cap spend.

### Use it with AI agents (MCP)

**Hosted:** add `https://mcp.apify.com?tools=automationnation/google-hotels-scraper` to Claude, ChatGPT, Cursor or another MCP client and sign in with Apify.

**Local (Claude Desktop or Cursor config):**

```json
{
  "mcpServers": {
    "google-hotels": {
      "command": "npx",
      "args": ["-y", "@apify/actors-mcp-server", "--tools", "automationnation/google-hotels-scraper"],
      "env": { "APIFY_TOKEN": "YOUR_APIFY_TOKEN" }
    }
  }
}
```

Then ask, for example: "Find 4-star hotels in Lisbon for 12–15 March under $200 a night, rated 4.5 or better."

**Open WebUI:** the [Google Hotels Search tool](https://github.com/retracn/open-webui-tools/blob/main/google_hotels.py) runs this Actor from Open WebUI, so your models can look up live hotel prices. Paste it under Workspace → Tools and add your Apify token in its Valves.

### Integrations and API

```bash
curl -X POST "https://api.apify.com/v2/acts/automationnation~google-hotels-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"locations":["Paris"],"checkIn":"2026-11-20","checkOut":"2026-11-23"}'
```

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_TOKEN")
run = client.actor("automationnation/google-hotels-scraper").call(run_input={"locations": ["Paris"], "checkIn": "2026-11-20", "checkOut": "2026-11-23"})
for h in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(h["name"], h["pricePerNight"], h["rating"])
```

Schedule it daily for price tracking, and connect Google Sheets, Slack, webhooks, n8n, Make or Zapier through Apify's integrations.

### Switching from the Amadeus Hotel Search API

Amadeus's Self-Service Hotel List and Hotel Search APIs went away with the rest of its self-service portal on 17 July 2026. This Actor covers the common case: hotels in a city or area, with prices for your dates.

| Amadeus Hotel List and Hotel Search | Google Hotels Scraper |
|---|---|
| `cityCode`, or `latitude` and `longitude` | `locations`: a city, area or search, e.g. `Paris` or `Shoreditch, London` |
| `checkInDate`, `checkOutDate` | `checkIn`, `checkOut` |
| `adults` | `adults` |
| `ratings` (stars) | `minHotelClass`, plus `minRating` for guest rating |
| `priceRange` | `maxPricePerNight` |
| `currency` | `currency` |
| `offers[].price.total` | `estimatedStayTotal`, `pricePerNightWithTaxes` |

Differences to know: prices are Google Hotels' lowest prices across booking sites, not bookable offers, and each search returns up to 20 hotels. The Apify free plan's $5 monthly credit covers about 5,000 hotels.

### FAQ

**How many hotels per search?**
Up to 20, the hotels Google lists for that search. Use more specific searches (neighbourhoods, star ratings, "near …") to cover a city.

**Which prices are these?**
Google's lowest partner price for the dates, before and with taxes. Open `googleHotelsUrl` for every partner's price.

**What if I don't set dates?**
Google picks dates (often the next cheap night) and each row says which in `checkIn` and `checkOut`.

**Can I get prices in euros or pounds?**
Set `currency` and `country`. Google may still answer in the currency of where the search runs; `currency` on every row says which.

**Is it legal?**
It reads public Google Hotels results. Use the data in line with the laws and terms that apply to you.

**Guides:** [How to scrape Google Hotels in 2026](https://retracn.github.io/automationnation-actors/guides/how-to-scrape-google-hotels/) · [Google Hotels API in 2026](https://retracn.github.io/automationnation-actors/guides/google-hotels-api/) · [Side-by-side comparison](https://retracn.github.io/automationnation-actors/compare/google-hotels-scrapers/) · [Code examples (Python, JavaScript, MCP)](https://retracn.github.io/automationnation-actors/google-hotels-scraper/)

### More from AutomationNation

- **[Google Maps Leads Scraper](https://apify.com/automationnation/google-maps-leads)**: local businesses with phones, emails and lead scores, any country.
- **[Google Shopping Scraper](https://apify.com/automationnation/google-shopping-scraper)**: prices, stores and reviews for any product search.
- **[Google Images Scraper](https://apify.com/automationnation/google-images-scraper)**: full-size image URLs with size and source.
- **[Google Trends Scraper](https://apify.com/automationnation/google-trends-scraper)**: interest over time and trending searches.

Questions or a missing field? Open an issue on the **Issues** tab; fixes usually ship within a day.

# Changelog

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

# Actor input Schema

## `locations` (type: `array`):

Cities, areas or full searches, one per line: Paris, Shoreditch London, hotels near Times Square, 4 star hotels in Rome. Each line is one Google Hotels search (up to 20 hotels).

## `checkIn` (type: `string`):

YYYY-MM-DD. Set check-in and check-out for exact prices; without them Google picks dates and the rows say which.

## `checkOut` (type: `string`):

YYYY-MM-DD.

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

Guests per room.

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

Google shows up to 20 hotels per search; add more specific searches (areas, star ratings) for more.

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

Only hotels rated at least this.

## `minHotelClass` (type: `string`):

Only hotels with at least this many stars.

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

Only hotels at or under this nightly price, in the results' currency.

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

Two-letter country code for Google (gl), e.g. us, gb, de. It can change currency and partner prices.

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

Optional three-letter currency code (USD, EUR, GBP). Google may still answer in the currency of the search location.

## `onlyPriceDrops` (type: `boolean`):

For scheduled runs: save a hotel only when its nightly price is lower than the last price seen for it, with that previous price on the row. The first run saves every hotel and records the prices; a run with no drops saves nothing and costs almost nothing.

## `monitorName` (type: `string`):

Optional. Keeps a separate price history under this name, e.g. one per trip or client watching the same city.

## Actor input object example

```json
{
  "locations": [
    "Paris"
  ],
  "adults": 2,
  "maxHotelsPerSearch": 20,
  "minRating": "0",
  "minHotelClass": "0",
  "country": "us",
  "onlyPriceDrops": false
}
```

# Actor output Schema

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

No description

## `allData` (type: `string`):

No description

## `summary` (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 = {
    "locations": [
        "Paris"
    ]
};

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

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

```

## MCP server setup

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