# TripAdvisor Scraper (`data_wiki/tripadvisor-scraper`) Actor

Collect Tripadvisor hotels, restaurants and attractions with name, address, ratings and rank, reviews, prices, amenities, contact info, awards and AI review summaries. No login needed. Great for travel research, competitor analysis and local business lead lists.

- **URL**: https://apify.com/data_wiki/tripadvisor-scraper.md
- **Developed by:** [Data WiKi](https://apify.com/data_wiki) (community)
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.20 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
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

### 🚀 What is Tripadvisor Scraper?

Tripadvisor Scraper is an Apify Actor that finds public Tripadvisor hotels, restaurants and attractions and saves one row per place. You give it a keyword with a city, a destination list link or a single place link. Each row holds rating, rank, price range, address, phone and website.

- **Start from a keyword or a city:** type "pizza in Rome" or paste a list link, so you do not need place links to begin.
- **One row per place:** rating, review count, rank, price, address, coordinates and awards sit side by side, ready for a spreadsheet.
- **Details that fit the place type:** amenities and booking offers for hotels, cuisines and opening hours for restaurants, duration and highlights for attractions.
- **Reviews are optional:** set **Reviews per place** and the newest reviews are added inside each place row.
- **No Tripadvisor account:** the Actor reads pages that any visitor can see.

Click **Try for free**, type a search such as "hotels in Paris" and press **Start**.

### 📊 What data can you extract from Tripadvisor?

Every row describes one place, and you can export the results as JSON, CSV, Excel, XML or HTML. The example values below are made up for illustration and do not describe a real place.

| Field | Description | Example |
|---|---|---|
| `id` | Tripadvisor place ID | `1000001` |
| `type` | HOTEL, RESTAURANT or ATTRACTION | `RESTAURANT` |
| `category` | hotel, restaurant or attraction | `restaurant` |
| `name` | Place name | `Example Trattoria` |
| `url` | Link to the place on Tripadvisor | `https://www.tripadvisor.com/Restaurant_Review-g100000-d1000001-Reviews-Example_Trattoria-Example_City.html` |
| `description` | Place description, when the page has one | `Example description of a family-run pizzeria.` |
| `rating` | Overall rating | `4.5` |
| `numberOfReviews` | Number of reviews on Tripadvisor | `1200` |
| `ratingHistogram` | Review counts per star level | `{"5": 800, "4": 280, ...}` |
| `subRatings` | Category ratings such as Service or Value, when shown | `{"Service": 4.5, ...}` |
| `rankingPosition` | Position in the destination ranking | `12` |
| `rankingTotal` | Places in that ranking | `9000` |
| `rankingString` | Ranking as Tripadvisor words it | `#12 of 9,000 Restaurants in Rome` |
| `priceLevel` | Price symbol | `$` |
| `priceRange` | Price range text | `$10 - $30` |
| `address` | Address as one line | `Via Esempio 1, Rome, Lazio, 00100, Italy` |
| `addressObj` | Street, city, state, postal code and country | `{"city": "Rome", ...}` |
| `latitude` | Latitude | `41.9` |
| `longitude` | Longitude | `12.5` |
| `phone` | Phone number | `+39 06 0000 0000` |
| `email` | Email, only when the place page shows an email link | `null` |
| `website` | Website, only when the place page shows a website link | `https://example.com` |
| `image` | Main image link | `https://example.com/photo.jpg` |
| `awards` | Awards such as Travelers' Choice | `["Travelers' Choice 2024"]` |
| `aiReviewsSummary` | Tripadvisor's AI review summary, when published | `Example summary of what visitors say.` |
| `reviewTopics` | Tagged review topics, when published | `[{"topic": "Pizza", ...}]` |
| `geoBreadcrumbs` | Location path from region to city | `["Europe", "Italy", "Lazio", "Rome"]` |
| `searchQuery` | The search entry that produced the row | `pizza in Rome` |
| `scrapedAt` | When the row was read (UTC) | `2026-11-07T10:00:00Z` |

The Actor also writes keys that are returned in the rows but not listed in the dataset schema's field list. They are filled only when the place type has them and the page shows them.

| Key | Place type | What it holds |
|---|---|---|
| `webUrl` | all | Copy of `url` |
| `hotelClass` | hotels | Star class |
| `amenities`, `roomFeatures`, `roomTypes` | hotels | Property amenities, room features and room types |
| `languagesSpoken`, `nearbyAirports`, `walkScore` | hotels | Languages spoken, nearby airports and the walkability grade |
| `lowestPrice`, `highestPrice`, `priceCurrency`, `priceDates` | hotels | Lowest and highest offer price, currency and the check-in and check-out dates the prices belong to |
| `offers` | hotels | One entry per booking provider with price, taxes, fees, currency and cancellation note |
| `priceStatus` | hotels | Whether the offers were complete, partial or missing |
| `cuisines`, `mealTypes`, `features`, `dietaryOptions` | restaurants | Cuisines, meal types, features and dietary options |
| `openingHours`, `openNow`, `acceptsReservations`, `menuUrl`, `michelin` | restaurants | Opening hours by day, open-now flag, reservations, menu link and MICHELIN note |
| `duration`, `highlights`, `priceFrom`, `openingHours` | attractions | Visit duration, highlights, starting price and opening hours |
| `reviews`, `reviewInsights`, `reviewsRetrieved`, `reviewsNote` | when `reviewsPerPlace` is above 0 | The reviews, a summary of them, how many were read and a note when Tripadvisor showed fewer |
| `searchMatch` | keyword searches that matched one place | The place name and location the keyword was matched to |
| `error` | failed places | Why the place could not be read |

Hotel prices are read for the default dates that Tripadvisor shows, and the dates are saved in `priceDates`. The address, phone and website fields turn the rows into tripadvisor business listings that you can sort by rank or filter by rating. Restaurant rows give you tripadvisor restaurants data with cuisines and meal types. Hotel rows give you tripadvisor hotels data with amenities and offers. Together the rows form a tripadvisor dataset with one row per place.

Where to look for common needs:

- **Contact:** `phone`, `website` and, rarely, `email` hold the tripadvisor contact details of a place.
- **Maps:** `latitude`, `longitude` and `addressObj` are the tripadvisor coordinates and address parts.
- **Prices:** `priceLevel` and `priceRange` hold the tripadvisor price range of a place.
- **Hotel features:** `amenities`, `roomFeatures` and `roomTypes` list the tripadvisor hotel amenities and rooms.
- **Food:** `cuisines`, `mealTypes` and `dietaryOptions` list the tripadvisor restaurant cuisines and diets.
- **Hours:** `openingHours` stores the tripadvisor opening hours by weekday for restaurants and attractions.
- **Reputation:** `awards` is the tripadvisor awards data. `aiReviewsSummary` is the tripadvisor ai review summary when Tripadvisor publishes one.

### 💡 Use cases for Tripadvisor data

- **Build a restaurant lead list:** search a city with the restaurants category and keep `name`, `address`, `phone` and `website`. The `email` key is empty unless the page shows one. The same fields work as a hotel lead list when you pick the hotels category.
- **Run a hotel competitor analysis:** compare `rating`, `rankingPosition`, `priceRange` and `amenities` for the hotels in one city, then sort by rank. Restaurant competitor analysis works the same way with `cuisines` and `priceLevel`.
- **Hotel price comparison:** `offers`, `lowestPrice` and `highestPrice` show what each booking provider listed for the default dates. Run the same hotels on a schedule for hotel price tracking, and remember the dates stay the default ones Tripadvisor shows.
- **Research the restaurant market:** `cuisines`, `priceLevel` and `rating` show which kinds of places a city has and how they score. That supports restaurant market research before you open or supply one.
- **Track Tripadvisor rankings:** schedule a weekly run and compare `rankingPosition`, `rating` and `numberOfReviews` between runs. Use it for tripadvisor hotel rankings of one city. The same rows give tripadvisor restaurant rankings for the places you supply. Keep `rating` and `scrapedAt` over time to monitor restaurant ratings.
- **Plan a trip or build a map:** attraction rows carry `duration`, `highlights`, `priceFrom` and coordinates, which makes a tourist attractions dataset for one destination. Add `openingHours` for destination research for trip planning. Use `latitude` and `longitude` as a points of interest dataset.
- **Find where to eat:** sort restaurant rows by `rankingPosition` to find top restaurants in a city. Read `dietaryOptions` to find vegetarian restaurants in a city. Tripadvisor lists these as tripadvisor places to eat. Filter `awards` to find travelers choice award winners.
- **Build your own place database:** run one search per city and store the rows in a tripadvisor database of your own. Keep the restaurants rows as a restaurant database by city. The hotels rows work as a hotel database by city.

### 🛠️ How to scrape Tripadvisor places

To scrape data from Tripadvisor with this Actor, follow these steps. Because it works as a tripadvisor search scraper, you can start from a keyword instead of a place link.

1. Create a free Apify account and open Tripadvisor Scraper in Apify Console.
2. Add one entry per line to **Search queries or TripAdvisor URLs** (`search`): a keyword such as "hotels in Paris", a destination list link or a place link.
3. Choose a **Category filter** (`category`) when the search is about one kind of place.
4. Set **Max items per search** (`maxItems`) and keep it low for a first test.
5. Leave **Full place details** (`fullDetails`) on for the complete record, and optionally set **Reviews per place** (`reviewsPerPlace`).
6. Click **Start**, then open the Output tab and download the dataset as JSON, CSV, Excel, XML or HTML.

#### How to scrape Tripadvisor restaurants

Enter a search such as "pizza in Rome" and set `category` to `restaurants`. Used as a tripadvisor restaurant scraper, it returns cuisines, meal types, opening hours and the ranking text in every row.

#### How to scrape Tripadvisor hotels

Enter "hotels in Paris" or a hotel list link and set `category` to `hotels`. As a tripadvisor hotel scraper it adds amenities and booking offers for the default dates. The tripadvisor hotel prices sit in `offers`.

#### How to scrape Tripadvisor attractions

Set `category` to `attractions` and use a destination such as a city list link. As a tripadvisor attractions scraper it adds duration, highlights and starting price.

#### How to export Tripadvisor data

Open the dataset in the Output tab, choose a format in the export menu and download the file for your tripadvisor dataset download. To export Tripadvisor places to CSV, pick CSV in the same menu. The Excel and CSV files open as one table with one row per place.

### 💰 How much does it cost to scrape Tripadvisor?

The Actor uses pay per event. The `main_result` event is charged once for every row saved to the default dataset, and the `apify-actor-start` event is charged once per run at $0.00005. Apify platform usage (compute) is billed on top of the events above.

| Plan tier | Price per row | Price per 1,000 rows |
|---|---|---|
| Free | $0.0018 | $1.80 |
| Bronze | $0.0016 | $1.60 |
| Silver | $0.0014 | $1.40 |
| Gold, Platinum, Diamond | $0.0012 | $1.20 |

Example: 1,000 rows on the Free tier cost 1,000 x $0.0018 = $1.80, and 500 rows on the Gold tier cost 500 x $0.0012 = $0.60, each plus the $0.00005 start event. A row is one place, so reviews inside a row cost nothing extra. A row that only reports an error is also saved to the dataset and charged. Check the Pricing tab for the current rates and set a maximum spend per run to cap the total. The Actor is configured with 1024 MB of memory.

### ⬇️ Input

Only **Search queries or TripAdvisor URLs** (`search`) is required. The example below collects up to 30 restaurants for "pizza in Rome" with full details and no reviews.

```json
{
  "search": ["pizza in Rome"],
  "category": "restaurants",
  "maxItems": 30,
  "reviewsPerPlace": 0,
  "fullDetails": true,
  "proxyConfiguration": { "useApifyProxy": false }
}
```

| Field | What it does |
|---|---|
| `search` (required) | One keyword, destination list link or place link per entry. A comma does not split an entry, so "hotels in Paris, France" is one search. |
| `category` | `all` (default), `hotels`, `restaurants` or `attractions`. It narrows keyword and destination searches. |
| `maxItems` | Most places collected per search entry. Default 30, 0 collects everything Tripadvisor lists, maximum 10000. |
| `reviewsPerPlace` | Reviews added to each place row, 0 to 1000. Default 0 means no reviews. |
| `fullDetails` | On by default. Opens each place page for the full record. Off gives shorter rows faster. |
| `proxyConfiguration` | Optional. Leave the default to start without a proxy. |

> 💡 With `category` set to `all`, a destination search is split across the restaurants, hotels and attractions lists, so each list gets about a third of `maxItems`.

> 💡 Start with a small `maxItems` and check the first rows before a large run.

> ⚠️ A `reviewsPerPlace` above 0 needs the place pages, so `fullDetails` is switched on automatically.

> ⚠️ Reviews contain reviewer names and locations, which are personal data. Keep `reviewsPerPlace` at 0 when you only need place facts.

### ⬆️ Output

The scraped results are shown as a dataset in the **Storage** tab. The table view is for convenience and doesn't show **all the fields**. You can export the data as JSON, CSV, Excel, XML or HTML. The sample continues from the input above, is shortened, and uses made-up values.

```json
{
  "id": "1000001",
  "type": "RESTAURANT",
  "category": "restaurant",
  "name": "Example Trattoria",
  "url": "https://www.tripadvisor.com/Restaurant_Review-g100000-d1000001-Reviews-Example_Trattoria-Example_City.html",
  "webUrl": "https://www.tripadvisor.com/Restaurant_Review-g100000-d1000001-Reviews-Example_Trattoria-Example_City.html",
  "description": "Example description of a family-run pizzeria.",
  "address": "Via Esempio 1, Rome, Lazio, 00100, Italy",
  "addressObj": { "street": "Via Esempio 1", "city": "Rome", "state": "Lazio", "postalCode": "00100", "country": "Italy" },
  "latitude": 41.9,
  "longitude": 12.5,
  "phone": "+39 06 0000 0000",
  "email": null,
  "website": "https://example.com",
  "rating": 4.5,
  "numberOfReviews": 1200,
  "ratingHistogram": { "5": 800, "4": 280, "3": 80, "2": 25, "1": 15 },
  "subRatings": { "Food": 4.5, "Service": 4.5, "Value": 4.0 },
  "rankingPosition": 12,
  "rankingTotal": 9000,
  "rankingString": "#12 of 9,000 Restaurants in Rome",
  "priceLevel": "$",
  "priceRange": "$10 - $30",
  "cuisines": ["Italian", "Pizza"],
  "mealTypes": ["Lunch", "Dinner"],
  "dietaryOptions": ["Vegetarian Friendly"],
  "openingHours": { "Monday": ["12:00-23:00"], "Tuesday": ["12:00-23:00"] },
  "openNow": true,
  "acceptsReservations": true,
  "image": "https://example.com/photo.jpg",
  "geoBreadcrumbs": ["Europe", "Italy", "Lazio", "Rome"],
  "awards": ["Travelers' Choice 2024"],
  "aiReviewsSummary": "Example summary of what visitors say.",
  "reviewTopics": [{ "topic": "Pizza", "sentiment": "Excellent", "summary": "Example topic summary." }],
  "searchQuery": "pizza in Rome",
  "scrapedAt": "2026-11-07T10:00:00Z"
}
```

#### Place row with reviews

With `reviewsPerPlace` set to 1, the same row also holds the keys below. The sample is shortened and made up.

```json
{
  "reviewInsights": {
    "reviewsAnalysed": 1,
    "averageRating": 5.0,
    "ownerResponseRate": 0.0,
    "avgDaysToRespond": null,
    "machineTranslatedShare": 0.0,
    "negativeShare": 0.0,
    "tripTypes": { "Couples": 1 }
  },
  "reviews": [
    {
      "id": "900000001",
      "url": "https://www.tripadvisor.com/ShowUserReviews-g100000-d1000001-r900000001-Example_Trattoria-Example_City.html",
      "rating": 5,
      "title": "Example review title",
      "text": "Example review text written for this README. It is not a real review.",
      "publishedDate": "2026-10-20",
      "visitDate": "2026-10",
      "tripType": "Couples",
      "language": "en",
      "isMachineTranslated": false,
      "subRatings": { "Food": 5 },
      "author": "Example Traveler",
      "authorUrl": null,
      "authorLocation": "Sampletown",
      "authorContributions": 12,
      "helpfulVotes": 0,
      "photoCount": 0,
      "isPinnedFavorite": false,
      "wordCount": 13,
      "ownerResponded": false,
      "ownerResponse": null,
      "ownerResponseBy": null,
      "ownerResponseDate": null,
      "daysToRespond": null
    }
  ],
  "reviewsRetrieved": 1
}
```

A `RUN_SUMMARY` record in the key-value store lists `totalItems`, `ok`, `errors`, `requests` and `durationSecs` for the run.

### ⚠️ Limitations and error handling

- Only public pages are read. Nothing that needs a Tripadvisor login is collected.
- A search returns the places Tripadvisor lists for it. If a list ends early, the log says how many places it held.
- Hotel prices are for the default dates Tripadvisor shows. There is no date input, so the Actor cannot price a stay you choose.
- Reviews come newest first, without filters. Tripadvisor may show fewer reviews to a visitor who is not logged in than the place count says, and `reviewsNote` then says so.
- Fields such as `email`, `website`, `description`, `priceRange` and `openingHours` depend on what the place page shows and can be `null`.
- With `fullDetails` off, rows are shorter: `id`, `type`, `category`, `name`, `url`, `webUrl`, `address`, `latitude`, `longitude`, `phone`, `rating`, `numberOfReviews`, `priceLevel`, `priceRange`, `cuisines`, `searchQuery` and `scrapedAt`. A list entry without a name or rating still gets its place page opened.
- A place that cannot be read is saved as a row with an `error` note, `url`, `id`, `name` and `searchQuery`. That row counts as a result and is charged like any other row.
- A keyword that matches no place, or a link that is not a supported Tripadvisor link, produces no row. The log names the entry.
- If a required input is missing or invalid, the run stops with the status `Input error: ...` and a short reason.
- When Tripadvisor rejects requests, the Actor pauses, retries and switches to another connection. If requests are still refused, the run ends with the rows saved so far.
- If you set a maximum spend per run, the Actor stops cleanly when it is reached.

The `priceStatus` key of a hotel row has one of these values.

| Value | Meaning |
|---|---|
| `complete` | All offers were read |
| `partial (TripAdvisor had not finished collecting offers)` | Some offers were still loading when the Actor read them |
| `no offers shown by TripAdvisor for the default dates` | No offers appeared for the default dates |

### 🔌 Integrating Tripadvisor Scraper with other apps

You can start Tripadvisor Scraper from the Apify API, on a schedule or from a webhook, and send the rows on to other tools. As an Apify tripadvisor scraper it runs on the Apify platform, so these options are built in. For a recurring check, run the same search on a [schedule](https://docs.apify.com/actors/running/schedules) and compare `rankingPosition`, `rating` or `lowestPrice` between runs.

- [Apify integrations](https://docs.apify.com/integrations), including [Make](https://docs.apify.com/integrations/make) and [Zapier](https://docs.apify.com/integrations/zapier)
- [Webhooks](https://docs.apify.com/integrations/webhooks) to trigger your own code when a run finishes
- The [Apify API](https://docs.apify.com/api/v2) with the Actor id `data_wiki/tripadvisor-scraper`; see the API tab for ready-made code
- AI agents can call this Actor through the [Apify MCP server](https://docs.apify.com/mcp)

### 🔗 Other travel and feedback scrapers by data_wiki

| Actor | What it extracts | When to use it |
|---|---|---|
| [Tripadvisor Review Scraper](https://apify.com/data_wiki/tripadvisor-review-scraper) | One row per review, plus tables for places, reviewers, photos, owner replies, sub-ratings and input status; takes place links or place ids | When you need the reviews themselves, with filters for stars, language, keyword, traveler type or month |
| [Tripadvisor Reviews Scraper](https://apify.com/data_wiki/tripadvisor-reviews-scraper) | One row per review with a place block on each row; takes place links | When you want reviews from place links filtered by rating, date or language |
| [Airbnb Scraper](https://apify.com/data_wiki/airbnb-scraper) | Airbnb listings for a city or link: prices, hosts, amenities, ratings | When you compare the hotels you collected with short-term rentals |
| [Contact Details Scraper](https://apify.com/data_wiki/contact-details-scraper) | Emails, phone numbers and social links from a list of websites | When you want emails for the websites found in the `website` field |

If you already have place links and want what guests wrote, you can [export reviews filtered by stars, language or keyword](https://apify.com/data_wiki/tripadvisor-review-scraper) or [read reviews from place links with date and rating filters](https://apify.com/data_wiki/tripadvisor-reviews-scraper). To see the short-term stays in the same city, [collect Airbnb listings for a destination](https://apify.com/data_wiki/airbnb-scraper). The websites in your place rows can go straight into [a tool that finds emails and social links on websites](https://apify.com/data_wiki/contact-details-scraper).

### ⚖️ Is it legal to scrape Tripadvisor?

Tripadvisor Scraper only collects data that is public on [Tripadvisor](https://www.tripadvisor.com) and does not read private data or anything behind a login. Place rows hold business contact details such as a phone number or address, which can identify a sole trader, and reviews hold reviewer names and locations. Collect personal data only with a legitimate reason, follow rules such as the GDPR and CCPA, respect Tripadvisor's terms and the copyright of review text and photos, and do not use the data to profile or contact individual reviewers. This is not legal advice; consult a lawyer if you are unsure. See [is web scraping legal](https://blog.apify.com/is-web-scraping-legal/) and [ethical web scraping](https://blog.apify.com/what-is-ethical-web-scraping-and-how-do-you-do-it/) for background.

### ❓ FAQ

#### Do I need a Tripadvisor account or API key?

No. As a tripadvisor data scraper it reads public pages, so you only need an Apify account. For programmatic access you use the Apify API with your Apify token.

#### Which Tripadvisor Actor should I use?

It depends on what one row should be. Tripadvisor Scraper outputs one row per place and finds places from a keyword, a city list or a place link. Tripadvisor Review Scraper outputs one row per review with filters and extra tables, and takes place links or place ids. Tripadvisor Reviews Scraper outputs one row per review with a place block on each row, and takes place links.

#### How many places can Tripadvisor Scraper collect?

As many as Tripadvisor lists for each search, up to `maxItems` per entry. Set `maxItems` to 0 to collect everything the list shows. Run a small test first to see how many places a search returns.

#### Does Tripadvisor Scraper collect reviews?

Only if you ask for them. Set `reviewsPerPlace` between 1 and 1000 and the newest reviews are added inside each place row. They cannot be filtered by stars, language or date. For filtered reviews use one of the review Actors.

#### Are error rows charged?

Yes. A place that cannot be read is saved as a row with an `error` note, and every row in the default dataset is charged. Check the first rows of a test run and lower `maxItems` if many rows show errors.

#### Can I get hotel prices for my own dates?

No. Hotel offers are read for the default dates Tripadvisor shows, and `priceDates` tells you which dates they belong to.

#### Is there a Tripadvisor API for this?

You can run the Actor and read its dataset through the Apify API. It is not an official Tripadvisor API.

#### Do I need proxies?

No. The Actor starts without a proxy, retries when Tripadvisor rejects a request and switches to another connection. You can also choose a proxy in the input.

#### Can I get email addresses?

Only when the place page shows an email link, and most pages do not. Phone and website are filled more often. Private or hidden contact data is never collected.

#### Can I use Tripadvisor Scraper through an MCP server?

Yes. AI agents can find and call the Actor through the Apify MCP server with the same input as above.

### 💬 Your feedback

Found a problem or need another field? Open an issue in the Issues tab of the Actor. Need a custom solution? Contact hello.datawiki@gmail.com.

# Actor input Schema

## `search` (type: `array`):

One keyword or TripAdvisor URL per entry. Examples: "hotels in Paris", "pizza in Rome", a TripAdvisor place URL, or a TripAdvisor list URL.

## `category` (type: `string`):

Narrow keyword searches to one type of listing. 'All' returns whatever TripAdvisor matches.

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

Maximum number of places to collect per search entry. Set to 0 to collect everything TripAdvisor shows.

## `reviewsPerPlace` (type: `integer`):

Number of reviews to collect per place. Set to 0 to skip reviews. Collecting reviews requires opening each place page.

## `fullDetails` (type: `boolean`):

Open every place page to get amenities, prices, ratings breakdown, AI review summary, awards, and more. Disable for faster list-only scraping.

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

Optional proxy settings. Leave blank to start without a proxy. The scraper automatically escalates to a stronger proxy if access is blocked.

## Actor input object example

```json
{
  "search": [
    "pizza in Rome"
  ],
  "category": "all",
  "maxItems": 30,
  "reviewsPerPlace": 0,
  "fullDetails": true,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (type: `string`):

All scraped TripAdvisor places.

# 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 = {
    "search": [
        "pizza in Rome"
    ],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("data_wiki/tripadvisor-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 = {
    "search": ["pizza in Rome"],
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("data_wiki/tripadvisor-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 '{
  "search": [
    "pizza in Rome"
  ],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call data_wiki/tripadvisor-scraper --silent --output-dataset

```

## MCP server setup

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