# Tripadvisor Reviews Scraper & API – Export Tripadvisor Reviews (`rowfeed/tripadvisor-reviews-scraper`) Actor

Export the newest or most detailed Tripadvisor reviews of any hotel, restaurant or attraction: rating, title, text, date, visit month, language, reviewer country and owner reply, plus the place's rating and star breakdown. Paste Tripadvisor links. About $0.50 per 1,000 reviews.

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

## Pricing

from $0.30 / 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.

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 & API – Export Tripadvisor Reviews

Export the Tripadvisor reviews of any hotel, restaurant, attraction, tour or vacation rental as clean rows: star rating, title, full text, date, month of visit, language, the reviewer's country and the owner's reply, together with the place's rating, review count and star breakdown.
Paste Tripadvisor links from any country site. Get the newest or the most detailed reviews first.
Built for hotels and restaurants watching their reputation, travel and hospitality analysts, competitor research, sentiment analysis and AI agents that need Tripadvisor reviews as JSON. No Tripadvisor account, no API key, no browser.

### What you get

- **One row per review** in the order you chose: `rating`, `title`, `review_text`, `published_at`, `visit_month`, `language`, `original_language`, `reviewer_country`, `photos_count`, `owner_reply` and `owner_replied_at`, `review_id` and `review_url`.
- **The place on every row:** `place_name`, `place_type` (hotel, restaurant, attraction, tour, vacation rental), `place_rating`, `place_reviews_total`, `place_rating_distribution` (reviews per star) and `tripadvisor_url`, so many places export into one sheet.
- **Only reviews with text** with one switch (left-out reviews are not charged).
- **One fetch per place:** the same place on tripadvisor.com, .co.uk or .de, or on its second review page, is fetched once.

The reviewer's name, profile link, photo and home town are left out on purpose: they are personal data. Only the country (or region) is kept, and review photos are counted, not linked. Owners greet nearly every reviewer by name, so the reviewer's name is replaced with "guest" in owner replies ("Dear guest,"). Email addresses and phone numbers inside texts and replies are blanked out; a name a reviewer writes inside their own review is not removed.

### Example output

```json
{
  "query": "https://www.tripadvisor.com/Hotel_Review-g186338-d187686-Reviews-The_Savoy-London_England.html",
  "place_name": "The Savoy",
  "place_type": "hotel",
  "place_rating": 4.7,
  "place_reviews_total": 7989,
  "place_rating_distribution": {"1": 113, "2": 145, "3": 318, "4": 882, "5": 6531},
  "tripadvisor_url": "https://www.tripadvisor.com/Hotel_Review-g186338-d187686-Reviews-The_Savoy-London_England.html",
  "review_id": "1084101076",
  "position": 3,
  "rating": 5.0,
  "title": "Perfect London hotel",
  "review_text": "We had the best time at the savoy celebrating a friends birthday, great atmosphere, staff and rooms.  The perfect London hotel experience",
  "published_at": "2026-11-02 10:18:11 +00:00",
  "visit_month": "2026-11",
  "language": "en",
  "original_language": "en",
  "reviewer_country": null,
  "photos_count": 0,
  "owner_reply": "Dear guest, \n\nIt was truly lovely to read your kind words!  We are thrilled you had a wonderful stay here at The Savoy a…",
  "owner_replied_at": "2026-11-02 17:59:27 +00:00",
  "review_url": "https://www.tripadvisor.com/ShowUserReviews-g186338-d187686-r1084101076-The_Savoy-London_England.html",
  "sort": "newest",
  "checked_at": "2026-11-04T13:56:29+00:00"
}
```

### Input

| Field | What it does |
|---|---|
| `places` | One Tripadvisor link per line, e.g. `https://www.tripadvisor.com/Hotel_Review-g186338-d187686-Reviews-The_Savoy-London_England.html`. Hotels, restaurants, attractions, tours and vacation rentals, any country site; a link to a single review works too and brings its place's reviews. Up to 500 per run. |
| `maxReviews` | Reviews per place, 1 to 500. Default 20. |
| `sortBy` | `newest` (default) or `detailed` (Tripadvisor's own order, longer reviews first). |
| `onlyWithText` | Leave out reviews without text (not charged). |
| `newerThan` | Only reviews newer than a date (`2026-10-01`) or an age (`7 days`, `3 months`). Older ones are left out and not charged. |

Only links are accepted, not place names: a name search on Tripadvisor too often lands on the wrong place (in our tests "London Eye" found a river cruise). Open the place on Tripadvisor and copy the address from the browser.

### Pricing

Pay per event, no subscription. **About $0.50 per 1,000 reviews:**

- **$0.30 per 1,000 reviews** ($0.0003 per review row).
- $0.002 per place for every 10 reviews asked for. The first 20 are asked for first, and more only when the place has them, so a place with 7 reviews never pays for 500.
- $0.006 per run start (covers the server time while the reviews are fetched).
- Requests the data provider never accepted are free. An accepted request is charged its page fee even when it brings nothing back (the provider bills it), e.g. a dead link costs $0.004.

Examples: 1 place with 20 reviews costs $0.016. 100 places with 100 reviews each cost about $5.41 (the extra over $5 is the first 20 reviews, which are asked for twice, and the start).
Cap the cost of a run with the maximum charge setting; the Actor never asks for reviews the budget cannot pay for.
**Try it for $0.006:** the pre-filled example is answered from a saved snapshot of real reviews (rows carry `from_snapshot: true`). Change anything and it runs live.
Live runs need a paid Apify plan (any plan); the pre-filled example works on the free plan.

### Good to know

- **Monitoring:** schedule the Actor daily with `sortBy: newest`, `newerThan: 2 days` and `maxReviews: 50`. When the first 20 reviews already reach past the cutoff (most places), a run pays only for those two pages and the reviews that are new. A busy place with more than 20 new reviews gets one more fetch of up to `maxReviews`, so keep that number close to what one day can bring.
- Reviews come through a licensed data provider (DataForSEO) that reads Tripadvisor, usually within 1 to 5 minutes per run. A place whose reviews have not arrived after 15 minutes gets an error row; its page fee stays charged, because the provider billed the request.
- **At most 500 reviews per place and run.** Run `newest` on a schedule to keep a growing history of every new review.
- Reviews in all languages are included, as Tripadvisor's English site shows them: reviews written in another language come as Tripadvisor's English translation. `original_language` tells which language each review was written in (`language` is the language of the text you get), so you can filter or group by it.
- `reviewer_country` is the last part of the place the reviewer gave in their profile, usually a country, sometimes a state or region, and empty when they gave none.
- With `newest`, the first 20 reviews of each place are in Tripadvisor's order; when more are asked for, the rest come from a second fetch and can include a few reviews posted in between.

### More tools from Rowfeed

- [Google Reviews Scraper](https://apify.com/rowfeed/google-maps-reviews-scraper) – Google Maps reviews of any business, newest, best or worst first.
- [Trustpilot Reviews Scraper](https://apify.com/rowfeed/trustpilot-reviews-scraper) – Trustpilot reviews of any company.
- [Google Hotels API](https://apify.com/rowfeed/google-hotels-api) – hotel prices and ratings from Google Hotels.
- [Google Maps Scraper](https://apify.com/rowfeed/google-maps-scraper) – businesses, ratings and contact pages from Google Maps.

Not affiliated with Tripadvisor.

# Actor input Schema

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

One Tripadvisor link per line: a hotel, restaurant, attraction, tour or vacation rental page on any Tripadvisor country site (open the place on Tripadvisor and copy the address). Up to 500 per run.

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

How many reviews to get per place, in the chosen order. Up to 500 per run. Places with fewer reviews only pay for what they have.

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

Which reviews come first: the newest, or the most detailed (Tripadvisor's own order).

## `onlyWithText` (type: `boolean`):

Leave out reviews that have no text. Left-out reviews are not charged.

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

Leave out older reviews: a date (2026-10-01) or an age (7 days, 2 weeks, 3 months). Left-out reviews are not charged. With "Newest first", no further reviews are fetched once the cutoff is reached, which makes scheduled monitoring cheap.

## Actor input object example

```json
{
  "places": [
    "https://www.tripadvisor.com/Hotel_Review-g186338-d187686-Reviews-The_Savoy-London_England.html",
    "https://www.tripadvisor.co.uk/Restaurant_Review-g186338-d21178232-Reviews-No_3_At_Nightingale_Place-London_England.html"
  ],
  "maxReviews": 20,
  "sortBy": "newest",
  "onlyWithText": false,
  "newerThan": "30 days"
}
```

# 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-g186338-d187686-Reviews-The_Savoy-London_England.html"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("rowfeed/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-g186338-d187686-Reviews-The_Savoy-London_England.html"] }

# Run the Actor and wait for it to finish
run = client.actor("rowfeed/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-g186338-d187686-Reviews-The_Savoy-London_England.html"
  ]
}' |
apify call rowfeed/tripadvisor-reviews-scraper --silent --output-dataset

```

## MCP server setup

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