# TripAdvisor Reviews Scraper - Most Comprehensive (`kaix/tripadvisor-reviews-scraper`) Actor

🔥 ~$0.05/1K reviews 🔥 Scrape all reviews for any TripAdvisor business. Full review text, ratings, author profiles, trip types, and helpful votes. Accepts business URLs.

- **URL**: https://apify.com/kaix/tripadvisor-reviews-scraper.md
- **Developed by:** [Kai](https://apify.com/kaix) (community)
- **Categories:** Travel, E-commerce, SEO tools
- **Features:** Limited permissions
- **Stats:** 45 total users, 18 monthly users, 99.4% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.04 / 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 - Most Comprehensive

Get the TripAdvisor reviews of any restaurant, hotel, attraction, or cruise.
Each review has 32 fields: rating, title, full text, dates, trip type, language,
reviewer details, category ratings, photos, and the owner's response. Filter by
language, rating, trip type, month, publication date, and text. Sort by newest,
detailed, or highest rating.

Read a few reviews or the full history of a place. A 20-review run takes about
2 seconds, and 1,000 reviews take about 5 seconds. Start with a TripAdvisor URL
or a location ID. Starting at $0.04 per 1,000 reviews.

### What can you do with it?

- **Reputation monitoring.** Collect the new reviews of your places every day or
  week with a start date.
- **Competitor benchmarking.** Compare ratings, category ratings, and owner
  response rates across hotels, restaurants, or attractions.
- **Sentiment and topic analysis.** Feed review text, ratings, trip types, and
  languages into your models.
- **Complaint finding.** Read only the 1- and 2-star reviews, or only the
  reviews that mention a topic such as "parking".
- **Traveler research.** See what couples, families, solo travelers, or business
  travelers say about a place.
- **Owner response audits.** Find the reviews that got a reply, read the
  replies, and see when the owner wrote them.
- **Seasonal analysis.** Compare what guests say in summer and in winter with
  the publication month.
- **Market research by language.** Read the reviews in one language, such as
  French or Japanese, to see how a local market sees a place.
- **Full review archives.** Download every review of a place, also a place with
  more than 100,000 reviews, such as the Eiffel Tower.

### What data does it extract?

| Data | When you get it |
|---|---|
| Review ID, rating (1 to 5), title, full text | Every review |
| Published date and visit month, as display text and as ISO dates | Every review |
| Review language, original language, and a translation flag | Every review |
| Review link, helpful votes, and a pinned flag | Every review |
| Business ID, name, link, and place type (restaurant, hotel, attraction, or ship) | Every review |
| Reviewer name, member ID, profile link, total contributions, and verified flag | Every review |
| Reviewer avatar and hometown | When the reviewer added them |
| Trip type (business, couples, family, friends, or solo) | When the reviewer chose one. Most cruise reviews have none. |
| Category ratings, such as Value, Rooms, Service, and Cleanliness | When the reviewer rated categories. Attraction reviews have none. |
| Photos with captions | When the reviewer added photos |
| Owner response with text, date, author, and role | When the owner replied. Mostly hotels. |
| Review tips | When the reviewer wrote a tip |

TripAdvisor does not have every field for every review. A field without data is
`null` or `[]`.

### Quick start

1. Enter a TripAdvisor review-page URL or a location ID in **Business URLs or
   location IDs**.
2. Set **Maximum reviews per business**. Use `0` to get all reviews.
3. Click **Start**. Download the results as JSON, CSV, Excel, or HTML.

The same input as JSON:

```json
{
  "businesses": [
    "https://www.tripadvisor.com/Restaurant_Review-g60745-d5572598-Reviews-Ostra-Boston_Massachusetts.html"
  ],
  "maxReviews": 20
}
```

### Examples by use case

**The newest reviews of a place.** Use a location ID instead of a URL if you
have one. This is the default order:

```json
{
  "businesses": ["5572598"],
  "maxReviews": 50
}
```

**Every review of a place.** This also works for the biggest places. The Eiffel
Tower has about 144,000 reviews and takes about 10 minutes. Use 1,024 MB of
memory or more for a run of more than a few thousand reviews:

```json
{
  "businesses": ["5572598"],
  "maxReviews": 0
}
```

**Monitor new reviews.** Run this on a schedule and move the date forward each
time. Use the `id` field to skip reviews that you already have:

```json
{
  "businesses": ["5572598"],
  "maxReviews": 0,
  "since": "2026-08-15"
}
```

**Find complaints.** Only 1- and 2-star reviews:

```json
{
  "businesses": ["5572598"],
  "maxReviews": 0,
  "rating": ["1", "2"]
}
```

**Reviews about a topic.** English reviews of a hotel that mention breakfast:

```json
{
  "businesses": [
    "https://www.tripadvisor.com/Hotel_Review-g60763-d93589-Reviews-The_Michelangelo-New_York_City.html"
  ],
  "maxReviews": 100,
  "language": "en",
  "searchQuery": "breakfast"
}
```

**Reviews from business travelers:**

```json
{
  "businesses": ["93589"],
  "maxReviews": 100,
  "tripType": ["Business"]
}
```

**Compare places.** One run reads all the places. The dataset keeps the order
of your list:

```json
{
  "businesses": ["5572598", "802686", "105127"],
  "maxReviews": 200
}
```

**The best-rated reviews first:**

```json
{
  "businesses": ["5572598"],
  "maxReviews": 100,
  "sortBy": "highest"
}
```

**Reviews in another language.** Set `language` to a code such as `fr`, `de`,
or `ja`:

```json
{
  "businesses": ["188151"],
  "maxReviews": 100,
  "language": "fr"
}
```

**Summer reviews.** Reviews that people published in June, July, and August:

```json
{
  "businesses": ["188151"],
  "maxReviews": 200,
  "months": ["6", "7", "8"]
}
```

**TripAdvisor's detailed order.** Reviews in the order that TripAdvisor calls
"detailed":

```json
{
  "businesses": ["93589"],
  "maxReviews": 100,
  "sortBy": "detailed"
}
```

**Owner replies.** There is no filter for replies. Collect the reviews with the
"Every review of a place" input, then keep the rows where `ownerResponse` is not
`null`. `ownerResponseDetail` holds the reply date and the role of the person
who replied.

### Choose the businesses

Put one or more entries in `businesses`. Each entry is a location ID or a
TripAdvisor review-page URL. You can mix both in one run.

- **Location ID.** This is the number after `-d` in the URL. The URL
  `.../Restaurant_Review-g60745-d5572598-Reviews-Ostra-Boston_Massachusetts.html`
  has the location ID `5572598`.
- **URL.** The Actor accepts restaurant, hotel, attraction, and cruise review
  pages. Other TripAdvisor domains, such as `tripadvisor.co.uk` and
  `tripadvisor.fr`, work too. Page offsets such as `-or10-`, `#REVIEWS`, and query strings
  are fine. A link to one review (`ShowUserReviews`) works too.
- **Not accepted.** A page without a `-d` number, such as a city page, has no
  location ID. The log shows `Cannot parse location from input`, and the other
  businesses still run.

```json
{
  "businesses": [
    "https://www.tripadvisor.com/Restaurant_Review-g60745-d5572598-Reviews-Ostra-Boston_Massachusetts.html",
    "https://www.tripadvisor.com/Hotel_Review-g60763-d93589-Reviews-The_Michelangelo-New_York_City.html",
    "https://www.tripadvisor.com/Attraction_Review-g60763-d105127-Reviews-Central_Park-New_York_City.html",
    "https://www.tripadvisor.com/Cruise_Review-d25948295-Reviews-MSC_World_America"
  ],
  "maxReviews": 5
}
```

The Actor reads the businesses in your order, so the reviews of each business
come as one block in that order. A repeated business is read again. A business
that fails does not stop the others.

### Filter the reviews

Filters are combined. A review must match every filter that you set. Inside one
filter, a review can match any of the values.

- **`language`.** Use `all` for every language, or a code such as `en`, `fr`,
  `de`, or `ja`. The results include TripAdvisor's machine translations into
  that language. Use `isTranslated` and `originalLanguage` to keep only original
  reviews.
- **`rating`.** Any combination of `1` to `5`.
- **`tripType`.** Any combination of `Business`, `Couples`, `Family`, `Friends`,
  and `Solo`.
- **`months`.** The calendar months in which the review was published, as
  numbers from `1` to `12`.
- **`searchQuery`.** Text that the review must match.
- **`since`.** The earliest publication date, as `YYYY-MM-DD`.

This example keeps English four- and five-star reviews from couples or families,
published in January or February, that mention service:

```json
{
  "businesses": ["5572598"],
  "maxReviews": 10,
  "language": "en",
  "rating": ["4", "5"],
  "tripType": ["Couples", "Family"],
  "months": ["1", "2"],
  "searchQuery": "service",
  "sortBy": "recent"
}
```

A blank `since` or `language` counts as not set. Some integrations send blank
values for empty fields.

### Choose the review order

`sortBy` sets the order. The default is `recent`.

| Value | Order |
|---|---|
| `recent` | Newest first. |
| `detailed` | TripAdvisor's detailed-reviews order. If TripAdvisor does not offer this order for a business, the Actor stops collecting reviews for that business. |
| `highest` | Five-star reviews first, then four, three, two, and one. Newest first within each star level. |

A `since` date always uses newest order, whatever `sortBy` says. TripAdvisor
keeps a review that the owner pinned at the top of newest order. With `since`,
the Actor skips a pinned review that is older than the date.

### Input reference

Only `businesses` is required.

| Field | Type | Default | Description |
|---|---|---|---|
| `businesses` | string\[] | required | One or more numeric location IDs or HTTPS TripAdvisor restaurant, hotel, attraction, or cruise review URLs. |
| `maxReviews` | integer | `20` | Maximum unique reviews for each business. `0` collects all available reviews. |
| `sortBy` | string | `recent` | `recent`, `detailed` for TripAdvisor's detailed-reviews order, or `highest` for the highest ratings first. |
| `language` | string | `all` | `all` or a language code such as `en`, `fr`, `de`, or `ja`. Results include TripAdvisor's machine translations into that language. |
| `rating` | string\[] | all ratings | Any combination of `1`, `2`, `3`, `4`, and `5`. |
| `tripType` | string\[] | all trip types | Any combination of `Business`, `Couples`, `Family`, `Friends`, and `Solo`. |
| `since` | string | none | Earliest publication date in `YYYY-MM-DD` format. A `since` date uses newest order for every `sortBy` value. |
| `months` | string\[] | all months | Publication month numbers from `1` through `12`. |
| `searchQuery` | string | none | Text that returned reviews must match. |
| `proxyConfiguration` | object | Apify Proxy enabled | Optional connection settings managed by Apify. |

Repeated businesses and repeated filter values are accepted. Unknown input
fields are ignored for compatibility. A `since` value that is not in
`YYYY-MM-DD` format fails the run.

<details>
<summary>Complete input example</summary>

This valid input shows how the filters fit together. It is a syntax example,
not a promise that the selected businesses still have matching reviews.

```json
{
  "businesses": [
    "https://www.tripadvisor.com/Restaurant_Review-g60745-d5572598-Reviews-Ostra-Boston_Massachusetts.html",
    "https://www.tripadvisor.com/Hotel_Review-g60763-d93589-Reviews-The_Michelangelo-New_York_City.html"
  ],
  "maxReviews": 50,
  "sortBy": "recent",
  "language": "en",
  "rating": ["4", "5"],
  "tripType": ["Couples", "Family"],
  "since": "2025-01-01",
  "months": ["1", "2"],
  "searchQuery": "service",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

</details>

### Output

Each item in the dataset is one review. The **Overview** table shows the review
ID, business, rating, title, text, author, published date, and review link.
Every field below is in every item. A field without data is `null` or `[]`.

These fields are always empty: `accommodationCategory` is `null`, and
`reviewTips[].published` is `null`. The empty fields stay so that existing
integrations keep working.

#### Fields by topic

- **Review.** ID, rating, title, text, and the review link. Helpful votes, the
  pinned flag, the review status, and the publishing platform.
- **Dates.** The published date as display text (`publishedDate`) and as an ISO
  date (`publishedDateISO`), the creation date, and the visit month as text and
  as an ISO date.
- **Language.** The language of the review as shown, its original language, a
  translation flag, and the translation type.
- **Trip.** Trip type and the review tip.
- **Category ratings.** A label and a value for each category the reviewer rated.
- **Reviewer.** Name, hometown, total contributions, helpful votes, avatar,
  profile link, member ID, user name, and verified flag.
- **Photos.** ID, URL, and caption of each reviewer photo.
- **Owner response.** The reply text, and the reply's ID, language, date, author,
  and role.
- **Business.** Location ID, name, link, and place type.
- **Run.** The UTC time at which the Actor read the review.

#### Review example

This example is a hotel review with category ratings, a photo, a tip, and an
owner response. Square brackets mark values removed from the documentation.

<details>
<summary>Open the review JSON</summary>

```json
{
  "id": "1067541820",
  "locationId": 93589,
  "businessName": "The Michelangelo New York",
  "businessUrl": "https://www.tripadvisor.com/Hotel_Review-g60763-d93589-Reviews-The_Michelangelo_New_York-New_York_City_New_York.html",
  "rating": 5,
  "title": "Repeat visit to a favorite hotel.",
  "text": "This is my second review of The Michelangelo. [...] Again, we had an excellent experience. Upgraded this trip to a grand suite, with lots of space and two bathrooms. [...]",
  "publishedDate": "July 8, 2026",
  "dateVisited": "July 2026",
  "tripType": "Couples",
  "author": {
    "displayName": "[reviewer name]",
    "hometown": "[hometown]",
    "totalContributions": 139,
    "helpfulVotes": null,
    "avatarUrl": "[avatar URL]",
    "profileUrl": "[profile URL]",
    "userId": "[member ID]",
    "isVerified": false,
    "username": "[user name]"
  },
  "subratings": [
    { "label": "Value", "value": 4 },
    { "label": "Rooms", "value": 5 },
    { "label": "Location", "value": 5 },
    { "label": "Cleanliness", "value": 5 },
    { "label": "Service", "value": 5 },
    { "label": "Sleep Quality", "value": 5 }
  ],
  "photos": [
    {
      "id": "869000050",
      "url": "https://dynamic-media-cdn.tripadvisor.com/media/photo-o/33/cb/e3/72/caption.jpg?w=1200&h=800&s=1",
      "caption": "Grand suite living room with bedroom in background."
    }
  ],
  "ownerResponse": "[reviewer name], it is truly wonderful to hear from you again [...] We look forward to welcoming you back whenever your travels bring you to New York!",
  "helpfulVotes": 1,
  "scrapedAt": "2026-10-14T07:26:28.348Z",
  "reviewUrl": "https://www.tripadvisor.com/ShowUserReviews-g60763-d93589-r1067541820-The_Michelangelo_New_York-New_York_City_New_York.html",
  "placeType": "ACCOMMODATION",
  "accommodationCategory": null,
  "isTranslated": false,
  "isPinned": false,
  "tipText": "I got a better price and cancellation terms by calling the hotel directly. Spring for a grand suite if you can afford it.",
  "createdDate": "2026-07-08",
  "publishedDateISO": "2026-07-08",
  "dateVisitedISO": "2026-07-01",
  "language": "en",
  "originalLanguage": "en",
  "status": "PUBLISHED",
  "publishPlatform": null,
  "translationType": null,
  "reviewTips": [
    {
      "body": "I got a better price and cancellation terms by calling the hotel directly. Spring for a grand suite if you can afford it.",
      "published": null
    }
  ],
  "ownerResponseDetail": {
    "id": 1067765094,
    "text": "[reviewer name], it is truly wonderful to hear from you again [...] We look forward to welcoming you back whenever your travels bring you to New York!",
    "language": "en",
    "publishedDate": "2026-07-10",
    "connectionToSubject": "Guest Services / Front Office",
    "author": {
      "userId": "[member ID]",
      "displayName": "Hotel Manager",
      "profileUrl": "[profile URL]",
      "avatarUrl": "[avatar URL]"
    }
  }
}
```

</details>

#### Field groups

| Group | Root fields |
|---|---|
| Review | `id`, `title`, `text`, `rating`, `helpfulVotes`, `isPinned`, `status`, `publishPlatform`, `reviewUrl`, `tipText`, `reviewTips` |
| Dates | `publishedDate`, `publishedDateISO`, `createdDate`, `dateVisited`, `dateVisitedISO` |
| Language | `language`, `originalLanguage`, `isTranslated`, `translationType` |
| Trip and ratings | `tripType`, `subratings` |
| Reviewer | `author` |
| Photos | `photos` |
| Owner response | `ownerResponse`, `ownerResponseDetail` |
| Business | `locationId`, `businessName`, `businessUrl`, `placeType`, `accommodationCategory` |
| Run | `scrapedAt` |

<details>
<summary>Field types</summary>

**Root fields**

| JSON type | Root fields |
|---|---|
| string | `id`, `businessName`, `businessUrl`, `title`, `text`, `publishedDate`, `scrapedAt` |
| number | `locationId`, `rating`, `helpfulVotes` |
| string or `null` | `dateVisited`, `tripType`, `ownerResponse`, `reviewUrl`, `placeType`, `accommodationCategory`, `tipText`, `createdDate`, `publishedDateISO`, `dateVisitedISO`, `language`, `originalLanguage`, `status`, `publishPlatform`, `translationType` |
| boolean | `isTranslated` |
| boolean or `null` | `isPinned` |
| object | `author` |
| object\[] | `subratings`, `photos`, `reviewTips` |
| object or `null` | `ownerResponseDetail` |

**Nested fields**

| Object | Field types |
|---|---|
| `author` | `displayName`: string, `Anonymous` when TripAdvisor gives no name; `hometown`: string or `null`; `totalContributions`: number; `helpfulVotes`: string or `null`; `avatarUrl`, `userId`, `username`: string or `null`; `profileUrl`: full URL as string, or `null` for an account without a profile page; `isVerified`: boolean. |
| `subratings[]` | `label`: string; `value`: number. |
| `photos[]` | `id`, `url`, `caption`: string. |
| `reviewTips[]` | `body`: string; `published`: boolean or `null`. Always `null`; see above. |
| `ownerResponseDetail` | `id`: number; `text`, `language`, `publishedDate`, `connectionToSubject`: string; `author`: object. |
| `ownerResponseDetail.author` | `userId`, `displayName`: string; `profileUrl`: full URL as string; `avatarUrl`: string or `null`. |

</details>

#### Field notes

- `id` is the TripAdvisor review ID. Use it to remove reviews that you already
  have, for example when you run a monitor on a schedule.
- `publishedDate` is TripAdvisor's display text, such as "October 1, 2026".
  `publishedDateISO` and `createdDate` use `YYYY-MM-DD`.
- `dateVisited` has only the month. In `dateVisitedISO`, the day is always `01`.
- `language` is the language of the review as shown. With a `language` filter,
  TripAdvisor can show a machine translation. `isTranslated` is `true` then, and
  `originalLanguage` is the language that the reviewer wrote in.
- `isPinned` is `true` for a review that the owner pinned. TripAdvisor shows it
  first in newest order, whatever its date.
- `ownerResponse` and `ownerResponseDetail.text` hold the same text.
  `ownerResponseDetail` adds the date, the author, and the author's role.
- `author.displayName` is `Anonymous` when TripAdvisor gives no name.
  `author.helpfulVotes` is `null` in current data.
- `placeType` is `EATERY` for restaurants, `ACCOMMODATION` for hotels,
  `ATTRACTION` for attractions, and `SHIP` for cruises.
- `publishPlatform` is `null` in current data.
- `reviewUrl` and `businessUrl` always start with `https://www.tripadvisor.com`,
  also when you give a URL from another TripAdvisor domain.

### FAQ

#### How many reviews can I get?

There is no fixed limit. Set `maxReviews` to `0` to get all the reviews that
TripAdvisor lists for a business. For a place with very many reviews, the run
log tells you when the Actor reads the place in smaller parts. The reviews from
that point on come by star level, newest first within each level. TripAdvisor
adds and removes reviews all the time, so your count can differ by a few from
the count on the TripAdvisor page.

#### Why did I get fewer reviews than `maxReviews`?

`maxReviews` is an upper limit. The business can have fewer reviews, and your
filters can remove some. The Actor also removes repeated review IDs. A
`since` date can remove older reviews.

#### How do I find the location ID?

Open the place on TripAdvisor. The ID is the number after `-d` in the URL.
You can also give the whole URL.

#### How do I get only the new reviews?

Set `since` to the date of your last run, and run the Actor on a schedule.
Use the `id` field to remove reviews that you already have. Reviews that
TripAdvisor shows with a date before `since` are not returned.

#### Can I get the place details, such as the address, rating, and ranking?

This Actor returns reviews. To get the places themselves, use
[TripAdvisor Places Scraper](https://apify.com/kaix/tripadvisor-places-scraper).

#### A feature or field that I need is missing. What can I do?

Tell us in the **Issues** tab. Describe what you need and give an example
business.

#### Where can I report a problem?

Open an issue in the **Issues** tab. Include the run ID and the input, so that
we can reproduce it.

### Similar Actors

- [Yelp Reviews Scraper](https://apify.com/kaix/yelp-reviews-scraper). Yelp
  reviews and business details from business URLs, aliases, or business IDs.
- [Google Maps Reviews Scraper](https://apify.com/kaix/google-maps-reviews-scraper).
  Google Maps reviews with place context, from place URLs or Place IDs.
- [Glassdoor Reviews Scraper](https://apify.com/kaix/glassdoor-reviews-scraper).
  Glassdoor company reviews with ratings, pros and cons, employment details, and
  employer responses.
- [G2 Scraper](https://apify.com/kaix/g2-scraper). G2 software reviews,
  products, analytics, comparisons, and discussions.

# Actor input Schema

## `businesses` (type: `array`):

One or more numeric location IDs or HTTPS TripAdvisor restaurant, hotel, attraction, or cruise review URLs.

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

Maximum unique reviews to save for each business. Set to 0 to continue until no more pages are available.

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

Order by newest, TripAdvisor's detailed reviews, or highest rating. Highest rating reads five-star reviews first, then four, three, two, and one, newest first within each. A since date always uses newest order.

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

Use all for every available language, or a language code such as en, fr, de, or ja. Results include machine translations into that language.

## `rating` (type: `array`):

Only return reviews with one of these traveler ratings. Leave empty for all ratings.

## `tripType` (type: `array`):

Only return reviews for these visit types. Leave empty for all trip types.

## `since` (type: `string`):

Only return reviews published on or after this date (YYYY-MM-DD).

## `months` (type: `array`):

Only return reviews published in these calendar months. Leave empty for all months.

## `searchQuery` (type: `string`):

Only return reviews matching this text.

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

Optional connection settings managed by Apify. Apify Proxy is enabled by default.

## Actor input object example

```json
{
  "businesses": [
    "https://www.tripadvisor.com/Restaurant_Review-g60745-d5572598-Reviews-Ostra-Boston_Massachusetts.html"
  ],
  "maxReviews": 20,
  "sortBy": "recent",
  "language": "all",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `reviews` (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 = {
    "businesses": [
        "https://www.tripadvisor.com/Restaurant_Review-g60745-d5572598-Reviews-Ostra-Boston_Massachusetts.html"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("kaix/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 = {
    "businesses": ["https://www.tripadvisor.com/Restaurant_Review-g60745-d5572598-Reviews-Ostra-Boston_Massachusetts.html"],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("kaix/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 '{
  "businesses": [
    "https://www.tripadvisor.com/Restaurant_Review-g60745-d5572598-Reviews-Ostra-Boston_Massachusetts.html"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call kaix/tripadvisor-reviews-scraper --silent --output-dataset

```

## MCP server setup

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