# Google Hotels Scraper - Prices, Providers, Ratings & Amenities (`parseforge/google-hotels-price-scraper`) Actor

Scrape Google Hotels for any destination and dates: price per night and total, prices on every booking site, ratings, reviews, class, amenities, location and photos. Export CSV, Excel, JSON or XML.

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

## Pricing

from $3.40 / 1,000 result items

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

![ParseForge Banner](https://raw.githubusercontent.com/ParseForge/apify-assets/main/banner-v4.webp)

## 🏨 Google Hotels Scraper

> 🚀 **Export Google Hotels prices in seconds.** 45 fields per hotel: price per night and total, deal badges, guest ratings, amenities, coordinates and photos, for any destination, dates and guest count.

Google Hotels is the price comparison most travelers check first. This Actor reads the same public results page and returns one clean row per hotel: what it costs for your exact stay, how guests rate it, what it offers and where it is. Turn on the provider option and every row also carries the price on each booking site (Booking.com, Expedia, Hotels.com, the hotel's own site and more), with room types and free-cancellation deadlines.

Each search returns about 18 hotels per Google page and walks as many pages as you ask for. A search for Paris reports about 15,000 places, and a 100-hotel run pulls 100 unique hotels with a price in a few minutes. Results are sorted and filtered by Google itself (lowest price, highest rating, most reviewed, star class, minimum rating, amenities), so you get the same order a traveler would see.

| 🎯 Target Audience | 💡 Primary Use Cases |
|---|---|
| Revenue managers and hotel owners | Compare your rate with the local market every day |
| Travel agencies and OTAs | Find the cheapest booking site for each property |
| Travel startups and analysts | Build price history and seasonality datasets |
| Deal sites and newsletters | Spot hotels priced well below their usual rate |

### 📋 What the Google Hotels Scraper does

- Searches one or many destinations ("Paris", "Times Square New York", "beach hotels in Cancun").
- Prices the exact stay: check-in, check-out, adults, children ages, currency and Google country.
- Sorts and filters like the site: lowest price, highest rating, most reviewed, hotel class, minimum rating, pool, spa, free breakfast, free parking, hot tub, fitness center, and min or max price per night.
- Tracks specific hotels from a Google Hotels link or a property token.
- Optionally adds address, phone, Google place ID and the price on every booking site with room types.

> 💡 **Why it matters:** prices on Google Hotels move daily. A dated, structured export lets you see which hotels are cheap right now, which sites undercut the others, and which properties are on a deal.

### 🎬 Full Demo (🚧 Coming soon)

### 📊 Output

Every hotel is one row. Text a hotel does not publish (for example a star class on a hostel) is returned as `Not Disclosed`, never as an empty value. The address, phone, place ID, cheapest site, free cancellation and provider prices are filled when you switch on "Provider prices, address and phone".

Three real rows from a run (lists shortened here):

```json
[
  {
    "imageUrl": "https://lh3.googleusercontent.com/grass-cs/AABkmLfqf-omHqf61ZaQ9eAWPsH5AZczs5kx-x6Oz_LIXOsPMkzE_Ftk_gPwI9JoUSR1djJUELTHdWqkrvyuFMpe34XqVWxpfvEf5IIhofeeXWSFhMvNSxRx0Hdy6t4pqVhBxvIZTr36=w800-h600-k-no",
    "name": "Hôtel Le Clos Notre-Dame",
    "hotelUrl": "https://www.google.com/travel/hotels/entity/ChkIiISd_s710_ngARoML2cvMWprdngzdmxsEAE?hl=en&gl=us&curr=USD&ts=CAESCgoCCAMKAggDEAAaTwoxEi0yJDB4NDdlNjZlMWYwNmUyYjcwZjoweDQwYjgyYzM2ODhjOTQ2MDoFUGFyaXMaABIaEhQKBwjqDxALGBISBwjqDxALGBQYAjICCAEqEQoJOgNVU0RiAggBGgAiAhgB",
    "propertyToken": "ChkIiISd_s710_ngARoML2cvMWprdngzdmxsEAE",
    "query": "Paris",
    "position": 1,
    "hotelClass": 3,
    "classLabel": "3-star tourist hotel",
    "rating": 4.2,
    "reviewCount": 275,
    "pricePerNight": 173.27,
    "totalPrice": 346.55,
    "currency": "USD",
    "pricePerNightDisplay": "$173",
    "totalPriceDisplay": "$347",
    "nights": 2,
    "checkInDate": "2026-11-18",
    "checkOutDate": "2026-11-20",
    "guests": "2 adults",
    "dealBadge": "DEAL",
    "priceVsUsual": "24% less than usual",
    "freeCancellation": "Not Disclosed",
    "cheapestProvider": "Not Disclosed",
    "address": "Not Disclosed",
    "phone": "Not Disclosed",
    "website": "http://leclosnotredame.com/",
    "latitude": 48.8537007,
    "longitude": 2.3429914,
    "countryCode": "FR",
    "checkInTime": "3:00 PM",
    "checkOutTime": "12:00 PM",
    "googlePlaceId": "Not Disclosed",
    "placeFeatureId": "0x47e671de338edcdf:0xe0f34facefc74208",
    "description": "Traditional hotel offering intimate rooms with modern touches, plus free Wi-Fi & a chic library.",
    "aboutText": "Not Disclosed",
    "amenities": [
      "Breakfast",
      "Free Wi-Fi",
      "Air conditioning",
      "Parking",
      "Full-service laundry",
      "Accessible"
    ],
    "paidAmenities": [
      "Breakfast"
    ],
    "reviewHighlights": [
      {
        "topic": "Location",
        "mentions": 59,
        "sentiment": 0.74
      },
      {
        "topic": "Property",
        "mentions": 58,
        "sentiment": 0.52
      }
    ],
    "ratingBreakdown": [
      {
        "stars": 5,
        "percent": 53,
        "count": 141
      },
      {
        "stars": 4,
        "percent": 29,
        "count": 82
      },
      {
        "stars": 3,
        "percent": 10,
        "count": 29
      },
      {
        "stars": 2,
        "percent": 3,
        "count": 9
      },
      {
        "stars": 1,
        "percent": 5,
        "count": 14
      }
    ],
    "otherRatings": [],
    "nearby": [
      {
        "name": "Sainte-Chapelle",
        "type": "",
        "travel": [
          {
            "mode": "walk",
            "duration": "6 min"
          }
        ]
      },
      {
        "name": "Aéroport de Paris-Charles de Gaulle",
        "type": "",
        "travel": [
          {
            "mode": "transit",
            "duration": "40 min"
          },
          {
            "mode": "drive",
            "duration": "49 min"
          }
        ]
      }
    ],
    "providers": [],
    "images": [
      "https://lh3.googleusercontent.com/grass-cs/AABkmLfqf-omHqf61ZaQ9eAWPsH5AZczs5kx-x6Oz_LIXOsPMkzE_Ftk_gPwI9JoUSR1djJUELTHdWqkrvyuFMpe34XqVWxpfvEf5IIhofeeXWSFhMvNSxRx0Hdy6t4pqVhBxvIZTr36=w800-h600-k-no",
      "https://lh3.googleusercontent.com/grass-cs/AABkmLcr-K2z5xS5uTUpImuMjx8TYhkUuWdNHkdyHOwyVaLUILmeyf3-cTgmNgOWMLF5V83VwgRIklSkOdRlU-WcZMtm_h6MkZ64DKH2theGuRVdXvcmOc_wQibUPSbmKz2LImYldWQYRg=w800-h600-k-no"
    ],
    "scrapedAt": "2026-09-29T14:08:27.969Z",
    "error": null
  },
  {
    "imageUrl": "https://lh3.googleusercontent.com/grass-proxy/AIM7gW1ABElZ0VCG4LGeGu7XAgdBw-SPLFNKuI8dXS2rtbJPnHUWUkr5CJeHMrpfK8w1cAetMt3TuUfgtdcboc7AoG1IJDA4FBHR7iN6Q26Lany1b2hnfFmX9Jobb0FkAeCzZCAJBW_WCpnJPlYNnXLZB4xdxmhxY24BC97VKHIVUSE6cRrMRpcljz4lVQ=w800-h600-k-no",
    "name": "Boutique Hôtel Mareuil Paris",
    "hotelUrl": "https://www.google.com/travel/hotels/entity/ChgI6Pmc-evRkccnGgwvZy8xaGc0eTJiNngQAQ?hl=en&gl=us&curr=USD&ts=CAESCgoCCAMKAggDEAAaTwoxEi0yJDB4NDdlNjZlMWYwNmUyYjcwZjoweDQwYjgyYzM2ODhjOTQ2MDoFUGFyaXMaABIaEhQKBwjqDxALGBISBwjqDxALGBQYAjICCAEqEQoJOgNVU0RiAggBGgAiAhgB",
    "propertyToken": "ChgI6Pmc-evRkccnGgwvZy8xaGc0eTJiNngQAQ",
    "query": "Paris",
    "position": 6,
    "hotelClass": 4,
    "classLabel": "4-star tourist hotel",
    "rating": 4.7,
    "reviewCount": 460,
    "pricePerNight": 147.11,
    "totalPrice": 294.22,
    "currency": "USD",
    "pricePerNightDisplay": "$147",
    "totalPriceDisplay": "$294",
    "nights": 2,
    "checkInDate": "2026-11-18",
    "checkOutDate": "2026-11-20",
    "guests": "2 adults",
    "dealBadge": "DEAL",
    "priceVsUsual": "21% less than usual",
    "freeCancellation": "Not Disclosed",
    "cheapestProvider": "Not Disclosed",
    "address": "Not Disclosed",
    "phone": "Not Disclosed",
    "website": "https://www.hotelmareuil.com/fr/?utm_source=Google&utm_medium=My+Business",
    "latitude": 48.865973999999994,
    "longitude": 2.3675037,
    "countryCode": "FR",
    "checkInTime": "3:00 PM",
    "checkOutTime": "12:00 PM",
    "googlePlaceId": "Not Disclosed",
    "placeFeatureId": "0x47e66e080125337b:0x278e468ebf273ce8",
    "description": "Hip property with modern rooms & suites, plus a bar, a hammam & an exercise room.",
    "aboutText": "Not Disclosed",
    "amenities": [
      "Breakfast",
      "Free Wi-Fi",
      "Air conditioning",
      "Pet-friendly",
      "Fitness center",
      "Parking"
    ],
    "paidAmenities": [],
    "reviewHighlights": [
      {
        "topic": "Wellness",
        "mentions": 16,
        "sentiment": 0.65
      },
      {
        "topic": "Spa",
        "mentions": 13,
        "sentiment": 0.61
      }
    ],
    "ratingBreakdown": [
      {
        "stars": 5,
        "percent": 83,
        "count": 374
      },
      {
        "stars": 4,
        "percent": 13,
        "count": 63
      },
      {
        "stars": 3,
        "percent": 2,
        "count": 11
      },
      {
        "stars": 2,
        "percent": 1,
        "count": 5
      },
      {
        "stars": 1,
        "percent": 1,
        "count": 7
      }
    ],
    "otherRatings": [],
    "nearby": [
      {
        "name": "The Centre Pompidou",
        "type": "",
        "travel": [
          {
            "mode": "drive",
            "duration": "8 min"
          }
        ]
      },
      {
        "name": "République",
        "type": "Subway",
        "travel": [
          {
            "mode": "walk",
            "duration": "5 min"
          }
        ]
      }
    ],
    "providers": [],
    "images": [
      "https://lh3.googleusercontent.com/grass-proxy/AIM7gW1ABElZ0VCG4LGeGu7XAgdBw-SPLFNKuI8dXS2rtbJPnHUWUkr5CJeHMrpfK8w1cAetMt3TuUfgtdcboc7AoG1IJDA4FBHR7iN6Q26Lany1b2hnfFmX9Jobb0FkAeCzZCAJBW_WCpnJPlYNnXLZB4xdxmhxY24BC97VKHIVUSE6cRrMRpcljz4lVQ=w800-h600-k-no",
      "https://lh3.googleusercontent.com/grass-cs/ACvplmPK71kVBK2G9HDnLyxLSSm2T4ar1M6o2Y3E_5XgiF5YAknYr1a8Kv9pdDuVmA6ZBjCcXjhoO5m1DTh0P25VdrNMJR1M-aZJLhT57kBg9tb-lpf7b6k2RFSVpSkxrpRbjq5A6FBB=w800-h600-k-no"
    ],
    "scrapedAt": "2026-09-29T14:08:30.312Z",
    "error": null
  },
  {
    "imageUrl": "https://lh3.googleusercontent.com/grass-cs/AABkmLepBR6UPUL97h6f5iAbFPQRfBhET8uOtjhxC_8DdhooS2gVWwGeafD6Oe44W9F9ZiLRC8_algtWeZnrv_ZajAwC_AnrrgfvLHfW_fsZFKGAZaw7t4WrC05b7o8TuZytNdhoGw_EZw=w800-h600-k-no",
    "name": "Hotel Cosmotel Marais République Paris",
    "hotelUrl": "https://www.google.com/travel/hotels/entity/ChgIvYD_6rn71sr2ARoLL2cvMXhmc24xYzYQAQ?hl=en&gl=us&curr=USD&ts=CAESCgoCCAMKAggDEAAaTwoxEi0yJDB4NDdlNjZlMWYwNmUyYjcwZjoweDQwYjgyYzM2ODhjOTQ2MDoFUGFyaXMaABIaEhQKBwjqDxALGBISBwjqDxALGBQYAjICCAEqEQoJOgNVU0RiAggBGgAiAhgB",
    "propertyToken": "ChgIvYD_6rn71sr2ARoLL2cvMXhmc24xYzYQAQ",
    "query": "Paris",
    "position": 19,
    "hotelClass": 3,
    "classLabel": "3-star tourist hotel",
    "rating": 4.4,
    "reviewCount": 431,
    "pricePerNight": 133.43,
    "totalPrice": 266.85,
    "currency": "USD",
    "pricePerNightDisplay": "$133",
    "totalPriceDisplay": "$267",
    "nights": 2,
    "checkInDate": "2026-11-18",
    "checkOutDate": "2026-11-20",
    "guests": "2 adults",
    "dealBadge": "DEAL",
    "priceVsUsual": "22% less than usual",
    "freeCancellation": "Not Disclosed",
    "cheapestProvider": "Not Disclosed",
    "address": "Not Disclosed",
    "phone": "Not Disclosed",
    "website": "https://www.hotelcosmotel.com/",
    "latitude": 48.8704879,
    "longitude": 2.3545911999999998,
    "countryCode": "FR",
    "checkInTime": "2:00 PM",
    "checkOutTime": "11:00 AM",
    "googlePlaceId": "Not Disclosed",
    "placeFeatureId": "0x47e66e119ab7f26b:0xf6955bdb9d5fc03d",
    "description": "Modest rooms offering flat-screens, free Wi-Fi & minifridges, plus optional breakfast.",
    "aboutText": "Not Disclosed",
    "amenities": [
      "Breakfast",
      "Free Wi-Fi",
      "Air conditioning",
      "Pet-friendly",
      "Restaurant",
      "Kid-friendly"
    ],
    "paidAmenities": [],
    "reviewHighlights": [
      {
        "topic": "Public transit",
        "mentions": 31,
        "sentiment": 0.71
      },
      {
        "topic": "Safety",
        "mentions": 12,
        "sentiment": 0.63
      }
    ],
    "ratingBreakdown": [
      {
        "stars": 5,
        "percent": 63,
        "count": 267
      },
      {
        "stars": 4,
        "percent": 23,
        "count": 101
      },
      {
        "stars": 3,
        "percent": 8,
        "count": 36
      },
      {
        "stars": 2,
        "percent": 2,
        "count": 9
      },
      {
        "stars": 1,
        "percent": 4,
        "count": 18
      }
    ],
    "otherRatings": [],
    "nearby": [
      {
        "name": "The Centre Pompidou",
        "type": "",
        "travel": [
          {
            "mode": "transit",
            "duration": "10 min"
          }
        ]
      },
      {
        "name": "Strasbourg - Saint-Denis",
        "type": "Subway",
        "travel": [
          {
            "mode": "walk",
            "duration": "2 min"
          }
        ]
      }
    ],
    "providers": [],
    "images": [
      "https://lh3.googleusercontent.com/grass-cs/AABkmLepBR6UPUL97h6f5iAbFPQRfBhET8uOtjhxC_8DdhooS2gVWwGeafD6Oe44W9F9ZiLRC8_algtWeZnrv_ZajAwC_AnrrgfvLHfW_fsZFKGAZaw7t4WrC05b7o8TuZytNdhoGw_EZw=w800-h600-k-no",
      "https://lh3.googleusercontent.com/grass-proxy/AIM7gW1c4xzTnlSV20utCKpbEzG3LcSOGGkCAcg-C6EKc8zbgJJVkMVjDY9UGHqNpcqHHoL4lWFwVfEZV4lkRiHYEQ9Wuouh1-owV8LPcRapHNhB-WArtjDCaNKDxcHVVTjxmEYn3gQzZrkwhkQ4WUTwsyQnP-T0SFkIsZJ6s-nYJdiIm81N-E9rbMUa=w800-h600-k-no"
    ],
    "scrapedAt": "2026-09-29T14:08:32.429Z",
    "error": null
  }
]
```

Provider prices (one hotel, shortened):

```json
{
  "name": "Casa do Barão",
  "address": "Rua da Emenda 84, 1200-170 Lisboa, Portugal",
  "phone": "+351 967 944 143",
  "googlePlaceId": "ChIJhfVMNn40GQ0RAut4FihFchs",
  "cheapestProvider": "Vio.com",
  "freeCancellation": "Yes",
  "currency": "EUR",
  "providers": [
    {
      "provider": "Vio.com",
      "pricePerNight": 378.01,
      "totalPrice": 1134.03,
      "link": "https://www.google.com/aclk?sa=l&ai=DChsSEwidseuD_JOXAxWHhFo...",
      "rooms": [
        {
          "roomType": "Standard Room",
          "pricePerNight": 378.02,
          "totalPrice": 1134.05,
          "freeCancellationUntil": "Nov 13 11:59 PM"
        },
        {
          "roomType": "Standard Room",
          "pricePerNight": 567.03,
          "totalPrice": 1701.08,
          "freeCancellationUntil": "Nov 13 11:59 PM"
        }
      ]
    },
    {
      "provider": "Bluepillow.com",
      "pricePerNight": 380.56,
      "totalPrice": 1141.69,
      "link": "https://www.google.com/aclk?sa=l&ai=DChsSEwidseuD_JOXAxWHhFo...",
      "rooms": []
    }
  ],
  "otherRatings": [
    {
      "source": "Tripadvisor",
      "rating": 5,
      "reviewCount": 1134
    }
  ]
}
```

| Group | Fields |
|---|---|
| 🏨 Identity | name, hotelUrl, propertyToken, query, position, hotelClass, classLabel |
| 💵 Price | pricePerNight, totalPrice, currency, pricePerNightDisplay, totalPriceDisplay, nights, checkInDate, checkOutDate, guests, dealBadge, priceVsUsual |
| 👍 Reviews | rating, reviewCount, ratingBreakdown, reviewHighlights, otherRatings |
| 📍 Location | latitude, longitude, address, phone, website, countryCode, googlePlaceId, placeFeatureId, nearby |
| 🛎 Details | amenities, paidAmenities, description, aboutText, checkInTime, checkOutTime, freeCancellation |
| 🛒 Booking sites | cheapestProvider, providers |
| 🖼 Media | imageUrl, images |

### ✨ Why choose this Actor

- **Real dates and guests.** Prices are for the stay you enter, not a generic "from" price.
- **Sorted by Google.** Ask for the cheapest, best rated or most reviewed hotels and get them in that order.
- **Review intelligence.** Topics guests mention (Safety, Breakfast, Cleanliness) with mention counts and a sentiment score, plus the star breakdown.
- **Booking-site comparison.** One switch adds every site's price, room type and free-cancellation deadline (small extra charge per hotel, see the cost question below).
- **Fast and light.** No browser: about 330 KB per page over a datacenter proxy, so runs stay small.
- **Clear failures.** A bad date or an empty search stops the run with a message instead of finishing with zero rows.

### 📈 How it compares to alternatives

| | This Actor | Price-monitor Actors | SERP API wrappers |
|---|---|---|---|
| Search by destination | Yes | Usually one hotel per input | Yes |
| Dates, adults, children, currency | Yes | Dates only | Yes |
| Sort and filters | Sort, class, rating, 6 amenities, price | No | Some |
| Booking-site prices | Optional per hotel | Yes | Extra call |
| Review topics with sentiment | Yes | No | No |
| Deals vs usual price | Yes | No | Partly |
| Browser needed | No | Varies | No |

Limits stated plainly: Google returns about 18 hotels per page, dates must be in the future and less than 330 days away, a stay is up to 60 nights, and the amenities shown on each row are the ones Google prints on the result card. Vacation rentals that Google mixes into some results have no star class and no booking-site list, so they carry no provider charge.

### 🚀 How to use

1. Create a free Apify account with $5 credit: [sign up here](https://console.apify.com/sign-up?fpr=vmoqkp).
2. Open the Actor and add one or more destinations.
3. Set check-in, check-out, guests and currency.
4. Pick a sort order and any filters, then set Max Items.
5. Click Start and download the dataset as CSV, Excel, JSON or XML.

### 💼 Business use cases

**Rate benchmarking.** Run your city every morning, sorted by rating, and compare your nightly rate with the five nearest competitors.

**Cheapest-site finder.** Turn on provider prices and see which booking site is lowest for each hotel and whether free cancellation is offered.

**Deal alerts.** Filter rows where `dealBadge` is GREAT DEAL or `priceVsUsual` shows a large drop, then post them to a newsletter or Slack.

**Market research.** Pull 500 hotels per city with class, rating and price to build supply and price maps by neighborhood.

### 🔌 Automating Google Hotels Scraper

Schedule the Actor on Apify and send the dataset to Make, Zapier, Slack, Airbyte, GitHub or Google Drive. A daily run with the same dates builds a price history you can chart.

### 🌟 Beyond business use cases

**Research.** Study hotel pricing against events and seasons. **Personal.** Compare a shortlist of hotels for a trip. **Non-profit.** Find affordable lodging for groups and conferences. **Experimentation.** Test pricing models on a live, structured dataset.

### 🤖 Ask an AI assistant about this scraper

Paste a few rows into your AI assistant and ask: "Which of these hotels is the best value for 4-star quality?" or "Which booking site is cheapest most often?".

### ❓ Frequently Asked Questions

#### 💸 Is the price per night with taxes?

Yes. It is the price Google shows for your dates, with taxes and fees, in the currency you choose.

#### 📅 Can I search past or far-future dates?

No. Google prices future stays only, up to 330 days ahead and up to 60 nights.

#### 👨‍👩‍👧 Do children change the price?

Yes. Add one age per child and the price reflects the occupancy.

#### 🔢 How many hotels can I get?

Google returns about 18 per page and the Actor keeps paging until Max Items or the page limit. Big cities give several hundred.

#### 🛒 How do I get the price on every booking site?

Switch on "Provider prices, address and phone". Each hotel then costs one extra page, so runs are slower, and it has its own small charge (see the next question).

#### 💸 How much does it cost?

Pay per event. A plain hotel row is the "Hotel row" event: $0.0010 per hotel on the Free plan, going down to $0.0008 on Gold and above. With "Provider prices, address and phone" on, each hotel whose provider details came back also triggers one "Hotel provider details" event: $0.0035 per hotel on Free, down to $0.0031 on Gold and above.

| Per hotel | Free plan | Gold plan |
|---|---|---|
| Plain row | $0.0010 | $0.0008 |
| Row with provider details | $0.0045 | $0.0039 |

The add-on is charged only for hotels where booking-site prices, address, phone or place ID were actually delivered. It is not charged when the option is off, for hotels Google returns without provider details (some vacation rentals), or for error rows. Example: 100 hotels on the Free plan cost $0.10 plain, or up to $0.45 with provider details.

#### 🏷 What are Deal badges?

Google's own labels: GREAT DEAL, DEAL and GREAT PRICE, plus how far the price sits from the usual price.

#### 🏠 Are vacation rentals included?

Google sometimes mixes them into results. They come back as rows without a star class and without a booking-site list.

#### 🌍 Why does the country matter?

It decides which booking sites and offers Google shows. Pick the market you want to compare.

#### ❌ What happens with a wrong date?

The run stops with a clear message and no charge for rows.

#### 🔁 Can I track one hotel over time?

Yes. Paste its Google Hotels link (or the propertyToken from a previous run) into Hotel links and schedule the run. The address, phone and booking-site prices of a linked hotel come with the provider option, like any other row.

#### 🧭 What does "Not Disclosed" mean?

Google does not publish that value for the hotel, for example a star class on a hostel.

### 🔌 Integrate with any app

Use the Apify API, webhooks or the integrations for Make, Zapier, Airbyte and Google Sheets to move the data wherever you need it.

### 🔗 Recommended Actors

- [Booking.com Hotels Scraper](https://apify.com/parseforge/booking-com-hotels-scraper) for Booking.com listings and reviews.
- [Hotel Booking Sites Direct Hotel Websites Scraper](https://apify.com/parseforge/hotel-booking-sites-direct-hotel-websites-scraper) for prices straight from hotel websites.

> 💡 **Pro Tip:** browse the complete [ParseForge collection](https://apify.com/parseforge) for more scrapers.

**🆘 Need Help?** [Open our contact form](https://tally.so/r/BzdKgA)

> **⚠️ Disclaimer:** this Actor is an independent tool and is not affiliated with Google. It only collects publicly available data.

# Actor input Schema

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

One search per line: a city, a neighborhood, a landmark or a full phrase such as "Paris", "Times Square New York" or "beach hotels in Cancun". Plain destinations are searched as "hotels in <destination>". Each search returns Google Hotels results ranked the way Google shows them (or sorted by your choice below).

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

Track specific hotels: paste Google Hotels links that contain /travel/hotels/entity/... or the propertyToken value from a previous run. Each link returns one row with the hotel's price for your dates. Turn on 'Provider prices, address and phone' to also get its address, phone and every booking provider (extra charge per hotel).

## `maxItems` (type: `integer`):

Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000

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

Check-in date as YYYY-MM-DD. Leave empty to use 14 days from today. Must be in the future and less than 330 days away.

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

Check-out date as YYYY-MM-DD. Leave empty for a one-night stay. Up to 60 nights.

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

Number of adults (1 to 12). Prices change with occupancy.

## `childrenAges` (type: `array`):

One age (0 to 17) per child, for example 4 and 9. Leave empty for no children.

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

Currency of every price in the results.

## `countryCode` (type: `string`):

The Google country site the search runs on. It decides which booking providers and offers Google shows, so pick the market you want to compare.

## `sortBy` (type: `string`):

Google ranking of the results. Lowest price returns the cheapest hotels first.

## `hotelClasses` (type: `array`):

Only these star classes. Leave empty for all.

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

Only hotels rated at least this high by guests.

## `amenities` (type: `array`):

Hotels must offer all the selected amenities.

## `minPrice` (type: `integer`):

Skip hotels cheaper than this, in the selected currency. 0 means no minimum.

## `maxPrice` (type: `integer`):

Skip hotels above this price per night, in the selected currency. 0 means no maximum.

## `onlyWithPrice` (type: `boolean`):

Skips hotels Google shows without a rate for your dates (usually sold out).

## `includeProviderPrices` (type: `boolean`):

Adds the address, phone, Google place ID, the price on every booking site (Booking.com, Expedia, Hotels.com, the hotel itself and more) with room types and free-cancellation deadlines, and other rating sources. Extra cost: one 'Hotel provider details' charge per hotel that comes back with these details, about $0.0035 on the Free plan ($0.0031 on Gold), on top of the normal hotel row. Nothing extra when this is off or when Google gives no details for a hotel.

## `maxPagesPerQuery` (type: `integer`):

Google returns about 18 hotels per page. Raise it to go deeper on big cities.

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

Datacenter proxy is enough for Google Hotels. The Actor moves to residential by itself if Google starts blocking, when your plan includes it.

## Actor input object example

```json
{
  "searchQueries": [
    "Paris"
  ],
  "maxItems": 10,
  "adults": 2,
  "currency": "USD",
  "countryCode": "us",
  "sortBy": "relevance",
  "minRating": "any",
  "minPrice": 0,
  "maxPrice": 0,
  "onlyWithPrice": true,
  "includeProviderPrices": false,
  "maxPagesPerQuery": 25,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

Key fields

## `fullData` (type: `string`):

Complete dataset with all 45 fields

# 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": [
        "Paris"
    ],
    "maxItems": 10,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/google-hotels-price-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": ["Paris"],
    "maxItems": 10,
    "proxyConfiguration": { "useApifyProxy": True },
}

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

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parseforge/google-hotels-price-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/DPpLDK0oRc4DkZ7dV/builds/r11Zge6YapsQ0ieOD/openapi.json
