# Tripadvisor Scraper: Extract Hotels, Restaurants, Reviews (`datablow/tripadvisor-scraper`) Actor

Extract hotels, restaurants, attractions, star ratings, rankings, reviews, prices, amenities, and photo galleries from Tripadvisor with Camoufox stealth browser. Download clean data as JSON, CSV, or Excel.

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

## Pricing

from $3.00 / 1,000 results

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?

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 Scraper (Camoufox Stealth)

A production-grade, anti-bot resilient **Tripadvisor Scraper** Apify Actor built with **Crawlee + Playwright + Camoufox** (stealth C++ Firefox engine).

It extracts comprehensive data on **Hotels**, **Restaurants**, and **Attractions / Things to do** from [Tripadvisor](https://www.tripadvisor.com), including bubble ratings, reviews count, popularity rankings, price levels, full addresses, contact details, property amenities, room features, photo galleries, and customer review cards.

***

### ⚡ Features

- 🏨 **Multi-Category Coverage**: Extract Hotels, Restaurants, and Tourist Attractions.
- 🔍 **Flexible Search & Direct URLs**: Search by city/keywords (e.g. `hotels in paris`, `best restaurants in tokyo`) or paste direct Tripadvisor review URLs.
- ⭐ **Bubble Ratings & Rankings**: Extracts TripAdvisor bubble rating (e.g., `4.8 / 5.0`), total review counts, and regional rankings (e.g., `"#1 of 1,886 hotels in Paris"`).
- 💰 **Pricing Details**: Extracts price ranges and price levels (e.g., `$$ - $$$`).
- 📍 **Full Address & Geolocation**: City, country, postal code, and street address.
- 📞 **Contact Information**: Phone number and official direct website links.
- 🏊 **Amenities & Features**: Property amenities, room features, and dining options.
- 🖼️ **High-Resolution Photo Gallery**: Hero photos and gallery pictures.
- 💬 **Customer Review Cards**: Top customer reviews with title, body, reviewer rating, and date.
- 🛡️ **Camoufox Stealth**: Bypasses PerimeterX, Cloudflare, and bot detection on the Apify platform.

***

### 📥 Input Parameters

| Field | Type | Default | Description |
| :--- | :--- | :--- | :--- |
| `searchTerms` | Array of strings | `["hotels in paris"]` | Search keywords or city queries. |
| `startUrls` | Array of objects/strings | `[]` | Direct Tripadvisor search, listing, or place review URLs. |
| `maxItems` | Integer | `20` | Maximum number of places to scrape. |
| `maxPagesPerQuery` | Integer | `2` | Maximum pagination pages to visit per query. |
| `scrapeDetails` | Boolean | `true` | Extract full amenities, rankings, contact info, and gallery. |
| `includeReviews` | Boolean | `true` | Extract top customer review cards. |
| `proxyConfiguration` | Object | `{}` | Apify Proxy settings (Residential recommended). |

#### Sample Input (JSON)

```json
{
  "searchTerms": ["hotels in paris", "rome restaurants"],
  "maxItems": 20,
  "maxPagesPerQuery": 2,
  "scrapeDetails": true,
  "includeReviews": true
}
```

***

### 📤 Output Sample (JSON)

```json
{
  "id": "d198234",
  "name": "Hotel Plaza Athénée",
  "category": "HOTEL",
  "url": "https://www.tripadvisor.com/Hotel_Review-g187147-d198234-Reviews-Hotel_Plaza_Athenee-Paris_Ile_de_France.html",
  "rating": 4.9,
  "reviewCount": 3946,
  "ranking": "#1 of 1,886 hotels in Paris",
  "priceRange": "$$$$",
  "address": "25 avenue Montaigne, 75008 Paris, France",
  "city": "Paris",
  "country": "France",
  "phone": "+33 1 53 67 66 65",
  "website": "https://www.dorchestercollection.com/paris/hotel-plaza-athenee",
  "amenities": [
    "Free High Speed Internet (WiFi)",
    "Fitness Center with Gym / Workout Room",
    "Bar / Lounge",
    "Spa",
    "Room Service",
    "Valet Parking"
  ],
  "thumbnail": "https://dynamic-media-cdn.tripadvisor.com/media/photo-o/28/10/72/7b/hotel-plaza-athenee.jpg",
  "photos": [
    "https://dynamic-media-cdn.tripadvisor.com/media/photo-o/28/10/72/7b/hotel-plaza-athenee.jpg",
    "https://dynamic-media-cdn.tripadvisor.com/media/photo-o/28/10/72/7c/eiffel-suite.jpg"
  ],
  "reviews": [
    {
      "title": "A magical stay in Paris",
      "text": "Every single detail was taken care of. The view of the Eiffel tower from our balcony was breathtaking...",
      "rating": 5.0,
      "author": "TravelerFromNYC",
      "date": "September 2026"
    }
  ],
  "scrapedAt": "2026-09-11T17:15:00.000Z"
}
```

***

### 🚀 How to Run

#### Via Apify Web Console

1. Open the Actor in your Apify Console.
2. Enter your search terms or start URLs.
3. Click **Start**.

#### Via Python

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")

run_input = {
    "searchTerms": ["hotels in paris"],
    "maxItems": 10,
    "scrapeDetails": True
}

run = client.actor("datablow/tripadvisor-scraper").call(run_input=run_input)

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(f"[{item['category']}] {item['name']} - ★{item['rating']}/5 ({item['ranking']})")
```

# Actor input Schema

## `searchTerms` (type: `array`):

Location or place search queries (e.g., 'hotels in paris', 'best restaurants in tokyo', 'things to do in london').

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

Direct Tripadvisor URLs (search results, category listings, or direct place review pages).

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

Maximum number of places (hotels, restaurants, attractions) to scrape.

## `maxPagesPerQuery` (type: `integer`):

Maximum number of listing pagination pages to visit per search term.

## `scrapeDetails` (type: `boolean`):

If enabled, navigates to each place's detail page to extract amenities, ranking, contact info, full address, and photo gallery.

## `includeReviews` (type: `boolean`):

If enabled, extracts top customer review cards (title, review text, rating, reviewer name).

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

Apify Proxy configuration. Using Apify Residential proxies is recommended for scraping Tripadvisor.

## Actor input object example

```json
{
  "searchTerms": [
    "hotels in paris"
  ],
  "startUrls": [],
  "maxItems": 20,
  "maxPagesPerQuery": 2,
  "scrapeDetails": true,
  "includeReviews": true
}
```

# Actor output Schema

## `dataset` (type: `string`):

Default dataset containing the 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 = {
    "searchTerms": [
        "hotels in paris"
    ],
    "startUrls": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("datablow/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 = {
    "searchTerms": ["hotels in paris"],
    "startUrls": [],
}

# Run the Actor and wait for it to finish
run = client.actor("datablow/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 '{
  "searchTerms": [
    "hotels in paris"
  ],
  "startUrls": []
}' |
apify call datablow/tripadvisor-scraper --silent --output-dataset

```

## MCP server setup

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