# Hotel Review Aggregator (`h_reviews/hotel-review-aggregator`) Actor

Add Google Maps place IDs or URLs and get hotel reviews from Tripadvisor, Yelp, Google Maps, Expedia, Hotels.com, Booking.com, Airbnb in one dataset. Export reviews in JSON, CSV, HTML, use API, schedule and monitor runs or integrate reviews data with other tools.

- **URL**: https://apify.com/h\_reviews/hotel-review-aggregator.md
- **Developed by:** [Hospitality](https://apify.com/h_reviews) (Apify)
- **Categories:** Travel
- **Stats:** 614 total users, 34 monthly users, 100.0% runs succeeded, 22 bookmarks
- **User rating**: 4.05 out of 5 stars

## Pricing

Pay per event

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

### 🏨 What is Hotel Reviews Aggregator?

Hotel Reviews Aggregator is designed to scrape hotel reviews across 7 hotel review sites: Airbnb, Tripadvisor, Yelp, Google Maps, Expedia, Hotels.com and Booking.com. The scraper extracts the reviews based on your startUrls and startIds. It is an [Actor bundle](https://blog.apify.com/apify-power-actors/) created by combining scrapers from seven most popular hotel review platforms.

#### What can you accomplish with this Hotel Reviews Aggregator?

🏠 Extract hotel reviews data **by Google Place URL or Google Place ID**

⭐️ Extract **review text, place address, rating, date, reviewer's name** in one go

🍱 Aggregate reviews from **multiple platforms into one dataset**

👀 Choose **how many platforms to scrape reviews from** — just a few or all of them at once

🗓 Prefilter scraped reviews **by date**

🦾 Use scraped data as **hotel reviews API**

⬇️ **Download reviews data** in Excel, CSV, JSON, XML, and other formats

### 🚪 How to use Hotel Review Aggregator

It's easy to extract reviews across different review sites with Hotel Reviews Aggregator. Follow these steps:

1. Find Hotel Review Aggregator.
2. Add the Google Place URLs or Google Place IDs
3. Choose the target review websites you want to scrape reviews from.
4. Click "Start" and wait for the data to be extracted.
5. Export your reviews dataset in JSON, XML, CSV, Excel, or HTML or using API.

### ⬇️ Input

To search for hotel reviews, the input for Hotel Reviews Aggregator should be **Google Place URLs or Google Place IDs**. You can add queries or URLs one by one or all at once. Here's an example of an input with Place ID: "ChIJV98mG-aUC0cRFRxITFMotnk", for all review sites from the start of the year.

```json
{
    "reviewsFromDate": "2024-01-01",
    "scrapeReviewPictures": true,
    "scrapeReviewResponses": true,
    "startIds": [
        "ChIJV98mG-aUC0cRFRxITFMotnk"
    ]
}
```

You can input data by filling out fields, using JSON, or programmatically via an API.

### ⬆️ Output sample

The results will be wrapped into a dataset which you can find in the **Output** tab. The full information about each review comes from the target review website. Each place is uniquely identified through the `googleMapsPlaceId`.

You can preview all the fields in the **Storage** tab and choose the format in which to export the hotel reviews you've extracted: JSON, CSV, Excel, or HTML table. Here below is the same sample dataset in JSON:

```json
[
    {
        "googleMapsPlaceId": "ChIJV98mG-aUC0cRFRxITFMotnk",
        "placeName": "Four Seasons Hotel Prague",
        "placeAlternateNames": [],
        "placeUrl": "https://www.expedia.com/Prague-Hotels-Four-Seasons-Hotel-Prague.h580304.Hotel-Information",
        "placeAddress": "Veleslavínova 1098/2a, 110 00 Josefov, Czechia",
        "provider": "expedia",
        "reviewId": "670ecbc8bfd3ad28c2ba9bc4",
        "reviewUrl": null,
        "reviewTitle": "",
        "reviewText": "They go the extra mile, they think of every detail 😘😘😘😘😘😘",
        "reviewDate": "2024-10-15T00:00:00.000Z",
        "reviewRating": "10",
        "authorName": "Orbelina, Bloomfield",
        "reviewImages": [],
        "reviewResponses": []
    },
    {
        "googleMapsPlaceId": "ChIJV98mG-aUC0cRFRxITFMotnk",
        "placeName": "Four Seasons Hotel Prague",
        "placeAlternateNames": [],
        "placeUrl": "https://www.tripadvisor.com/Hotel_Review-g274707-d275507-Reviews-Four_Seasons_Hotel_Prague-Prague_Bohemia.html",
        "placeAddress": "Veleslavínova 1098/2a, 110 00 Josefov, Czechia",
        "provider": "tripadvisor",
        "reviewId": "944951222",
        "reviewUrl": "https://www.tripadvisor.com/ShowUserReviews-g274707-d275507-r944951222-Four_Seasons_Hotel_Prague-Prague_Bohemia.html",
        "reviewTitle": "Perfecto en todo",
        "reviewText": "Aprovechsmos que teniamos tres dias de vacaciones y nos fuimos de escapada a Praga . Como eran pocos día necesitábamos un hotel céntrico que nos permitiera conocer la ciudad pero sin agobios, por eso elegimos este hotel y fue la mejor decisión.  Llegamos al hotel y en 5 minutos ya estábamos viendo el reloj astronómico dar la hora. Te permite visitar todos los sitios de Praga andando y sin cansarte, al volver te está esperando un maravilloso spa para relajarte en la piscina y si no quieres volver a salir el restaurante es excepcional.\nLa habitación amplia, cómoda y el baño también, con todas las características habituales de un cinco estrellas. El servicio muy atento y profesional.\nLa experiencia resultó perfecta gracias a este hotel tan bien situado. Si estás buscando un hotel en Praga este es el mejor, descanso y comodidad asegurado.",
        "reviewDate": "2024-04-02",
        "reviewRating": 5,
        "authorName": "Rosariomb",
        "reviewImages": [
            "https://media-cdn.tripadvisor.com/media/photo-m/1280/2b/c5/c6/ec/caption.jpg",
            "https://media-cdn.tripadvisor.com/media/photo-m/1280/2b/c5/c6/eb/caption.jpg",
            "https://media-cdn.tripadvisor.com/media/photo-m/1280/2b/c5/c6/ea/caption.jpg"
        ],
        "reviewResponses": [
            "Dear Rosariomb,\n\nThank you very much for choosing Four Seasons Hotel Prague for your recent visit. I was delighted to read that you enjoyed your stay at our property. Four seasons Hotel Prague indeed has a central location, thus our guests can reach all the historical sites in the city center in a comfortable manner. Providing exceptional experiences is our top priority, and we are thrilled to know that we met your expectations.\n\nWe look very much forward to welcoming you back on your next visit should you decide to come back.\n\nWarmest wishes,\nMonica Eisen\nGeneral Manager"
        ]
    },
    {
        "googleMapsPlaceId": "ChIJV98mG-aUC0cRFRxITFMotnk",
        "placeName": "Four Seasons Hotel Prague",
        "placeAlternateNames": [],
        "placeUrl": "https://www.airbnb.com/rooms/689795328429286180",
        "placeAddress": "Veleslavínova 1098/2a, 110 00 Josefov, Czechia",
        "provider": "airbnb",
        "reviewId": "1255004564769009617",
        "reviewUrl": "https://www.airbnb.com/rooms/689795328429286180/reviews",
        "reviewTitle": null,
        "reviewText": "Very charming apartment with so much character. Very clean and comfortable. Great area in the middle of old town, very easy to get everywhere that we wanted to go. The bathroom was very clean and functional but scent of sewage presumably because the building is historic. We kept the door closed and it did not interfere with our stay.",
        "reviewDate": "2024-09-27T13:50:02.000Z",
        "reviewRating": 5,
        "authorName": "Amy",
        "reviewImages": [],
        "reviewResponses": []
    },
]
```

### 🛠️ Want more tools for scraping hotel reviews?

This scraper is an [Actor bundle](https://blog.apify.com/apify-power-actors/), named so because it combines seven different Actors into one. You can of course scrape each hotel review site separately using a designated Actor. Hotel Review Aggregator combines the results of scrapers from the following websites:

<table>
            <tr>
                <th>Reviews site</th>
                <th>Scraper</th>
            </tr>
            <tr>
                <td>🥂 Yelp</td>
                <td><a href="https://apify.com/tri_angle/yelp-scraper">Yelp Scraper</a></td>
            </tr>
            <tr>
                <td>📍 Google Maps</td>
                <td><a href="https://apify.com/compass/crawler-google-places">Google Maps Scraper</a></td>
            </tr>
            <tr>
                <td>🏨 Expedia & Hotels.com</td>
                <td><a href="https://apify.com/tri_angle/expedia-hotels-com-reviews-scraper">Expedia & Hotels.com reviews scraper</a></td>
            </tr>
            <tr>
                <td>🌴 Tripadvisor</td>
                <td><a href="https://apify.com/maxcopell/tripadvisor-reviews">Tripadvisor Reviews Scraper</a></td>
            </tr>
            <tr>
                <td>📘 Booking.com</td>
                <td><a href="https://apify.com/voyager/booking-reviews-scraper">Booking Reviews Scraper</a></td>
            </tr>
            <tr>
                <td>🏠 Airbnb</td>
                <td><a href="https://apify.com/tri_angle/airbnb-reviews-scraper">Airbnb Reviews Scraper</a></td>
            </tr>
    </table>

If you want to check out more Actor bundles, you might be interested in 🤔 [Social Media Sentiment Analysis Tool](https://apify.com/tri_angle/social-media-sentiment-analysis-tool), 📱 [Social Media Finder](https://apify.com/tri_angle/social-media-finder) or 🍲 [Restaurant Review Aggregator](https://apify.com/tri_angle/restaurant-review-aggregator)

### ❓FAQ

#### How does Hotel Review Aggregator work?

First, the scraper identifies places on Google Maps based on your input. The places found on Google Maps serve as the source of truth, meaning every extracted review will be linked to a place listed on Google Maps. Next, the Aggregator uses these identified places as input to scrape URLs for the same places on targeted review sites. Once the URLs from the review sites are gathered, they can be used as input for review scrapers to extract detailed reviews.

#### Is it legal to scrape hotel reviews?

Our [scrapers](https://apify.com/tri_angle) are ethical and **do not extract any private user data**. They only extract what the user has chosen to share publicly. However, you should be aware that your results could contain personal data such as names. You should not scrape personal data unless you have a legitimate reason to do so.

If you're unsure whether your reason is legitimate, consult your lawyers. You can also read our blog post on the [legality of web scraping](https://blog.apify.com/is-web-scraping-legal/) and [ethical scraping](https://blog.apify.com/what-is-ethical-web-scraping-and-how-do-you-do-it/).

#### Can I use this Hotel Aggregator as a Hotel Review API?

Yes, you can use the Apify API to access data scraped by Hotel Review Aggregator programmatically. The API allows you to manage, schedule, and run Apify Actors, access datasets, monitor performance, get results, create and update Actor versions, and more.

#### Can I integrate Hotel Reviews Aggregator with other apps?

Yes. Hotel Reviews Aggregator can be connected with almost any cloud service or web app thanks to the integrations available on the Apify platform. You can **[integrate your data](https://apify.com/integrations) with Zapier, Slack, Make, Airbyte, GitHub, Google Drive, LangChain**, and more.

You can also use [webhooks](https://docs.apify.com/integrations/webhooks) to carry out an action whenever an event occurs, e.g., get a notification whenever Hotel Reviews Aggregator successfully finishes a run.

#### Your feedback

We’re always working on improving the performance of our Actors. So if you’ve got any technical feedback for this Review Aggregator or simply found a bug, please create an issue on the Actor’s Issues tab.

# Actor input Schema

## `startUrls` (type: `array`):

The URLs of the Google Maps pages you want to start from.

## `startIds` (type: `array`):

Google Maps IDs to start from.

## `providers` (type: `array`):

Select the providers to scrape for reviews. Even if you deselect Google Maps, it will still be used to scrape the places at the beginning. If omitted, all the providers will be automatically selected.

## `reviewsFromDate` (type: `string`):

Scrape only reviews from a given date. Some providers may not be compatible with this feature.

## `scrapeReviewPictures` (type: `boolean`):

Add review pictures into the output.

## `scrapeReviewResponses` (type: `boolean`):

Add owner's responses to reviews into the output.

## Actor input object example

```json
{
  "scrapeReviewPictures": false,
  "scrapeReviewResponses": false
}
```

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("h_reviews/hotel-review-aggregator").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("h_reviews/hotel-review-aggregator").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 '{}' |
apify call h_reviews/hotel-review-aggregator --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,h_reviews/hotel-review-aggregator"
        }
    }
}

```

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/JrkmK5aWFWFqccBEX/builds/566lu3Vd4auttpvHL/openapi.json
