# Hotel Review Sentiment Scraper with AI Analysis (`jurassic_jove/hotel-review-sentiment-scraper`) Actor

Scrape hotel reviews from TripAdvisor, Booking.com & Google Maps in one run. AI cross-platform sentiment analysis: sentimentScore, topComplaints, topPraises, trendDirection & reputationRisk. $0.06/review.

- **URL**: https://apify.com/jurassic\_jove/hotel-review-sentiment-scraper.md
- **Developed by:** [Data Runner](https://apify.com/jurassic_jove) (community)
- **Categories:** AI, Travel, E-commerce
- **Stats:** 4 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $60.00 / 1,000 charged for each review analyzeds

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

## Hotel Review Sentiment Scraper with AI Analysis (TripAdvisor + Booking.com + Google Maps)

The most comprehensive **hotel review scraper** and **hotel sentiment analysis** tool on Apify. Scrape reviews from **TripAdvisor**, **Booking.com**, and **Google Maps** in a single run, then get instant **AI review analysis** with cross-platform reputation insights. Built for **hotel reputation monitoring**, this Actor combines multi-platform data collection with intelligent sentiment scoring — so you can stop guessing and start managing your online reputation with data.

### What makes it different

Most hotel scrapers pull reviews from one platform. This Actor scrapes **three major travel platforms simultaneously** and then runs AI-powered analysis across all reviews combined:

- **3 platforms, 1 run** — TripAdvisor, Booking.com, and Google Maps reviews collected together. No need to run separate scrapers and merge data manually.
- **Cross-platform AI analysis** — Sentiment scores are calculated per platform AND overall, so you can see exactly where your reputation is strong or weak.
- **Platform consistency detection** — The unique `platformConsistency` field tells you whether your reviews tell the same story across platforms, or if there are red flags like rating divergence that need attention.

### Who is it for

- **Hotel managers & GMs** — Monitor your property's online reputation across all major booking platforms from a single dashboard-ready dataset.
- **Hospitality brands & chains** — Track sentiment trends across your portfolio. Identify properties that need attention before small issues become PR problems.
- **Travel agencies** — Vet hotel partners with real review data. Recommend properties backed by cross-platform sentiment analysis, not just star ratings.
- **OTA analysts** — Compare review sentiment across platforms to detect rating manipulation, review gating, or inconsistent guest experiences.
- **Reputation management firms** — Deliver data-driven reports to hospitality clients with executive summaries, risk scores, and trend analysis included automatically.

### Input fields

| Field | Type | Description | Default |
|-------|------|-------------|---------|
| `hotelName` | String | Name of the hotel to analyze. Used for labeling results. | — |
| `hotelUrls` | Array | Direct URLs to the hotel on TripAdvisor, Google Maps, and/or Booking.com. One URL per platform. | `[]` |
| `platforms` | Array | Which platforms to scrape: `tripadvisor`, `googlemaps`, `booking`. | All three |
| `maxReviewsPerPlatform` | Integer | Maximum reviews to collect from each platform (1–500). | `50` |
| `language` | String | Filter reviews by language code (e.g. `en`, `es`, `de`). Leave empty for all. | All languages |
| `dateRange` | Enum | Time window for reviews: `30days`, `90days`, `365days`, or `all`. | `all` |

### Output fields

Each run produces a dataset item with the hotel's reviews and a complete AI-generated sentiment analysis:

#### Review data (per review)

| Field | Description |
|-------|-------------|
| `reviewText` | Full review text as written by the guest |
| `rating` | Star rating (1–5 scale) |
| `date` | Review date (ISO format) |
| `platform` | Source platform: `tripadvisor`, `googlemaps`, or `booking` |
| `authorName` | Reviewer's display name |
| `isVerified` | Whether the review is marked as verified |
| `companyResponse` | Hotel management's response to the review (if any) |

#### AI sentiment analysis (per hotel, across all platforms)

| Field | Type | Description |
|-------|------|-------------|
| `overallSentimentScore` | Number (1–10) | Overall sentiment across all platforms. 10 = most positive. |
| `sentimentByPlatform` | Object | Individual sentiment score for each platform scraped (e.g. `{"tripadvisor": 7, "booking": 8}`). |
| `topComplaints` | Array | Up to 5 most common complaint themes identified across all reviews. |
| `topPraises` | Array | Up to 5 most common praise themes identified across all reviews. |
| `trendDirection` | String | `improving`, `declining`, or `stable` — based on chronological sentiment shift. |
| `reputationRisk` | Number (1–10) | Risk score indicating how vulnerable the hotel's reputation is. 10 = highest risk. |
| `responseRateScore` | Number (1–10) | How actively the hotel responds to guest reviews. 10 = excellent engagement. |
| `executiveSummary` | String | 2–3 sentence summary of the hotel's overall reputation, ready for reports. |
| `platformConsistency` | String | Assessment of whether reviews are consistent across platforms or show significant divergence. |

### Pricing

**$0.06 per review analyzed** — pay only for results, not for runtime.

| Reviews | Cost |
|---------|------|
| 50 reviews (default per platform) | $3.00 |
| 150 reviews (50 x 3 platforms) | $9.00 |
| 500 reviews | $30.00 |

The AI analysis is included in the per-review price. No hidden charges, no platform fees.

### How it works

1. **Provide hotel URLs** — Paste the hotel's TripAdvisor, Booking.com, and/or Google Maps page URLs. Select which platforms to scrape.
2. **Reviews are collected** — The Actor visits each platform, navigates to the reviews section, and extracts review text, ratings, dates, author info, and management responses.
3. **AI analyzes the reviews** — All collected reviews are sent to an AI engine that performs cross-platform sentiment analysis, identifies complaint and praise patterns, calculates risk scores, and generates an executive summary.
4. **Get structured results** — The output is a clean JSON dataset with every review plus the full AI enrichment object, ready for dashboards, reports, or further processing.

### Supported platforms

| Platform | What's extracted | URL format |
|----------|-----------------|------------|
| **TripAdvisor** | Review text, rating, date, author, management response | `tripadvisor.com/Hotel_Review-*` |
| **Booking.com** | Positive/negative text, rating (converted to 1–5), date, author, verified status, management response | `booking.com/hotel/*` |
| **Google Maps** | Review text, rating, relative date (parsed), author, management response | `google.com/maps/place/*` |

### Tips for best results

- **Always provide direct URLs** — The scraper works best with direct hotel page URLs rather than search result pages. Copy the URL from your browser when you're on the hotel's review page.
- **Start with a small test** — Run with `maxReviewsPerPlatform: 5` first to verify the URLs work and the output format meets your needs.
- **Use date ranges for monitoring** — Set `dateRange` to `30days` or `90days` for regular reputation monitoring. Use `all` for initial audits.
- **Compare platforms** — The `sentimentByPlatform` and `platformConsistency` fields are most valuable when you scrape at least 2 platforms. A big score gap between platforms often reveals actionable insights.
- **Feed results into dashboards** — The structured JSON output is designed for direct import into BI tools, Google Sheets, or custom dashboards.
- **Schedule regular runs** — Set up a weekly or monthly schedule to track `trendDirection` over time and catch reputation shifts early.

***

Built by [data-runner.dev](https://data-runner.dev)

# Actor input Schema

## `hotelName` (type: `string`):

Name of the hotel to analyze. Used for labeling results and search context.

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

Direct URLs to the hotel on TripAdvisor, Google Maps, and/or Booking.com. Provide one URL per platform.

## `platforms` (type: `array`):

Which platforms to scrape. Defaults to all three. Valid values: tripadvisor, googlemaps, booking.

## `maxReviewsPerPlatform` (type: `integer`):

Maximum number of reviews to scrape from each platform.

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

Filter reviews by language code (e.g. 'en', 'es', 'de'). Leave empty for all languages.

## `dateRange` (type: `string`):

Only include reviews from this time window.

## Actor input object example

```json
{
  "hotelUrls": [],
  "platforms": [
    "tripadvisor",
    "googlemaps",
    "booking"
  ],
  "maxReviewsPerPlatform": 50,
  "dateRange": "all"
}
```

# Actor output Schema

## `hotelSentimentAnalysis` (type: `string`):

Dataset containing hotel reviews and AI-powered cross-platform sentiment analysis.

# 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 = {
    "hotelName": "",
    "hotelUrls": [],
    "platforms": [
        "tripadvisor",
        "googlemaps",
        "booking"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("jurassic_jove/hotel-review-sentiment-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 = {
    "hotelName": "",
    "hotelUrls": [],
    "platforms": [
        "tripadvisor",
        "googlemaps",
        "booking",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("jurassic_jove/hotel-review-sentiment-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "hotelName": "",
  "hotelUrls": [],
  "platforms": [
    "tripadvisor",
    "googlemaps",
    "booking"
  ]
}' |
apify call jurassic_jove/hotel-review-sentiment-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=jurassic_jove/hotel-review-sentiment-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/IZgQaytN58ZjOswrh/builds/aKMCFXtDLe3a6i8MX/openapi.json
