# TripAdvisor Reviews Scraper (`piotrv1001/tripadvisor-reviews-scraper`) Actor

The TripAdvisor Reviews Scraper extracts reviews from hotels, restaurants and attractions — full text, star ratings, subratings, trip type, photos, reviewer profiles and owner replies. Scrape one place URL or an entire destination, with date, rating and language filters.

- **URL**: https://apify.com/piotrv1001/tripadvisor-reviews-scraper.md
- **Developed by:** [FalconScrape](https://apify.com/piotrv1001) (community)
- **Categories:** Travel, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 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/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

### 🏨 TripAdvisor Reviews Scraper

Extract **TripAdvisor reviews** from hotels, restaurants and attractions as clean, structured JSON. Paste a single place URL — or paste a **whole destination** and let the scraper find every hotel, restaurant or attraction in that city for you. Full review text, star ratings, per-aspect subratings, trip type, reviewer profiles, photos and owner replies, ready for analysis, dashboards or an LLM pipeline.

Running on the Apify platform, this Actor gives you a REST API, scheduled runs, webhooks, integrations with Google Sheets, Slack, Zapier and Make, built-in proxy rotation, and one-click export to JSON, CSV or Excel.

### ✨ Features

- 🌍 **Destination-level input** — paste `Hotels in Barcelona` and get reviews for every hotel in the city. No other TripAdvisor review scraper does this; the rest make you collect and maintain hundreds of place URLs yourself.
- 🏨 **All three verticals** — hotels, restaurants and attractions from one Actor, with one input format.
- 📝 **30+ fields per review** — full text, title, star rating, per-aspect subratings (Value, Rooms, Location, Cleanliness, Service, Sleep Quality), trip type, visit date, helpful votes and photos.
- 👤 **Reviewer profiles** — display name, hometown, total contributions, avatar and profile URL.
- 💬 **Owner responses** — the management reply, its author, role and date.
- 📅 **Incremental scraping** — set `sinceDate` to `7 days` and a scheduled run picks up only what is new. Perfect for reputation monitoring.
- ⭐ **Rating and language filters** — pull only the 1- and 2-star reviews, or only reviews originally written in Spanish.
- 🕓 **Full history, no depth cap** — go back to a place's very first review, however many thousands that is.

### 🛠️ How to use the TripAdvisor Reviews Scraper

1. **Add your URLs** — paste any TripAdvisor links into *TripAdvisor URLs*. Place pages and destination pages can be mixed freely.
2. **Set a limit** — *Maximum reviews* caps the run. Start with the default 50 to see the output shape.
3. **Add filters if you want them** — a date cutoff, star ratings, or languages.
4. **Click Start** — results stream into the dataset as they arrive.
5. **Export or integrate** — download JSON, CSV, Excel or HTML, or pull the data through the Apify API.

### 📥 Input

| Field | Type | Description |
| --- | --- | --- |
| `startUrls` | array | TripAdvisor place or destination URLs. **Required.** |
| `maxReviews` | integer | Total reviews to collect across all URLs. `0` means no limit. Default `50`. |
| `maxReviewsPerPlace` | integer | Caps reviews taken from each place, so one busy hotel cannot eat a whole destination run. `0` means no limit. |
| `sinceDate` | string | Stop at reviews older than this. Accepts `2026-01-01` or `7 days`, `3 months`. |
| `reviewRatings` | array | Keep only these star ratings, e.g. `["1", "2"]`. |
| `reviewLanguages` | array | Keep only reviews originally written in these languages, e.g. `["en", "es"]`. |
| `proxyConfiguration` | object | Proxy settings. Residential proxies are recommended. |

#### URLs you can paste

```jsonc
{
    "startUrls": [
        // one hotel
        { "url": "https://www.tripadvisor.com/Hotel_Review-g60763-d93589-Reviews-The_Michelangelo_New_York-New_York_City_New_York.html" },
        // one restaurant
        { "url": "https://www.tripadvisor.com/Restaurant_Review-g187147-d718021-Reviews-Le_Comptoir_du_Relais-Paris.html" },
        // every hotel in New York City
        { "url": "https://www.tripadvisor.com/Hotels-g60763-New_York_City_New_York-Hotels.html" },
        // every restaurant in Paris
        { "url": "https://www.tripadvisor.com/Restaurants-g187147-Paris_Ile_de_France.html" },
        // every attraction in Rome
        { "url": "https://www.tripadvisor.com/Attractions-g187791-Activities-Rome_Lazio.html" }
    ],
    "maxReviews": 1000,
    "maxReviewsPerPlace": 50,
    "sinceDate": "3 months"
}
```

### 📊 Sample output data

```json
[
    {
        "id": "1073177238",
        "url": "https://www.tripadvisor.com/ShowUserReviews-g60763-d93589-r1073177238-The_Michelangelo_New_York-New_York_City_New_York.html",
        "title": "Perfect location, spotless rooms",
        "text": "Very well located and clean hotel. Thank you June for your help and patience!",
        "rating": 5,
        "publishedDate": "2026-08-14",
        "visitDate": "2026-08-31",
        "tripType": "BUSINESS",
        "language": "en",
        "originalLanguage": "en",
        "helpfulVotes": 3,
        "subratings": {
            "Value": 5,
            "Rooms": 5,
            "Location": 5,
            "Cleanliness": 5,
            "Service": 5,
            "Sleep Quality": 4
        },
        "photos": ["https://dynamic-media-cdn.tripadvisor.com/media/photo-o/34/35/02/84/caption.jpg?w=4284&h=5712&s=1"],
        "user": {
            "name": "Juliette M",
            "profileUrl": "https://www.tripadvisor.com/Profile/Lovetraveljuly",
            "hometown": "Buenos Aires, Argentina",
            "contributions": 402,
            "avatar": "https://dynamic-media-cdn.tripadvisor.com/media/photo-o/1c/a5/b3/4a/lovetraveljuly.jpg?w=958&h=958&s=1",
            "isVerified": false
        },
        "ownerResponse": {
            "text": "Thank you so much for your wonderful feedback! We look forward to hosting you again.",
            "publishedDate": "2026-08-15",
            "author": "Hotel Manager",
            "role": "Guest Services / Front Office"
        },
        "placeId": 93589,
        "placeName": "The Michelangelo New York",
        "placeUrl": "https://www.tripadvisor.com/Hotel_Review-g60763-d93589-Reviews-The_Michelangelo_New_York-New_York_City_New_York.html",
        "placeType": "ACCOMMODATION",
        "placeCategory": "HOTEL"
    }
]
```

You can download the dataset in various formats such as JSON, HTML, CSV or Excel.

#### Data fields

| Field | Description |
| --- | --- |
| `id` | TripAdvisor's review id — stable, use it to deduplicate across runs |
| `url` | Direct link to the review |
| `title`, `text` | Review headline and full body |
| `rating` | Star rating, 1–5 |
| `publishedDate` | When the review was posted (`YYYY-MM-DD`) |
| `visitDate` | When the reviewer actually stayed or visited |
| `tripType` | `BUSINESS`, `COUPLES`, `FAMILY`, `FRIENDS`, `SOLO` |
| `language`, `originalLanguage` | Displayed language and the language it was written in |
| `helpfulVotes` | How many people marked the review helpful |
| `subratings` | Per-aspect scores such as Value, Rooms, Location, Cleanliness, Service |
| `photos` | Full-resolution image URLs attached to the review |
| `user` | Reviewer name, hometown, contribution count, avatar and profile URL |
| `ownerResponse` | The management reply, its author, role and date — `null` if there is none |
| `placeId`, `placeName`, `placeUrl` | The reviewed place |
| `placeType`, `placeCategory` | `ACCOMMODATION` / `EATERY` / `ATTRACTION`, plus the hotel category for stays |

### 💰 How much does it cost to scrape TripAdvisor reviews?

This Actor uses **pay per event** pricing, so you pay for results and nothing else.

| Event | Free | Bronze | Silver | Gold | Platinum | Diamond |
| --- | --- | --- | --- | --- | --- | --- |
| Actor start | $0.002 | $0.002 | $0.002 | $0.002 | $0.002 | $0.002 |
| Per review scraped | $0.004 | $0.0012 | $0.0009 | $0.0006 | $0.0004 | $0.00025 |

On a Bronze plan, **1,000 reviews cost about $1.20**; on Gold, about $0.60. Apify's free tier includes $5 of platform credit every month, which is enough to try the Actor on a few hundred reviews at no cost.

### 💡 Tips

- **Use `sinceDate` on schedules.** A daily run with `sinceDate: "2 days"` costs a fraction of a full re-scrape and never misses a review.
- **Pair destination URLs with `maxReviewsPerPlace`.** Set it to 20–50 and you get broad coverage of a city instead of an exhaustive dive into its largest hotel.
- **Deduplicate on `id`.** It never changes, so incremental runs merge cleanly into an existing table.
- **Keep residential proxies on.** They are only used to open the session, so the cost is negligible and reliability is much better.

### ❓ FAQ

**Can I scrape restaurants and attractions, not just hotels?**
Yes. All three verticals work with the same input, both as individual place URLs and as destination listings.

**How many reviews can I get from one place?**
All of them. There is no depth limit — places with tens of thousands of reviews are scraped in full if you raise `maxReviews`.

**Can I get only new reviews since my last run?**
Yes, that is what `sinceDate` is for. Reviews are returned newest first and the run stops as soon as it passes your cutoff.

**Why did a URL return nothing?**
TripAdvisor quietly redirects retired place URLs to a city page. If a place reports zero reviews, open the URL in a browser and check it still resolves to the place you expect.

**Is scraping TripAdvisor legal?**
This Actor collects publicly available information only. Scraping public data is generally legal in many jurisdictions, but how you use it is your responsibility — pay particular attention to personal data and copyright, and consult a lawyer if you are unsure. Read Apify's guide on [the legality of web scraping](https://blog.apify.com/is-web-scraping-legal/).

### 🐛 Feedback and support

Found a bug or need a field that is missing? Open an issue on the Actor's **Issues** tab and it will be looked at. If you need a tailored version of this scraper, or a different data source entirely, get in touch through [Apify's custom solutions](https://apify.com/custom-solutions).

# Actor input Schema

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

Paste any TripAdvisor URLs. A hotel, restaurant or attraction page scrapes that place's reviews. A destination page (for example the hotel or restaurant list of a city) scrapes every place in that destination — no need to collect the individual URLs yourself.

## `maxReviews` (type: `integer`):

Total number of reviews to scrape across all URLs. Set to 0 for no limit.

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

Caps how many reviews are taken from each individual place. Useful with destination URLs so that one busy hotel does not use up the whole run. Set to 0 for no limit.

## `sinceDate` (type: `string`):

Stop at reviews older than this date. Accepts a date such as 2026-01-01 or a relative value such as 7 days, 3 months. Leave empty to scrape the full review history. Ideal for scheduled runs that pick up only what is new.

## `reviewRatings` (type: `array`):

Only scrape reviews with these star ratings. Leave empty for all ratings.

## `reviewLanguages` (type: `array`):

Only scrape reviews written in these languages, given as two-letter codes such as en, es, fr, de. Leave empty for all languages.

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

Proxy settings. Residential proxies are strongly recommended for reliable results.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.tripadvisor.com/Hotel_Review-g60763-d93589-Reviews-The_Michelangelo_New_York-New_York_City_New_York.html"
    }
  ],
  "maxReviews": 50,
  "maxReviewsPerPlace": 0,
  "sinceDate": "3 months",
  "reviewRatings": [],
  "reviewLanguages": [],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# 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": [
        {
            "url": "https://www.tripadvisor.com/Hotel_Review-g60763-d93589-Reviews-The_Michelangelo_New_York-New_York_City_New_York.html"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("piotrv1001/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": [{ "url": "https://www.tripadvisor.com/Hotel_Review-g60763-d93589-Reviews-The_Michelangelo_New_York-New_York_City_New_York.html" }] }

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

```

## MCP server setup

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