# Tripadvisor Reviews Scraper - Hotels, Restaurants, Attractions (`benthepythondev/tripadvisor-reviews-scraper`) Actor

Scrape Tripadvisor reviews for hotels, restaurants, attractions and airlines by URL: rating, text, date, trip type, sub-ratings, photos, owner response and reviewer.

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

## Pricing

from $1.70 / 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

Collect Tripadvisor reviews for any hotel, restaurant, attraction or airline. Paste the page links and get one row per review with rating, title, full text, date, trip type, sub-ratings, photos, the owner's response and the reviewer. Export to JSON/CSV/Excel, run on a schedule, call via API, or connect to Make, Zapier or n8n.

### 🔎 What is the Tripadvisor Reviews Scraper?

It is an Apify Actor that reads the reviews of the places you name, newest first, and saves them as structured data. You give it Tripadvisor URLs; it returns the reviews with everything a reader sees on the page.

It talks to the same data service the Tripadvisor website uses, 20 reviews per request, without rendering pages in a browser. That makes it fast: in our tests 240 reviews from four places took 5 seconds and 10,000 reviews of one attraction took one minute.

Unfiltered lists can be read to the end. We paged through a hotel with 18,753 reviews and an attraction with 97,010.

A date limit makes it suitable for monitoring. Set **Only reviews since** to last week, schedule the Actor, and each run saves just the new reviews and stops.

#### What data does it extract?

- **Review:** `reviewId`, `url`, `rating` (1 to 5), `title`, `text`, `publishedAt`, `helpfulVotes`
- **Language:** `language`, `originalLanguage`, `isTranslated`
- **Trip:** `stayDate` (year and month of the stay or visit), `tripType` (Family, Couples, Solo, Business, Friends)
- **Details:** `subRatings` (for example Value, Rooms, Location, Cleanliness, Service, Sleep Quality), `tip`, `photos[]`
- **Owner response:** `ownerResponse` with text, date, author and role
- **Reviewer:** `reviewerName`, `reviewerUsername`, `reviewerHometown`, `reviewerContributions`, `reviewerProfileUrl`
- **Place:** `placeId`, `placeName`, `placeType`, `placeUrl`, and `productName` / `productUrl` when the review is about a ticket or tour sold for an attraction

### ⬇️ Input

| Field | Type | What it does |
|---|---|---|
| `places` | array | Tripadvisor URLs of hotels, restaurants, attractions or airlines |
| `maxReviewsPerPlace` | integer | Maximum reviews to save per place. 100 when left empty |
| `reviewsSince` | string | Only reviews published on or after this date (YYYY-MM-DD) |
| `language` | string | `all`, or a language such as `en`, `es`, `fr`, `de`, `it`, `pt`, `ja` |
| `ratings` | array | Only these ratings, for example `["1", "2"]` |
| `tripTypes` | array | Any of `family`, `couples`, `solo`, `business`, `friends` |
| `searchText` | string | Only reviews that mention this word or phrase |
| `sortBy` | string | `mostRecent`, `detailed` or `insightful` |

Links from any Tripadvisor country site work (tripadvisor.com, tripadvisor.co.uk, tripadvisor.de and so on).

#### Example input

The 1 and 2 star reviews of two hotels since the start of the year:

```json
{
  "places": [
    "https://www.tripadvisor.com/Hotel_Review-g60763-d93437-Reviews-Hotel_Edison-New_York_City_New_York.html",
    "https://www.tripadvisor.com/Hotel_Review-g60763-d93589-Reviews-The_Plaza-New_York_City_New_York.html"
  ],
  "maxReviewsPerPlace": 500,
  "reviewsSince": "2026-01-01",
  "ratings": ["1", "2"]
}
```

### ⬆️ Output

One row per review. This is a real row with the long texts shortened and the reviewer's name masked:

```json
{
  "reviewId": "1079222201",
  "url": "https://www.tripadvisor.com/ShowUserReviews-g60763-d93437-r1079222201-Hotel_Edison_Times_Square-New_York_City_New_York.html",
  "placeId": "93437",
  "placeName": "Hotel Edison Times Square",
  "placeType": "ACCOMMODATION",
  "placeUrl": "https://www.tripadvisor.com/Hotel_Review-g60763-d93437-Reviews-Hotel_Edison_Times_Square-New_York_City_New_York.html",
  "rating": 5,
  "title": "My Home Away From Home!",
  "text": "My family and I stayed at Hotel Edison from July 31 through August 9 for our family trip to New York City and had a great experience! ...",
  "language": "en",
  "originalLanguage": "en",
  "isTranslated": false,
  "publishedAt": "2026-09-25T06:07:23.939Z",
  "stayDate": "2026-08",
  "tripType": "Family",
  "helpfulVotes": 0,
  "subRatings": {"Value": 5, "Rooms": 5, "Location": 5, "Cleanliness": 5, "Service": 5, "Sleep Quality": 5},
  "photos": [],
  "ownerResponse": {
    "text": "Dear Valued Guest, Thank you so much for taking the time to share such a wonderful and heartfelt review! ...",
    "publishedAt": "2026-09-26T18:52:04.209Z",
    "author": "Rommel",
    "role": "Guest Services / Front Office"
  },
  "reviewerName": "A*** C",
  "reviewerUsername": "A***_C***",
  "reviewerHometown": "Los Angeles, California",
  "reviewerContributions": 7,
  "reviewerProfileUrl": "https://www.tripadvisor.com/Profile/A***_C***",
  "scrapedAt": "2026-10-02T15:03:07+00:00"
}
```

Restaurant reviews carry sub-ratings such as Food, Service, Value and Atmosphere. Reviews of a ticket sold for an attraction add `"productName": "NYC Empire State Building Observation Deck Ticket"`.

### 💰 How much does it cost?

You pay per review saved, plus a tiny start fee per run.

| Apify plan | Price per 1,000 reviews |
|---|---|
| Free | $2.00 |
| Starter | $1.90 |
| Scale | $1.80 |
| Business and above | $1.70 |

All 18,753 reviews of a large hotel cost about $37.50 on the Free plan. A weekly monitoring run that picks up 40 new reviews costs 8 cents. Set **Maximum cost per run** in the run options and the Actor stops saving at that amount.

### 💡 Use cases

- 🏨 **Reputation monitoring:** schedule a daily or weekly run with a date limit and send new reviews of your properties to Slack, a sheet or your BI tool.
- 🔍 **Competitor analysis:** compare ratings, sub-ratings and complaint topics across the hotels or restaurants in your market.
- 🧠 **Sentiment and AI datasets:** build a labelled corpus with rating, language, trip type and full text for training or retrieval.
- 💬 **Response tracking:** measure how often and how fast owners answer, using `ownerResponse` and its date.

### ❓ FAQ

**Which pages can I use?** Hotel, restaurant, attraction and airline pages. Copy the address of the place's own page. City lists ("Hotels in New York") are not places and are skipped with a warning.

**How many reviews can I get?** Without filters, all of them. With filters Tripadvisor limits some lists: a text search stops at 1,000 results.

**In which language are the reviews?** With `language` set to `all` you get every review. Tripadvisor shows foreign-language reviews in its own machine translation; `isTranslated` is true for those rows and `originalLanguage` names the language the guest wrote in. With a specific language you get the reviews Tripadvisor offers in that language, again including translations.

**How do I get only new reviews each week?** Set `reviewsSince` to the date of your last run and put the Actor on a schedule. The run reads newest first and stops when it reaches older reviews.

**Why is an old review near the top of a date-limited run missing?** Owners can pin one favourite review to the top of their page. If it is older than your date, it is skipped and the run continues.

**Why do some rows have a `productName`?** An attraction's review list also contains reviews of the tickets and tours sold for it. Those rows name the product; rows without it are about the attraction itself.

**Does it need a Tripadvisor account or cookies from me?** No.

**What happens with a wrong or deleted link?** The Actor logs a warning, skips the entry and continues with the others.

**Is it legal to scrape Tripadvisor reviews?** The Actor collects reviews that are publicly visible to any visitor and does not log in. You are responsible for how you use the data. Reviews contain usernames and sometimes hometowns, which can be personal data, so GDPR, CCPA and similar rules apply to storage and reuse, and Tripadvisor's terms of use apply to you as well. If in doubt, ask a lawyer.

**Something is missing or broken?** Open an issue on the Actor's Issues tab with the run ID. Issues are answered within one business day.

### 🧩 Need this as a managed feed?

If you would rather receive a weekly review file for your properties than run the Actor yourself, request a quote at <https://benthepythondev00.github.io/custom.html>.

### 🔗 You might also like

- [Google Maps Reviews Scraper](https://apify.com/benthepythondev/google-maps-reviews-scraper)
- [Google Maps Business Scraper](https://apify.com/benthepythondev/google-maps-business-scraper)
- [Google Play Reviews Scraper](https://apify.com/benthepythondev/google-play-reviews-scraper)
- [App Store Reviews Scraper](https://apify.com/benthepythondev/appstore-reviews-scraper)
- [Reddit Search Scraper](https://apify.com/benthepythondev/reddit-search-scraper)

**Keywords:** tripadvisor reviews scraper, tripadvisor scraper, tripadvisor review export, tripadvisor api alternative, hotel reviews data, restaurant reviews scraper, attraction reviews, airline reviews, review monitoring, reputation management data, hotel sentiment analysis, guest review dataset, tripadvisor reviews csv, tripadvisor reviews api, owner response tracking, hospitality analytics, travel reviews dataset

# Actor input Schema

## `places` (type: `array`):

Tripadvisor URLs of hotels, restaurants, attractions or airlines, one per line. Copy the address of the place's page from any Tripadvisor domain.

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

Maximum number of reviews to save for each place, newest first. Each review is one charged result. Leave empty for 100.

## `reviewsSince` (type: `string`):

Skip reviews published before this date (YYYY-MM-DD). The run stops reading a place when it reaches older reviews, so scheduled runs stay cheap.

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

Reviews shown in this language. Tripadvisor includes its own machine translations here; the fields isTranslated and originalLanguage tell you which rows are translations.

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

Only reviews with these ratings. Leave empty for all.

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

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

## `searchText` (type: `string`):

Only reviews that mention this word or phrase, for example "breakfast" or "parking".

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

Order in which reviews are read. A date in "Only reviews since" always uses the most recent order.

## Actor input object example

```json
{
  "places": [
    "https://www.tripadvisor.com/Hotel_Review-g60763-d93437-Reviews-Hotel_Edison-New_York_City_New_York.html"
  ],
  "maxReviewsPerPlace": 20,
  "language": "all",
  "sortBy": "mostRecent"
}
```

# 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 = {
    "places": [
        "https://www.tripadvisor.com/Hotel_Review-g60763-d93437-Reviews-Hotel_Edison-New_York_City_New_York.html"
    ],
    "maxReviewsPerPlace": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("benthepythondev/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 = {
    "places": ["https://www.tripadvisor.com/Hotel_Review-g60763-d93437-Reviews-Hotel_Edison-New_York_City_New_York.html"],
    "maxReviewsPerPlace": 20,
}

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

```

## MCP server setup

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