# Tripadvisor Reviews Scraper - Hotels & Restaurants (`wrenfield-data/tripadvisor-reviews-scraper`) Actor

Get Tripadvisor reviews for any hotel, restaurant or attraction: text, star rating, date, trip date, sub-ratings, photos, owner responses and reviewer info. Paste URLs or search "hotels in Lisbon". Filter by stars, traveler type, month, language or date. No blocking, no proxies.

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

## Pricing

from $0.60 / 1,000 reviews

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

## Tripadvisor Reviews Scraper – Hotels, Restaurants & Attractions

**Tripadvisor Reviews Scraper** gets reviews for any **hotel, restaurant, attraction, tour or vacation rental** on Tripadvisor: the full review text, star rating, publish date, trip date, sub-ratings (service, rooms, value...), photos, the **owner's response** and, if you want it, the reviewer's public profile. Paste Tripadvisor URLs, or just type a search like `hotels in Lisbon, Portugal` and the Actor finds the places for you.

Filter by **star rating**, **traveler type**, **month of visit**, **language** or **date**, and sort by most recent or most detailed. Rows are clean and flat, ready for a spreadsheet, a BI tool or an LLM sentiment pipeline.

No proxies, no CAPTCHAs, no browser: data comes from a commercial Tripadvisor data feed, so runs are fast and don't get blocked.

💸 **$1 per 1,000 reviews** and $3 per 1,000 place summaries, for hotels, restaurants and attractions. Try it on Apify's free plan ($5 of monthly credit, no credit card).

#### Sample output

| Place | Rating | Review title | Published | Lang |
|---|---|---|---|---|
| Eiffel Tower | 4 | Worth it. | 2026-10-16 | en |
| Eiffel Tower | 1 | Aason | 2026-10-15 | en |
| Eiffel Tower | 5 | A majestic iconic structure symbo… | 2026-10-14 | en |

<sub>Real rows from the prefilled example run (Oct 19, 2026), 5 of 34+ fields shown. Export as JSON, CSV, Excel or HTML, or read them through the API.</sub>

### What does Tripadvisor Reviews Scraper do?

- 🏨 **All place types**: hotels, restaurants, attractions, tours and experiences, vacation rentals
- 🔗 **URLs or search**: paste place URLs (any Tripadvisor country site, any page of reviews, even a single-review link) or search `sushi restaurants in Austin, TX`
- ⭐ **Filter by stars**: e.g. only 1★ and 2★ reviews to collect complaints
- 🧳 **Filter by traveler type**: families, couples, solo, business, friends
- 📅 **Filter by visit month** for seasonality analysis
- 🆕 **Only new reviews**: `reviewsNewerThan` = `2026-09-01` or `7 days` for scheduled monitoring
- 🌍 **Languages**: get reviews from every language machine-translated by Tripadvisor into the language you choose, or the original text; the language each review was written in is always kept in `originalLanguage`
- 💬 **Owner responses**: response text and date, plus a `hasOwnerResponse` flag for response-rate tracking
- 📊 **Place details**: name, address, rating, total review count and the 1–5★ distribution (optional `place` rows, or details only with `maxReviewsPerPlace` = 0)
- 🧾 **Free error rows**: bad URLs, places that don't exist or searches with no results come back as `rowType: "error"` rows that you are never charged for

### Who uses Tripadvisor reviews?

- **Hotels, restaurants and attraction operators**: monitor your own reviews and your competitors', track response rates and recurring complaints.
- **Reputation-management and hospitality-software agencies**: weekly review feeds for many clients.
- **Market researchers and analysts**: sentiment by city, cuisine, season or traveler type; competitive benchmarking.
- **Data scientists and AI teams**: labeled review text (with star ratings) for sentiment models and RAG.
- **Travel startups and content teams**: ratings and review snippets for curated lists.

### How to use it

1. Click **Try for free** / **Start**.
2. Add **Tripadvisor URLs** (hotel, restaurant or attraction pages) and/or **Search queries** like `hotels in Rome, Italy`.
3. Set **Max reviews per place** (default 100) and optional filters: stars, traveler types, visit months, newer than, output language.
4. Run, then download as JSON, CSV, Excel or HTML, or use the Apify API, Make, Zapier, n8n or the MCP server.

Tip: schedule a daily run with **Only reviews newer than** = `2 days` to get every new review for your places.

### Input example

```json
{
    "startUrls": [
        "https://www.tripadvisor.com/Hotel_Review-g60763-d93437-Reviews-Hotel_Edison-New_York_City_New_York.html",
        "https://www.tripadvisor.com/Attraction_Review-g187147-d188151-Reviews-Eiffel_Tower-Paris_Ile_de_France.html"
    ],
    "searchQueries": ["seafood restaurants in Lisbon, Portugal"],
    "maxPlacesPerSearch": 5,
    "maxReviewsPerPlace": 200,
    "sortBy": "most_recent",
    "ratings": ["1", "2"],
    "reviewsNewerThan": "90 days",
    "includePlaceDetails": true,
    "includeReviewerInfo": false
}
```

### Output example

One row per review (text shortened):

```json
{
    "rowType": "review",
    "placeId": "6413491",
    "placeName": "Life of Pie Pizza",
    "placeType": "restaurant",
    "placeUrl": "https://www.tripadvisor.com/Restaurant_Review-g52024-d6413491-Reviews-Life_of_Pie_Pizza-Portland_Oregon.html",
    "placeAddress": "3632 N Williams Ave, Portland, OR 97227",
    "placeRating": 4.5,
    "placeReviewsCount": 131,
    "reviewId": "1062899969",
    "reviewUrl": "https://www.tripadvisor.com/ShowUserReviews-g52024-d6413491-r1062899969-Life_of_Pie_Pizza-Portland_Oregon.html",
    "rating": 4,
    "title": "Great taste. Great gluten free crust.",
    "text": "On vacation and after a full day of flying we stumbled upon this place...",
    "publishedAt": "2026-06-04T04:53:42Z",
    "publishedDate": "2026-06-04",
    "visitDate": "2026-06",
    "language": "en",
    "originalLanguage": "en",
    "isTranslated": false,
    "subRatings": null,
    "photos": [],
    "photoCount": 0,
    "ownerResponse": null,
    "ownerResponseDate": null,
    "hasOwnerResponse": false,
    "position": 1,
    "reviewerName": "Traveler123",
    "reviewerProfileUrl": "https://www.tripadvisor.com/Profile/...",
    "reviewerLocation": "Seattle, Washington",
    "reviewerReviewsCount": 42,
    "scrapedAt": "2026-10-08T19:01:09Z"
}
```

The dataset has four views: **Reviews**, **Places** (place summary rows), **Problems** (free error rows explaining what went wrong for each bad input) and **All fields**. A run summary (places processed, reviews saved, inputs with problems and why the run stopped) is stored in the `SUMMARY` record of the key-value store.

### Output fields

| Group | Fields |
|---|---|
| Place | `placeId`, `placeName`, `placeType`, `placeUrl`, `placeAddress`, `placeRating`, `placeReviewsCount`, `ratingDistribution` (place rows), `input` |
| Review | `reviewId`, `reviewUrl`, `rating`, `title`, `text`, `publishedAt`, `publishedDate`, `visitDate`, `subRatings`, `photos`, `photoCount`, `position` |
| Language | `language`, `originalLanguage`, `isTranslated` |
| Owner response | `ownerResponse`, `ownerResponseTitle`, `ownerResponseDate`, `hasOwnerResponse` |
| Reviewer (optional) | `reviewerName`, `reviewerProfileUrl`, `reviewerLocation`, `reviewerReviewsCount`, `reviewerAvatarUrl` |
| Search (search results only) | `searchQuery`, `searchLocation`, `searchLocationCode`, `searchRank`, `isSponsored`, `category`, `priceRate`, `searchRating`, `searchReviewsCount`, `searchTitle` |
| Errors | `rowType` = `error`, `input`, `error`, `errorCode` (`INVALID_URL`, `PLACE_NOT_FOUND`, `NO_REVIEWS`, `NO_LOCATION`, `LOCATION_NOT_FOUND`, `NO_PLACES_FOUND`, `SEARCH_FAILED`, `PROVIDER_ERROR`, `INVALID_REQUEST`) |

### How much does it cost?

You pay **per review** saved, plus a small fee per **place summary row** if you turn those on, and a tiny start fee. Error rows are free. You can cap any run with **Max reviews (total)** or Apify's **Maximum cost per run**; the Actor reserves your budget before it fetches data and stops exactly at that limit. Runs are light (512 MB, no proxies, no browser), so platform usage stays very low.

On the Apify free plan a run is limited to 300 reviews, so you can try the Actor on real data before upgrading.

### Related tools

Get contact details for the hotels and restaurants you analyze, or check demand for a destination.

- [Website Contact Scraper](https://apify.com/wrenfield-data/website-contact-scraper): get emails, phone numbers and social links for each domain
- [Google Trends Scraper](https://apify.com/wrenfield-data/google-trends-scraper): interest over time, by region, related queries and Trending Now

All of these are maintained by the same developer and export flat JSON, CSV or Excel, so you can feed one tool's dataset into the next.

### FAQ

**Is it legal to scrape Tripadvisor reviews?**
This Actor does not crawl Tripadvisor itself. It reads publicly visible reviews through a commercial data provider (DataForSEO's Business Data API), so it doesn't bypass any login, CAPTCHA or bot protection. Reviews are copyrighted by their authors and Tripadvisor, and reviewer names are personal data: use the results for analysis, monitoring and research, don't republish review text wholesale, and follow the privacy laws that apply to you (for example GDPR). Turn off **Include reviewer info** if you don't need it. Ask a lawyer if you are unsure.

**How many reviews can I get per place?**
Up to 4,490 per request, which is enough for almost every place. For bigger places the Actor automatically splits the job by star rating (5★, 4★...) and removes duplicates, so you can go well beyond that.

**Why do I get fewer reviews than the page shows?**
Tripadvisor's total counts include reviews in every language and some that are hidden on the site. With **Use Tripadvisor translations** off, Tripadvisor mostly returns reviews written in the site's language only. Filters (stars, traveler type, months, newer than) also reduce the count.

**How do languages work?**
By default you get reviews in the language of the URL's site (English for tripadvisor.com), with reviews written in other languages machine-translated by Tripadvisor (`isTranslated` = true). Set **Output language** (e.g. `es`) to get them in another language. To keep only reviews originally written in one language, filter the results on `originalLanguage`.

**Which Tripadvisor sites work?**
Any country site: tripadvisor.com, .co.uk, .de, .fr, .it, .es, .com.au, .ca and so on. Reviews come in that site's language (translated if needed). Pagination parts like `-or20-` are removed automatically so you always start from the top.

**How do searches work?**
Write `what in where`, e.g. `hotels in Barcelona, Spain`, `pizza in Portland, Oregon` or `things to do in Kyoto, Japan`, or set **Search location** once for all queries. Add the country (or the US state) to avoid ambiguity: there is more than one Barcelona and Portland. The location the Actor used is saved in `searchLocation` on every row. Sponsored results are skipped.

**Can I get only new reviews for monitoring?**
Yes. Set **Only reviews newer than** to a date or to `7 days` and schedule the Actor. It sorts by most recent and stops at the cutoff, so you only pay for new reviews.

**Do I need proxies or a Tripadvisor account?**
No. Nothing to configure.

**Why did a URL return an error row?**
The URL wasn't a Tripadvisor place page (a city or search page, for example), the place doesn't exist anymore, or it has no reviews matching your filters. The `error` column explains each case and you are not charged for these rows.

**Can I get hotel prices or availability?**
No, this Actor focuses on reviews and place details. The search results include Tripadvisor's price level (`priceRate`) where available.

### Acceptable use

- This Actor is an independent tool. It is not affiliated with, endorsed by or sponsored by Tripadvisor, Google or DataForSEO.
- Don't use the data to build a competing search engine, or otherwise to compete with or harm Tripadvisor or the search engines the data comes from.
- The Actor may not be used from, or for people or organizations in, Russia, Belarus, Cuba, Iran, Syria, Myanmar, North Korea, Crimea or the Russian-occupied territories of Ukraine.
- You are responsible for using the results lawfully, including privacy laws such as GDPR for reviewer names and other personal data.

# Actor input Schema

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

Tripadvisor pages of hotels, restaurants, attractions, tours or vacation rentals, e.g. <code>https://www.tripadvisor.com/Hotel_Review-g60763-d93437-Reviews-Hotel_Edison_Times_Square-New_York_City_New_York.html</code>. Any Tripadvisor country site works (.co.uk, .de, .fr...). A single-review link also works: the Actor takes the place it belongs to.

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

Find places by keyword instead of URL, e.g. <code>hotels in Lisbon, Portugal</code>, <code>sushi restaurants in Austin, TX</code> or <code>museums in Rome</code>. The Actor takes the top places from Tripadvisor search and gets their reviews. Write "... in City, Country" or fill in <i>Search location</i> below.

## `searchLocation` (type: `string`):

Optional location used for every search query: <code>City, Country</code> (e.g. <code>Lisbon, Portugal</code>), <code>City, State</code> (e.g. <code>Portland, Maine</code>) or a region. Leave empty to read it from each query ("hotels in Lisbon").

## `maxPlacesPerSearch` (type: `integer`):

How many top Tripadvisor search results (places) to take for each search query.

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

Maximum number of reviews to get for each place. Set <code>0</code> to get only place details (name, address, rating, review count and star distribution) without reviews.

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

Order in which reviews are collected. With a limit, this decides which reviews you get.

## `reviewsNewerThan` (type: `string`):

Only reviews published on or after this date, e.g. <code>2026-09-01</code> or <code>30 days</code>. Great for scheduled monitoring: run daily or weekly and get only new reviews.

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

Only reviews with these star ratings, e.g. 1 and 2 to collect complaints. Empty = all ratings.

## `travelerTypes` (type: `array`):

Only reviews from these types of travelers (mainly hotels and attractions). Empty = all.

## `visitMonths` (type: `array`):

Only reviews from trips in these months (seasonality analysis). Empty = all.

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

Language to get reviews in, as a code: <code>en</code>, <code>fr</code>, <code>de</code>, <code>es</code>, <code>it</code>, <code>ja</code>, <code>zh-CN</code>... With translations on, Tripadvisor machine-translates reviews into this language where it can. Leave empty to use the language of the URL's site (English for tripadvisor.com). Every row keeps <code>originalLanguage</code>, so you can filter by the language reviews were written in.

## `translateReviews` (type: `boolean`):

When on, reviews written in other languages come in Tripadvisor's machine translation into the site's language (English for tripadvisor.com). <code>originalLanguage</code> and <code>isTranslated</code> tell you which ones were translated.

## `includePlaceDetails` (type: `boolean`):

Also save one row per place (rowType = place) with name, address, rating, total review count, the 1-5 star distribution and, for searches, the search rank, category and price. Charged as a separate, small event.

## `includeReviewerInfo` (type: `boolean`):

Include the reviewer's public display name, profile link, home location, review count and avatar. Turn off if you don't need personal data (recommended for GDPR-sensitive use).

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

Stop after this many reviews across all places. You can also cap spending with Apify's "Maximum cost per run"; the Actor stops exactly there and never buys data it cannot return.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.tripadvisor.com/Attraction_Review-g187147-d188151-Reviews-Eiffel_Tower-Paris_Ile_de_France.html"
  ],
  "maxPlacesPerSearch": 5,
  "maxReviewsPerPlace": 20,
  "sortBy": "most_recent",
  "translateReviews": true,
  "includePlaceDetails": false,
  "includeReviewerInfo": true
}
```

# Actor output Schema

## `reviews` (type: `string`):

No description

## `places` (type: `string`):

No description

## `summary` (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/Attraction_Review-g187147-d188151-Reviews-Eiffel_Tower-Paris_Ile_de_France.html"
    ],
    "maxReviewsPerPlace": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("wrenfield-data/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/Attraction_Review-g187147-d188151-Reviews-Eiffel_Tower-Paris_Ile_de_France.html"],
    "maxReviewsPerPlace": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("wrenfield-data/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/Attraction_Review-g187147-d188151-Reviews-Eiffel_Tower-Paris_Ile_de_France.html"
  ],
  "maxReviewsPerPlace": 20
}' |
apify call wrenfield-data/tripadvisor-reviews-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,wrenfield-data/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/N0rHAnRyHe8evne5u/builds/PVYhxj3MUegK10hOa/openapi.json
