# Tripadvisor Reviews Scraper: Hotels, Restaurants, Tours (`epicscrapers/tripadvisor-reviews-scraper`) Actor

Scrape Tripadvisor reviews from URLs, place names or whole cities: original text and English translation, rating, dates, trip type, sub-ratings, photos, owner responses and reviewer hometown. Filter by rating, language, traveler type and date, or get only new reviews. $0.50 per 1,000.

- **URL**: https://apify.com/epicscrapers/tripadvisor-reviews-scraper.md
- **Developed by:** [Epic Scrapers](https://apify.com/epicscrapers) (community)
- **Categories:** Travel, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.50 / 1,000 review saveds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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: every review of any hotel, restaurant, attraction or tour

Tripadvisor Reviews Scraper exports Tripadvisor reviews to a spreadsheet or your own system. Give it Tripadvisor links, place names such as `Bellagio Las Vegas`, or whole cities such as `Rome`, and it returns each review with its full text, rating, dates, traveler type, sub-ratings, photos and the owner's response. Every row also carries the place's rating breakdown, ranking, address, phone and email.

- **No URLs needed.** Type a place name or a city. The scraper finds the place, or the top hotels, restaurants, attractions and tours of the city, for you. Links from any Tripadvisor country site work too.
- **The original text, not a translation.** Tripadvisor quietly serves its English machine translation in place of the original for many recent reviews, so an Italian review looks like an English one. This scraper returns the text as the reviewer wrote it, in the right `language`, and puts Tripadvisor's English translation in separate columns.
- **Every review, in every language.** Get a place's full history, not only the first pages: all 15,946 reviews of the Bellagio took 75 seconds.
- **Only new reviews.** Schedule it and each run returns only the reviews published since the previous run, so you pay only for new data.
- **Filters other scrapers don't have:** rating, language, traveler type (business, couples, family, friends, solo), publish date and keywords.
- **$0.50 per 1,000 reviews, platform usage included.** No subscription, no start fee, no Tripadvisor account, API key or proxy setup. Export to JSON, CSV, Excel or Google Sheets.

### What can you do with Tripadvisor reviews?

| Goal                              | How                                                                                                                           |
| --------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
| Monitor your reputation           | Schedule your places with **Only new reviews** and get each new review the day after it's published.                          |
| Catch complaints early            | Filter by rating `1` and `2` and send new negative reviews to Slack, email or your helpdesk.                                  |
| Benchmark competitors             | Put your hotel and its competitors in one run and compare `rating`, `subratings` and `tripType` mix per place.                |
| Measure owner responses           | Use `hasOwnerResponse` and `ownerResponseDate` to compare how often and how fast each place answers.                          |
| Sentiment analysis and AI         | Collect thousands of reviews with original text and an English translation, ready for an LLM or an NLP model.                 |
| Market research in a destination  | Enter a city, pick place types and get reviews of its top places, with ranking, rating breakdown and location.                |
| Find what guests mention          | Use **Only reviews mentioning** with words such as `breakfast`, `noise`, `parking` or `wifi`.                                 |
| Build a list of hospitality leads | The **Places** view lists each place's name, type, rating, review count, ranking, address, phone, email and Tripadvisor link. |

### How it compares

| What you need                          | Tripadvisor Reviews Scraper                                      | Typical Tripadvisor review scrapers           |
| -------------------------------------- | ---------------------------------------------------------------- | --------------------------------------------- |
| Input                                  | URLs, place names or whole cities                                | Usually URLs only                             |
| Original text of translated reviews    | Yes, with the English translation in separate columns            | Often the English translation, marked as `en` |
| Filters                                | Rating, language, traveler type, publish date, keywords          | Some offer rating or language                 |
| Repeat runs                            | Only new reviews since the last run                              | Everything again, paid again                  |
| Place data on each row                 | Rating breakdown, ranking, address, coordinates, phone and email | Varies                                        |
| Price per 1,000 reviews on a free plan | $0.50, platform usage included                                   | Up to $5                                      |

### Quick start

1. Click **Try for free** and sign in to Apify. The free plan's monthly credit covers about 10,000 reviews.
2. Add a place in one of three ways:
   - **Tripadvisor URLs:** a hotel, restaurant, attraction or tour page, or a city list such as `https://www.tripadvisor.com/Restaurants-g187147-Paris_Ile_de_France.html`.
   - **Place names:** for example `Louvre Museum Paris`. Add the city to get the right place; the log shows what each name matched.
   - **Cities:** for example `Lake Como`. Then choose the place types and how many places of each.
3. For a first run, set **Max reviews per place** to `20`.
4. Click **Start**. When the run finishes, open the **Output** tab and export the data.

```json
{
    "searchQueries": ["Bellagio Las Vegas"],
    "maxReviewsPerPlace": 20
}
```

### What data can you extract?

Every row is one review, with its place's details attached.

| Group          | Fields                                                                                                                                                                                    |
| -------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Review         | `reviewId`, `reviewUrl`, `rating`, `title`, `text`, `language`, `publishedDate`, `writtenDate`, `visitMonth`, `tripType`, `helpfulVotes`, `roomTip`                                       |
| Sub-ratings    | `subratings`, such as Value, Rooms, Location, Cleanliness, Service and Sleep Quality for hotels, or Food, Service, Value and Atmosphere for restaurants                                   |
| Translation    | `translatedTitle`, `translatedText` (Tripadvisor's English translation), `isMachineTranslated`                                                                                            |
| Photos         | `photoCount`, `photos` (ID, full-size link, caption)                                                                                                                                      |
| Owner response | `hasOwnerResponse`, `ownerResponse`, `ownerResponseDate`, `ownerResponseAuthor`, `ownerResponseAuthorRole`, `ownerResponseLanguage`                                                       |
| Reviewer       | `reviewerName`, `reviewerUsername`, `reviewerId`, `reviewerProfileUrl`, `reviewerLocation` (hometown), `reviewerAvatarUrl`, `isReviewerVerified`                                          |
| Place          | `placeId`, `placeName`, `placeType`, `placeUrl`, `placeRating`, `placeReviewCount`, `placeRatingCounts` (1★ to 5★), `placeRanking`, `placeRankingOutOf`, `isPlaceClosed`, `placeImageUrl` |
| Location       | `placeAddress`, `placePostalCode`, `placeCity`, `placeLocation` (full region path), `placeLatitude`, `placeLongitude`, `placePhone`, `placeEmail`                                         |
| Run            | `input` (the URL, name or city the place came from), `scrapedAt`                                                                                                                          |

### Monitor reviews with scheduled runs

Turn on **Only new reviews** and run the same input on a schedule. The first run collects reviews as usual. Every later run returns only reviews published since then, and costs nothing when there are none.

#### 1. Save your input as a task

Open the Actor, add your places and filters, turn on **Only new reviews**, then click **Save as a new task**. A task is a saved input you can run again with one click or on a schedule. Each task keeps its own memory of seen reviews, so tasks don't affect each other.

#### 2. Schedule the task

In Apify Console, go to **Schedules**, click **Create new**, choose how often to run, and add your task. See [Schedules](https://docs.apify.com/platform/schedules) and [How to create a schedule](https://help.apify.com/en/articles/7120817-how-to-create-a-schedule).

Watch how to schedule an Actor:

https://www.youtube.com/watch?v=1jI7WcVQmwM

Or schedule a saved task:

https://www.youtube.com/watch?v=GRFW_Loo2dk

Common schedules:

| Use case                                 | Frequency       | Cron expression |
| ---------------------------------------- | --------------- | --------------- |
| Reply to new reviews quickly             | Every 6 hours   | `0 */6 * * *`   |
| Daily reputation report                  | Daily           | `0 7 * * *`     |
| Competitor benchmarking                  | Weekly (Monday) | `0 7 * * 1`     |
| Monthly review analysis or board reports | Monthly (1st)   | `0 7 1 * *`     |

#### 3. Send new reviews where you work

In the task's **Integrations** tab, connect Google Sheets, Slack, email, Make, Zapier or n8n, or a webhook to your own system. For example, append every run to a Google Sheet:

https://www.youtube.com/watch?v=IFTeKdj6ZGM

Combine **Only new reviews** with **Ratings** `1` and `2` to get an alert only when a bad review appears.

### Input reference

| Field                    | Type             | Default                                    | Effect                                                                                                                                                                                                    |
| ------------------------ | ---------------- | ------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `startUrls`              | Array of strings | Empty                                      | Tripadvisor links from any country site. A place page or one of its review pages gives that place. A list such as `Hotels-g…` gives the top places of that type. Location IDs such as `1890933` work too. |
| `searchQueries`          | Array of strings | Empty                                      | Place names. The best match is used.                                                                                                                                                                      |
| `cities`                 | Array of strings | Empty                                      | Cities or regions. The top places of each chosen type are used.                                                                                                                                           |
| `placeTypes`             | Array            | `["hotels", "restaurants", "attractions"]` | For cities and city URLs: `hotels`, `restaurants`, `attractions`, `tours`.                                                                                                                                |
| `maxPlacesPerCity`       | Integer          | `10`                                       | For cities and city URLs: places of each type, in Tripadvisor's order. Up to 3,000.                                                                                                                       |
| `maxReviewsPerPlace`     | Integer          | `100`                                      | Reviews per place, newest first. `0` means every review.                                                                                                                                                  |
| `onlyNewReviews`         | Boolean          | `false`                                    | Return only reviews published since the previous run of the same task and filters.                                                                                                                        |
| `newerThan`              | String           | Empty                                      | Only reviews published after a date (`2026-01-31`) or within an age (`7 days`, `3 months`, `1 year`).                                                                                                     |
| `ratings`                | Array            | Empty (all)                                | Only these ratings: `"1"` to `"5"`.                                                                                                                                                                       |
| `languages`              | Array of strings | Empty (all)                                | Only reviews written in these languages, such as `en`, `it`, `fr`, `de`, `es`, `ja`, `zh`.                                                                                                                |
| `tripTypes`              | Array            | Empty (all)                                | Only these traveler types: `business`, `couples`, `family`, `friends`, `solo`.                                                                                                                            |
| `keywords`               | Array of strings | Empty (all)                                | Only reviews whose title or text (original or translation) contains one of these words or phrases. Not case-sensitive.                                                                                    |
| `includeReviewerDetails` | Boolean          | `true`                                     | Turn off to leave reviewer name, username, ID, profile, hometown and avatar empty.                                                                                                                        |
| `loadOriginalText`       | Boolean          | `true`                                     | Turn off to skip loading the original text of translated reviews (see FAQ). Slightly faster.                                                                                                              |

### Ready-to-run examples

#### Get every review of a place

```json
{
    "startUrls": ["https://www.tripadvisor.com/Hotel_Review-g45963-d91703-Reviews-Bellagio-Las_Vegas_Nevada.html"],
    "maxReviewsPerPlace": 0
}
```

All reviews in every language, newest first. For the Bellagio that's about 16,000 reviews in a little over a minute, for about $8.

#### Watch your hotel and its competitors for new reviews

```json
{
    "searchQueries": ["Hotel Artemide Rome", "Hotel Quirinale Rome", "The Hive Hotel Rome"],
    "maxReviewsPerPlace": 200,
    "onlyNewReviews": true
}
```

Save it as a task and schedule it daily. The first run saves the last 200 reviews of each hotel; later runs save only new ones.

#### Find complaints across a city's restaurants

```json
{
    "cities": ["Genoa, Italy"],
    "placeTypes": ["restaurants"],
    "maxPlacesPerCity": 50,
    "maxReviewsPerPlace": 0,
    "ratings": ["1", "2"],
    "newerThan": "12 months"
}
```

Every 1★ and 2★ review of the last year for Genoa's top 50 restaurants. You pay only for the reviews that match.

#### Research what families say about attractions

```json
{
    "cities": ["Orlando, Florida"],
    "placeTypes": ["attractions", "tours"],
    "maxPlacesPerCity": 20,
    "tripTypes": ["family"],
    "keywords": ["queue", "line", "wait", "stroller"],
    "maxReviewsPerPlace": 0,
    "newerThan": "2 years"
}
```

#### Collect reviews in one language for a dataset

```json
{
    "startUrls": ["https://www.tripadvisor.com/Attraction_Review-g187791-d192285-Reviews-Colosseum-Rome_Lazio.html"],
    "languages": ["de", "fr"],
    "maxReviewsPerPlace": 2000,
    "includeReviewerDetails": false
}
```

German and French reviews only, without personal data.

### Analyze the results with ChatGPT or Claude

Export the dataset as CSV (the **Overview** view keeps it small) and attach it to a chat with ChatGPT, Claude or another AI assistant. Some prompts to start with:

**Find the recurring problems.** "These are Tripadvisor reviews of my hotel. Group the complaints in the 1★ to 3★ reviews into themes, count how often each appears per quarter using `publishedDate`, and quote two short examples per theme."

**Compare with competitors.** "This file has reviews of several hotels (`placeName`). For each hotel, compare the average of each sub-rating in `subratings`, the share of reviews by `tripType`, and the share of reviews with an owner response. Where are we behind?"

**Draft replies.** "For each review without an owner response (`hasOwnerResponse` is false), draft a short, personal reply in the reviewer's language (`language`) that addresses their specific points."

The dataset is also available through the [Apify API](https://docs.apify.com/api/v2) and integrations such as Make, Zapier and n8n, so you can feed it into an automated workflow.

### Output

Results go to the run's default dataset. Use the views **Overview**, **Ratings & photos**, **Reviewers** or **Places**, or export everything as JSON, CSV, Excel, XML or HTML.

This is a real row from Trattoria Rosmarino in Genoa, scraped on October 7, 2026. The review was written in Italian; `text` keeps the original and `translatedText` has Tripadvisor's English translation:

```json
{
    "reviewId": 1079044589,
    "reviewUrl": "https://www.tripadvisor.com/ShowUserReviews-g187823-d1890933-r1079044589-Trattoria_Rosmarino-Genoa_Italian_Riviera_Liguria.html",
    "rating": 5,
    "title": "Pansotti da sogno",
    "text": "Pensa di aver mangiato uno dei primi più buoni della vita! Provate i pansotti alle noci! È stato tutto perfetto: servizio eccellente (tutti gentilissimi) e veloce, locale intimo e accogliente…",
    "language": "it",
    "isMachineTranslated": false,
    "translatedTitle": "Dreamy pansotti",
    "translatedText": "Think you've eaten one of the best first courses of your life! Try the pansotti with walnuts! Everything was perfect: excellent service (everyone very kind) and fast, intimate and welcoming place…",
    "publishedDate": "2026-09-23",
    "writtenDate": "2026-09-23",
    "visitMonth": "2026-09",
    "tripType": "Couples",
    "helpfulVotes": 0,
    "subratings": { "Value": 5, "Service": 5, "Food": 5, "Atmosphere": 5 },
    "roomTip": null,
    "photoCount": 0,
    "photos": [],
    "hasOwnerResponse": false,
    "ownerResponse": null,
    "ownerResponseDate": null,
    "ownerResponseAuthor": null,
    "ownerResponseAuthorRole": null,
    "ownerResponseLanguage": null,
    "reviewerName": "adriana b",
    "reviewerUsername": "E6801OSadrianab",
    "reviewerId": "9A4301E0DF0B96019263704C513FFD98",
    "reviewerProfileUrl": "https://www.tripadvisor.com/Profile/E6801OSadrianab",
    "reviewerLocation": null,
    "reviewerAvatarUrl": "https://dynamic-media-cdn.tripadvisor.com/media/photo-o/1a/f6/f0/d5/default-avatar-2020-17.jpg?w=200&h=200&s=1",
    "isReviewerVerified": false,
    "placeId": 1890933,
    "placeName": "Trattoria Rosmarino",
    "placeType": "restaurant",
    "placeUrl": "https://www.tripadvisor.com/Restaurant_Review-g187823-d1890933-Reviews-Trattoria_Rosmarino-Genoa_Italian_Riviera_Liguria.html",
    "placeRating": 4.3,
    "placeReviewCount": 3654,
    "placeRatingCounts": { "1": 56, "2": 123, "3": 361, "4": 1322, "5": 1792 },
    "placeRanking": 97,
    "placeRankingOutOf": 2012,
    "placeAddress": "Salita del Fondaco 30 Corner Piazza de Ferrari, 16123, Genoa Italy",
    "placePostalCode": "16123",
    "placeCity": "Genoa",
    "placeLocation": "Genoa, Italian Riviera, Liguria, Italy, Europe",
    "placeLatitude": 44.40767,
    "placeLongitude": 8.933493,
    "placePhone": "+39 010 251 0475",
    "placeEmail": "info@trattoriarosmarino.it",
    "placeImageUrl": "https://dynamic-media-cdn.tripadvisor.com/media/photo-o/11/87/9e/91/photo2jpg.jpg?w=1200&h=-1&s=1",
    "isPlaceClosed": false,
    "input": "1890933",
    "scrapedAt": "2026-10-07T11:10:26.559Z"
}
```

An owner response looks like this (Hotel Artemide, Rome, shortened):

```json
{
    "hasOwnerResponse": true,
    "ownerResponse": "Dear Katie,\n\nThank you for choosing Hotel Artemide for the final evening of your Roman holiday…\n\nFrancesco Tudisco\nHotel Manager\n",
    "ownerResponseDate": "2026-09-18",
    "ownerResponseAuthorRole": "Direttore generale",
    "ownerResponseLanguage": "en"
}
```

The run's key-value store also has an `OUTPUT` record with one entry per place: the input it came from, reviews saved, how many had a translation, and a status (`ok`, `partial`, `failed` or `stopped-at-charge-limit`).

#### Notes on fields

- Reviews come newest first, so **Max reviews per place** `100` gives the 100 most recent reviews.
- `publishedDate` is the date shown on Tripadvisor. `writtenDate` is when the reviewer submitted it, usually the same day or a day or two earlier. `visitMonth` is the month of the stay or visit, as `YYYY-MM`.
- `language` is always the language the review was written in. Tripadvisor uses `zhCN` and `zhTW` for Chinese; the filter value `zh` matches both.
- `translatedTitle` and `translatedText` are filled only where Tripadvisor has an English translation, which is mostly for recent non-English reviews. Owner responses are never translated.
- `subratings` labels depend on the place type and are in English. Many reviews have no sub-ratings, and then it's `{}`.
- `tripType`, `visitMonth`, `roomTip` and `reviewerLocation` are optional on Tripadvisor and are `null` when the reviewer left them empty.
- `placeRanking` and `placeRankingOutOf` are the place's position among its type in its city, such as #97 of 2,012 restaurants in Genoa.
- Missing values are `null`. Every row has `scrapedAt` in UTC.

### FAQ

#### Which places are supported?

Hotels, restaurants, attractions, and tours and activities, on any Tripadvisor country site (`.com`, `.co.uk`, `.it`, `.de`, `.fr` and others). Vacation rentals, cruises, flights and forum posts aren't supported.

#### Why do I need "Load original text of translated reviews"?

Tripadvisor serves its English machine translation in place of the original for many recent non-English reviews. With the option on (the default), the scraper loads the original with one extra request per page, so `title` and `text` are always as written and the translation is in `translatedTitle` and `translatedText`. Turn it off for slightly faster runs when you only need English: translated reviews then keep only the English text, marked `isMachineTranslated: true`, and `language` still shows the original language.

#### How does "Only new reviews" work?

After a complete run, the scraper remembers the newest review of each place in a key-value store named `tripadvisor-reviews-scraper-state` in your account. The next run of the same task with the same filters stops when it reaches reviews it has seen. It also checks the previous 45 days again, because Tripadvisor sometimes publishes a review days after it was written, so late reviews aren't missed and none are saved twice. To start over, delete that key-value store or change the filters.

#### How fast is it?

There's no browser, so it's fast: 11 places × 50 reviews took 11 seconds, and the 15,946 reviews of the Bellagio took 75 seconds. A date filter (`newerThan`) or **Only new reviews** stops early, because reviews come newest first. Rating, language, traveler type and keyword filters have to read through all of a place's reviews, so on very large places they take longer, but you still pay only for matching reviews.

#### Why did I get fewer reviews than the place shows?

Your filters or limit removed them, or the place has fewer reviews in Tripadvisor's list than in its counter (for example after removals). The `OUTPUT` record and the log show how many reviews each place gave. If a place name matched the wrong place, add the city to the name, or use the place's URL.

#### Why did my run stop before reaching my limit?

If the log says the charge limit was reached, the run hit its maximum cost or your account's spending limit. Everything saved before that is in the dataset. Raise the limit in the run options to collect more.

#### Do I need proxies, a Tripadvisor account or an API key?

No. The scraper handles connections and retries itself, doesn't log in and doesn't use your Tripadvisor account.

#### Can I use it through the API or from AI agents?

Yes. Start runs and read results through the [Apify API](https://docs.apify.com/api/v2), the Apify clients for JavaScript and Python, or the Apify MCP server, which lets AI agents such as Claude call the scraper as a tool.

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

The scraper collects publicly visible reviews. Reviews can contain personal data, which is protected by the GDPR in the EU and by similar laws elsewhere. Only collect personal data if you have a legitimate reason, and turn off **Include reviewer details** if you don't need it. Check with a lawyer if you're unsure, and read Apify's blog post on [the legality of web scraping](https://blog.apify.com/is-web-scraping-legal/).

### Cost

This Actor uses pay-per-event pricing. You pay only for reviews saved, with platform usage included and no start fee:

| Event        | Price   | Per 1,000 | Charged when                      |
| ------------ | ------- | --------- | --------------------------------- |
| Review saved | $0.0005 | $0.50     | A review is saved to the dataset. |

Looking up places, listing a city's places, and reviews skipped by your filters or already seen are free.

Example runs:

| Run                                                                  | Reviews        | Cost           |
| -------------------------------------------------------------------- | -------------- | -------------- |
| 100 latest reviews of one hotel                                      | 100            | $0.05          |
| Top 20 restaurants of a city × 100 reviews                           | 2,000          | $1             |
| Every review of the Bellagio                                         | 15,946         | ~$8            |
| Daily "only new" run for 50 places that get 2 new reviews a day each | ~3,000 / month | ~$1.50 / month |

Apify's free plan includes $5 of credit each month, enough for about 10,000 reviews. Set a maximum cost per run and the scraper stops exactly at your limit. The **Pricing** tab always shows the current prices.

### Support

Report problems or request features in the **Issues** tab. Include the run ID, the input and what you expected. We read every issue.

This Actor is not affiliated with or endorsed by Tripadvisor LLC. "Tripadvisor" is a trademark of Tripadvisor LLC.

# Actor input Schema

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

One per line, from any Tripadvisor country site. A hotel, restaurant, attraction or tour page (or one of its review pages) gives that place's reviews. A city list such as https://www.tripadvisor.com/Restaurants-g187147-Paris_Ile_de_France.html gives reviews of its top places. A location ID such as 1890933 works too.

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

Find places by name instead of URL, e.g. "Bellagio Las Vegas" or "Louvre Museum". Add the city to pick the right one. The best match is used; the log shows what each name matched.

## `cities` (type: `array`):

Collect reviews of the top places in a city or region, e.g. "Rome" or "Lake Como". Choose the place types and how many places below.

## `placeTypes` (type: `array`):

Which places to take from cities and city URLs such as Tourism-g187147. A list URL like Hotels-g… always uses its own type.

## `maxPlacesPerCity` (type: `integer`):

For cities and city URLs: how many places of each type, in Tripadvisor's order.

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

Stop after this many reviews per place (newest first). Set to 0 to collect every review.

## `onlyNewReviews` (type: `boolean`):

Remember which reviews earlier runs saw and return only reviews published since then. Turn it on in a saved task or schedule: the first run collects reviews as usual, every later run returns only the new ones, and you pay only for those.

## `newerThan` (type: `string`):

A date (2026-01-31) or an age (7 days, 3 months, 1 year). Leave empty for all dates.

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

Only reviews with these ratings. Leave empty for all.

## `languages` (type: `array`):

Language codes, e.g. en, it, fr, de, es, ja, zh. Leave empty for reviews in every language.

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

Only reviews from these kinds of trips. Leave empty for all.

## `keywords` (type: `array`):

Keep only reviews whose title or text contains at least one of these words or phrases (not case-sensitive), e.g. breakfast, noise, staff. Leave empty for all.

## `includeReviewerDetails` (type: `boolean`):

Reviewer name, username, ID, profile link, hometown and avatar. Turn off to leave these fields empty, e.g. if you have no lawful basis to process personal data.

## `loadOriginalText` (type: `boolean`):

Tripadvisor serves its English translation in place of the original for reviews it has translated (mostly recent ones). On: title and text are always as written, and the English translation is in translatedTitle and translatedText (one extra request per page with translated reviews). Off: those reviews keep only the English translation in title and text, marked with isMachineTranslated; language still shows the language they were written in.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.tripadvisor.com/Hotel_Review-g45963-d91703-Reviews-Bellagio-Las_Vegas_Nevada.html"
  ],
  "placeTypes": [
    "hotels",
    "restaurants",
    "attractions"
  ],
  "maxPlacesPerCity": 10,
  "maxReviewsPerPlace": 20,
  "onlyNewReviews": false,
  "ratings": [],
  "languages": [],
  "tripTypes": [],
  "keywords": [],
  "includeReviewerDetails": true,
  "loadOriginalText": true
}
```

# 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 = {
    "startUrls": [
        "https://www.tripadvisor.com/Hotel_Review-g45963-d91703-Reviews-Bellagio-Las_Vegas_Nevada.html"
    ],
    "maxReviewsPerPlace": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("epicscrapers/tripadvisor-reviews-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 = {
    "startUrls": ["https://www.tripadvisor.com/Hotel_Review-g45963-d91703-Reviews-Bellagio-Las_Vegas_Nevada.html"],
    "maxReviewsPerPlace": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("epicscrapers/tripadvisor-reviews-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 '{
  "startUrls": [
    "https://www.tripadvisor.com/Hotel_Review-g45963-d91703-Reviews-Bellagio-Las_Vegas_Nevada.html"
  ],
  "maxReviewsPerPlace": 20
}' |
apify call epicscrapers/tripadvisor-reviews-scraper --silent --output-dataset

```

## MCP server setup

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