# TripAdvisor Reviews Scraper — Search & Monitor (`zenomastro/tripadvisor-reviews-reliable`) Actor

TripAdvisor reviews scraper for hotels, restaurants, attractions, activities, airlines and cruises. Discover places by search or location ID, filter by rating, language, date, traveler type, keyword, helpful votes and owner replies, export summaries, use proxy fallback and monitor only new reviews.

- **URL**: https://apify.com/zenomastro/tripadvisor-reviews-reliable.md
- **Developed by:** [Rosario Vitale](https://apify.com/zenomastro) (community)
- **Categories:** Travel, Business, Automation
- **Stats:** 2 total users, 1 monthly users, 75.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.50 / 1,000 tripadvisor reviews

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/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

## TripAdvisor Reviews Scraper — Search, Cruises & Monitor

### Why use this Actor?

TripAdvisor reviews scraper for hotels, restaurants, attractions, airlines and cruises. Use direct URLs, location IDs or place/brand/destination search; export ratings, reviewer/trip data, subratings, owner replies, photos and LLM-ready Markdown, then filter and monitor new reviews.

#### What you can do

- **TripAdvisor place URLs** — Direct TripAdvisor Hotel, Restaurant, Attraction/Activity, Airline or Cruise review URLs. Can be combined with location IDs and search discovery.
- **Maximum reviews per place** — Maximum matching paid review rows emitted for each unique TripAdvisor place.
- **Maximum total reviews** — Hard result cap across all places for predictable runtime and spend.
- **Ratings** — Optional 1-5 rating filter. Empty means all ratings.
- **Review languages** — Optional ISO language codes such as en, it, de, fr. Each language is fetched as a separate source slice for better coverage.
- **Published after** — Optional inclusive lower boundary: YYYY-MM-DD or ISO 8601.
- **Published before** — Optional inclusive upper boundary: YYYY-MM-DD or ISO 8601.
- **Review text contains** — Optional case-insensitive keyword across title and review text. Filtered rows are not billed.
- **Traveler types** — Optional TripAdvisor traveler types such as COUPLES, FAMILY, FRIENDS, SOLO, BUSINESS.
- **Minimum helpful votes** — Only emit reviews with at least this many helpful votes.
- **Owner/management reply** — Return any reviews, only reviews with a management reply, or only reviews without one.
- **Output order** — Preserve TripAdvisor source order or sort collected matching rows before output.

#### Best for

- Travel reputation monitoring.
- Hotel and restaurant research.
- Destination intelligence.
- Review datasets.

#### FAQ

**What is this Actor for?**\
It is designed for travel reputation monitoring, hotel and restaurant research, destination intelligence.

**Can I run it on a schedule?**\
Yes. You can schedule Actor runs on Apify and send the resulting dataset into automations, webhooks, storage, or downstream APIs.

**How do I control cost and run size?**\
Use the input limits and filters shown in the Actor input form. The Actor applies bounded defaults and hard caps so large jobs remain predictable.

#### Search keywords

tripadvisor reviews scraper, tripadvisor review scraper github, tripadvisor review scraper free, apify tripadvisor reviews scraper, can tripadvisor reviews be traced, can tripadvisor reviews be trusted, tripadvisor reviews api, get tripadvisor reviews api, tripadvisor review express api, tripadvisor do a review, tripadvisor write a review, tripadvisor make a review, are tripadvisor reviews reliable, tripadvisor

Extract public TripAdvisor reviews for hotels, restaurants, attractions/activities, and airlines into clean structured records for hospitality analytics, reputation monitoring, destination research, competitor analysis, customer-experience workflows, and AI/LLM pipelines.

The Actor uses TripAdvisor's current public review data flow directly instead of rendering every review page in a browser. This keeps runs fast and inexpensive while still returning rich review, traveler, place, photo, and management-response metadata.

### What you get

Successful review rows can include:

- TripAdvisor rating, title, full review text, language, published and created dates
- reviewer display name, username, verification state, profile URL, avatar, hometown, and contribution count
- traveler type and stay date
- helpful-vote count
- owner/management response and response date when exposed
- public review photos and photo URLs
- additional sub-ratings when exposed
- place ID, name, place type, category, canonical source URL, and review URL
- stable review IDs for deduplication
- scan/runtime metadata for reproducible pipelines

Optional free `place_summary` rows include TripAdvisor's total public review count and place metadata.

### Supported TripAdvisor URLs

- Hotel review pages
- Restaurant review pages
- Attraction and activity review pages
- Airline review pages
- localized TripAdvisor domains such as `.it`, `.co.uk`, and others

### Input example

```json
{
  "placeUrls": [
    "https://www.tripadvisor.com/Attraction_Review-g274772-d2725527-Reviews-Krawl_Through_Krakow_Pub_Crawl-Krakow_Lesser_Poland_Province_Southern_Poland.html"
  ],
  "maxReviewsPerPlace": 500,
  "maxTotalReviews": 5000,
  "ratings": [],
  "languageCodes": [],
  "reviewedAfter": "",
  "reviewedBefore": "",
  "containsText": "",
  "tripTypes": [],
  "minHelpfulVotes": 0,
  "ownerReply": "any",
  "sortOutput": "source",
  "includePlaceSummary": true,
  "maxPagesPerPlace": 150,
  "autoProxyFallback": true,
  "proxyConfiguration": {"useApifyProxy": false}
}
```

### Filters

Filtering happens before paid review rows are emitted. You can combine:

- 1-5 rating selection
- ISO review-language codes
- inclusive date boundaries
- case-insensitive text keyword
- traveler types such as `COUPLES`, `FAMILY`, `FRIENDS`, `SOLO`, and `BUSINESS`
- minimum helpful votes
- management-reply presence

When one or more languages are selected, the Actor fetches language slices separately to improve coverage before deduplicating stable review IDs.

### Reliability design

The Actor includes:

- strict TripAdvisor URL validation
- duplicate-place removal
- direct-first HTTP mode
- optional automatic Apify Proxy fallback
- bounded retries and timeouts
- deep offset pagination using TripAdvisor's current public review flow
- global review-ID deduplication per place
- bounded per-place and global result limits
- expanded scan windows when post-filters are active
- diagnostic rows instead of crashing a multi-place batch
- maximum-charge handling for pay-per-event runs

### Output row types

#### `review`

A successful, billable TripAdvisor review.

#### `place_summary`

An optional free aggregate row for the place.

#### `status`

A free informational row when the source works but no review matches the selected filters inside the scan window.

#### `error`

A free diagnostic row for invalid input, unavailable source data, rate limiting, network errors, or another per-place failure.

### Pricing

Launch pricing target: **$0.00039 per successfully emitted review**, about **$0.39 per 1,000 TripAdvisor reviews**, plus the small Actor-start event shown by Apify.

Only successful `review` rows trigger the paid review event. Summary rows, status rows, errors, retries, duplicates, and filtered-out reviews are free.

### Spend controls

Use `maxReviewsPerPlace`, `maxTotalReviews`, `maxPagesPerPlace`, and Apify's maximum-total-charge setting to bound runtime and spend.

### Source behavior

TripAdvisor controls the public review schema, pagination behavior, and optional fields. Some reviews do not have photos, management replies, traveler details, hometown data, or sub-ratings. Missing data is returned empty rather than invented.

### Responsible use

This Actor reads public review/profile information. Use reviewer names, text, travel details, photos, and responses in accordance with applicable privacy, copyright, data-protection requirements, and TripAdvisor's applicable terms. Do not use the output to harass, deanonymize, or build sensitive profiles of reviewers.

### Support

For a reproducible issue, provide the public TripAdvisor URL, relevant filters, proxy mode, and Apify run ID. Never include API tokens, proxy passwords, or private credentials.

### Extended capabilities

- Scrape supported TripAdvisor hotel, restaurant, attraction, and cruise review URLs.
- Apply rating, language, text, country, date, helpfulness, and owner-response filters before output.
- Preserve location summaries, distribution intelligence, monitoring state, and bounded pagination diagnostics.

# Actor input Schema

## `placeUrls` (type: `array`):

Direct TripAdvisor Hotel, Restaurant, Attraction/Activity, Airline or Cruise review URLs. Leave empty when using locationIds or searchQueries.

## `maxReviewsPerPlace` (type: `integer`):

Maximum matching paid review rows emitted for each unique TripAdvisor place.

## `maxTotalReviews` (type: `integer`):

Hard result cap across all places for predictable runtime and spend.

## `ratings` (type: `array`):

Optional 1-5 rating filter. Empty means all ratings.

## `languageCodes` (type: `array`):

Optional ISO language codes such as en, it, de, fr. Each language is fetched as a separate source slice for better coverage.

## `reviewedAfter` (type: `string`):

Optional inclusive lower boundary: YYYY-MM-DD or ISO 8601.

## `reviewedBefore` (type: `string`):

Optional inclusive upper boundary: YYYY-MM-DD or ISO 8601.

## `containsText` (type: `string`):

Optional case-insensitive keyword across title and review text. Filtered rows are not billed.

## `tripTypes` (type: `array`):

Optional TripAdvisor traveler types such as COUPLES, FAMILY, FRIENDS, SOLO, BUSINESS.

## `minHelpfulVotes` (type: `integer`):

Only emit reviews with at least this many helpful votes.

## `ownerReply` (type: `string`):

Return any reviews, only reviews with a management reply, or only reviews without one.

## `sortOutput` (type: `string`):

Preserve TripAdvisor source order or sort collected matching rows before output.

## `includePlaceSummary` (type: `boolean`):

Add one free place-summary row with place type, name and TripAdvisor total review count.

## `maxPagesPerPlace` (type: `integer`):

Safety ceiling for TripAdvisor pagination. The current public review flow returns 20 reviews per page.

## `requestTimeoutSecs` (type: `integer`):

Maximum seconds for each TripAdvisor GraphQL request.

## `retries` (type: `integer`):

Retries each source request after transient HTTP, GraphQL, rate-limit, or network failures.

## `autoProxyFallback` (type: `boolean`):

Try direct requests first; if TripAdvisor blocks the place, retry through Apify Proxy when available.

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

Optional explicit proxy configuration. Leave disabled for fast direct-first mode.

## `monitorKey` (type: `string`):

Reuse the same key on scheduled runs to mark reviews already seen by this Actor.

## `onlyNew` (type: `boolean`):

With monitorKey, output and bill only reviews that were not seen in prior runs.

## `includeReviewInsights` (type: `boolean`):

Add a free per-source summary with average score, reply rate and score distribution for the matched review sample.

## `locationIds` (type: `array`):

Optional numeric d-IDs from TripAdvisor URLs. Useful when another Actor or dataset already provides location IDs.

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

Use TripAdvisor's public typeahead GraphQL surface to discover reviewable hotels, restaurants, attractions and other places by name, brand or destination.

## `searchLocale` (type: `string`):

Locale sent to TripAdvisor discovery, e.g. en-US, it-IT, de-DE.

## `maxDiscoveredPlaces` (type: `integer`):

Hard cap across all searchQueries before review scraping begins.

## Actor input object example

```json
{
  "placeUrls": [],
  "maxReviewsPerPlace": 500,
  "maxTotalReviews": 5000,
  "ratings": [],
  "languageCodes": [],
  "reviewedAfter": "",
  "reviewedBefore": "",
  "containsText": "",
  "tripTypes": [],
  "minHelpfulVotes": 0,
  "ownerReply": "any",
  "sortOutput": "source",
  "includePlaceSummary": true,
  "maxPagesPerPlace": 150,
  "requestTimeoutSecs": 30,
  "retries": 2,
  "autoProxyFallback": true,
  "proxyConfiguration": {
    "useApifyProxy": false
  },
  "monitorKey": "",
  "onlyNew": false,
  "includeReviewInsights": true,
  "locationIds": [],
  "searchQueries": [],
  "searchLocale": "en-US",
  "maxDiscoveredPlaces": 50
}
```

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

// Run the Actor and wait for it to finish
const run = await client.actor("zenomastro/tripadvisor-reviews-reliable").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("zenomastro/tripadvisor-reviews-reliable").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 zenomastro/tripadvisor-reviews-reliable --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,zenomastro/tripadvisor-reviews-reliable"
        }
    }
}
```

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/5cdEf49LdYPSEUdGs/builds/dqUQFATwNndaK2gwi/openapi.json
