# Tripadvisor Data Extractor Pro (`xquantify/tripadvisor-data-extractor-pro`) Actor

TripAdvisor scraper: Extract hotel, restaurant & attraction data. Get reviews, ratings, pricing, photos, amenities in JSON/CSV. No API key needed. Multi-language support.\
Perfect for travel businesses, competitive analysis & market research.

- **URL**: https://apify.com/xquantify/tripadvisor-data-extractor-pro.md
- **Developed by:** [xquantify](https://apify.com/xquantify) (community)
- **Categories:** Travel
- **Stats:** 6 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$9.90 / 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 Data Extractor Pro

**The most professional and user-friendly TripAdvisor scraper for hotels, restaurants, attractions, and reviews.**

Extract comprehensive data from TripAdvisor including pricing, reviews, ratings, photos, amenities, contact information, and more. Built for businesses, researchers, and data analysts who need reliable TripAdvisor data extraction.

### 💰 Pricing

**Pay only for results** - No subscriptions, no hidden fees!

- **$0.015-0.05 per result** (volume discounts apply)
- **First 10 results FREE** on every run
- Up to **90% cheaper** than alternatives

**[📊 View Full Pricing Details →](./PRICING.md)**

### Features

#### What Makes This Scraper Better?

- **User-Friendly Interface** - Intuitive input configuration with smart defaults and helpful descriptions
- **Comprehensive Data Extraction** - Get everything: ratings, reviews, photos, amenities, pricing, contact info
- **Multiple Extraction Modes** - Search by location, use direct URLs, or extract all data from a location
- **Advanced Filtering** - Filter reviews by language, rating, and date
- **High Performance** - Fast, parallel extraction with configurable concurrency
- **Reliable** - Built-in retry logic and error handling
- **Multiple Export Formats** - JSON, CSV, Excel compatible
- **Professional Output** - Clean, structured data ready for analysis

#### Data You Can Extract

##### For All Listings

- Name and category
- Rating (out of 5)
- Number of reviews
- Price level
- Full address
- GPS coordinates (latitude/longitude)
- Description
- Opening hours
- Awards and badges
- Photos (high-resolution URLs)
- Website, phone, email

##### Hotels Specific

- Hotel class/stars
- Room types
- Check-in/check-out information
- Current pricing (with date filters)
- Amenities and facilities

##### Restaurants Specific

- Cuisine types
- Meals served (breakfast, lunch, dinner)
- Special diets (vegetarian, vegan, gluten-free, etc.)
- Price range
- Reservation information

##### Attractions Specific

- Type of attraction
- Duration
- Admission pricing
- Best time to visit

##### Reviews

- Review title and text
- Rating (1-5)
- Author name and location
- Review date
- Visit/stay date
- Trip type
- Helpful votes
- Filter by language, rating, and sort order

### Usage

#### Basic Search Example

Extract all hotels in Paris:

```json
{
  "mode": "search",
  "searchQuery": "Paris",
  "dataTypes": {
    "hotels": true,
    "restaurants": false,
    "attractions": false
  },
  "maxResults": 100,
  "includeReviews": true,
  "maxReviewsPerListing": 20
}
```

#### Restaurant Search Example

Extract top restaurants in Tokyo with reviews:

```json
{
  "mode": "search",
  "searchQuery": "Tokyo restaurants",
  "dataTypes": {
    "hotels": false,
    "restaurants": true,
    "attractions": false
  },
  "maxResults": 50,
  "includeReviews": true,
  "maxReviewsPerListing": 15,
  "reviewFilters": {
    "language": "en",
    "rating": "4",
    "sortBy": "recent"
  }
}
```

#### Direct URLs Example

Extract data from specific TripAdvisor URLs:

```json
{
  "mode": "direct-urls",
  "startUrls": [
    { "url": "https://www.tripadvisor.com/Hotel_Review-g187147-d188151-Reviews-Hotel_de_Crillon-Paris.html" },
    { "url": "https://www.tripadvisor.com/Restaurant_Review-g187147-d718070-Reviews-Le_Jules_Verne-Paris.html" }
  ],
  "includeReviews": true,
  "includePhotos": true
}
```

#### Complete Configuration Example

```json
{
  "mode": "search",
  "searchQuery": "New York City",
  "dataTypes": {
    "hotels": true,
    "restaurants": true,
    "attractions": true,
    "vacationRentals": false
  },
  "maxResults": 200,
  "includeReviews": true,
  "maxReviewsPerListing": 30,
  "reviewFilters": {
    "language": "en",
    "rating": "all",
    "sortBy": "helpful"
  },
  "includePhotos": true,
  "includeAmenities": true,
  "includePricing": true,
  "includeContactInfo": true,
  "language": "en",
  "currency": "USD",
  "hotelCheckIn": "2025-12-20",
  "hotelCheckOut": "2025-12-25",
  "maxConcurrency": 5
}
```

### Input Parameters

#### Essential Settings

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `mode` | String | `"search"` | Extraction mode: `search`, `direct-urls`, or `location-all` |
| `searchQuery` | String | - | Location or keyword to search (e.g., "London hotels") |
| `startUrls` | Array | `[]` | Direct TripAdvisor URLs to scrape |
| `maxResults` | Number | `50` | Maximum number of listings to extract (1-10000) |

#### Data Types

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `dataTypes.hotels` | Boolean | `true` | Extract hotel data |
| `dataTypes.restaurants` | Boolean | `true` | Extract restaurant data |
| `dataTypes.attractions` | Boolean | `true` | Extract attraction data |
| `dataTypes.vacationRentals` | Boolean | `false` | Extract vacation rental data |

#### Review Settings

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `includeReviews` | Boolean | `true` | Extract customer reviews |
| `maxReviewsPerListing` | Number | `10` | Reviews per listing (0 = all) |
| `reviewFilters.language` | String | `"all"` | Filter by language code (en, es, fr, etc.) |
| `reviewFilters.rating` | String | `"all"` | Filter by minimum rating (1-5) |
| `reviewFilters.sortBy` | String | `"recent"` | Sort order: `recent`, `helpful`, `rating-high`, `rating-low` |

#### Additional Data

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `includePhotos` | Boolean | `true` | Extract photo URLs |
| `includeAmenities` | Boolean | `true` | Extract amenities and features |
| `includePricing` | Boolean | `true` | Extract pricing information |
| `includeContactInfo` | Boolean | `true` | Extract phone, website, email |

#### Localization

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `language` | String | `"en"` | Content language (en, es, fr, de, etc.) |
| `currency` | String | `"USD"` | Currency for prices (USD, EUR, GBP, etc.) |

#### Hotel-Specific

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `hotelCheckIn` | String | - | Check-in date (YYYY-MM-DD) for price checking |
| `hotelCheckOut` | String | - | Check-out date (YYYY-MM-DD) for price checking |

#### Performance

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `maxConcurrency` | Number | `3` | Parallel browser instances (1-20) |
| `proxy` | Object | Apify Residential | Proxy configuration |
| `debug` | Boolean | `false` | Enable detailed logging |

### Output Format

#### Example Output

```json
{
  "name": "The Ritz Paris",
  "rating": 4.5,
  "reviewCount": 2847,
  "priceLevel": "$$$$",
  "category": "Luxury Hotel",
  "address": "15 Place Vendôme, 75001 Paris, France",
  "latitude": 48.8682,
  "longitude": 2.3287,
  "phone": "+33 1 43 16 30 30",
  "website": "https://www.ritzparis.com/",
  "email": "reservations@ritzparis.com",
  "description": "Legendary luxury hotel in the heart of Paris...",
  "hotelClass": 5,
  "amenities": [
    "Free WiFi",
    "Pool",
    "Spa",
    "Restaurant",
    "Bar/Lounge",
    "Fitness Center",
    "Room Service",
    "Concierge"
  ],
  "roomTypes": ["Suite", "Deluxe Room", "Premium Room"],
  "photos": [
    "https://media-cdn.tripadvisor.com/media/photo-o/...",
    "https://media-cdn.tripadvisor.com/media/photo-o/..."
  ],
  "reviews": [
    {
      "title": "Absolutely stunning hotel",
      "rating": 5,
      "text": "The Ritz Paris exceeded all expectations...",
      "date": "November 2025",
      "author": "John D",
      "authorLocation": "New York, NY",
      "visitDate": "October 2025",
      "tripType": "Couples",
      "helpfulVotes": 12
    }
  ],
  "awards": ["Travellers' Choice 2025", "Certificate of Excellence"],
  "url": "https://www.tripadvisor.com/Hotel_Review-g187147-d188151",
  "scrapedAt": "2025-11-09T18:30:00.000Z"
}
```

### Use Cases

- **Travel Industry** - Monitor competitor pricing and reviews
- **Market Research** - Analyze hospitality trends and customer sentiment
- **Content Creation** - Gather data for travel blogs and guides
- **Business Intelligence** - Track hotel and restaurant performance
- **Academic Research** - Study tourism patterns and consumer behavior
- **Price Comparison** - Build travel comparison websites
- **Review Analysis** - Sentiment analysis and NLP projects
- **Lead Generation** - Find contact information for sales outreach

### Why Choose TripAdvisor Data Extractor Pro?

#### vs. Other Scrapers

| Feature | This Scraper | Competitors |
|---------|--------------|-------------|
| User Interface | Intuitive, professional | Complex, confusing |
| Data Coverage | Comprehensive (15+ fields) | Basic (5-8 fields) |
| Review Filtering | Advanced (language, rating, sort) | Limited or none |
| Photo Extraction | High-res URLs | Low quality or missing |
| Error Handling | Robust with retries | Frequent failures |
| Documentation | Detailed with examples | Minimal |
| Performance | Optimized, configurable | Slow, fixed settings |
| Contact Data | Phone, email, website | Often missing |
| Support | Professional | Community only |

### Performance & Pricing

- **Speed**: Extract 50-100 listings per minute (depending on review count)
- **Concurrency**: Configurable (1-20 parallel instances)
- **Memory**: Optimized for efficiency
- **Proxy**: Residential proxies recommended (included with Apify)

#### Estimated Costs (Apify Platform)

- 100 hotels with 10 reviews each: ~$0.50
- 500 restaurants with 20 reviews each: ~$2.50
- 1000 attractions with reviews: ~$5.00

*Costs based on Apify platform usage. Actual costs may vary.*

### Limitations & Best Practices

#### Limitations

- Respects TripAdvisor's robots.txt
- Rate limiting to avoid blocking
- Some data may require login (not included)
- Pricing may vary by location/date

#### Best Practices

1. **Start Small** - Test with 10-20 results first
2. **Use Proxies** - Always use residential proxies for reliability
3. **Be Specific** - Specific search queries yield better results
4. **Filter Wisely** - Use review filters to reduce processing time
5. **Monitor Usage** - Check Apify dashboard for consumption
6. **Respect Limits** - Don't exceed reasonable request rates

### Legal & Ethical Use

This scraper is provided for legitimate use cases only:

- Market research and competitive analysis
- Academic research
- Personal travel planning
- Business intelligence

**You must:**

- Comply with TripAdvisor's Terms of Service
- Respect robots.txt and rate limits
- Not use data for malicious purposes
- Not republish copyrighted content
- Follow local data protection laws (GDPR, CCPA, etc.)

### Support & Feedback

- **Issues**: Report bugs on GitHub
- **Questions**: Contact via Apify support
- **Feature Requests**: Open an issue or discussion

### Updates & Changelog

#### Version 1.0.0 (Initial Release)

- Search by location/keyword
- Direct URL extraction
- Hotels, restaurants, attractions support
- Review extraction with filtering
- Photo URL extraction
- Amenities and contact information
- Multiple language and currency support
- Configurable performance settings

### License

Apache 2.0 - See LICENSE file for details

***

**Made with care for the Apify community**

*Extract smarter, not harder.*

# Actor input Schema

## `performanceMode` (type: `string`):

Choose a preset optimized for your use case. Auto-configures speed, depth, and timeout settings.

## `mode` (type: `string`):

Choose what you want to extract

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

Enter a city name (e.g., 'Tokyo', 'Paris', 'New York', 'London', 'Bangkok', 'Singapore'). Supports 50+ major cities worldwide.

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

Paste TripAdvisor URLs directly (one per line). Works with hotels, restaurants, attractions. Example: https://www.tripadvisor.com/Hotel\_Review-g187147-d188151-Reviews-Eiffel\_Tower-Paris.html

## `dataTypes` (type: `object`):

Select what types of data you want to scrape

## `maxResults` (type: `integer`):

How many listings to extract (leave empty for unlimited)

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

Include customer reviews for each listing

## `maxReviewsPerListing` (type: `integer`):

Number of reviews to extract for each place (0 = all reviews)

## `reviewFilters` (type: `object`):

Filter which reviews to extract

## `includePhotos` (type: `boolean`):

Include URLs of all photos

## `includeAmenities` (type: `boolean`):

Include detailed amenities, features, and facilities

## `includePricing` (type: `boolean`):

Get price levels and current offers (when available)

## `includeContactInfo` (type: `boolean`):

Include phone numbers, websites, and email addresses

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

Language for extracted content

## `currency` (type: `string`):

Currency for prices

## `hotelCheckIn` (type: `string`):

For hotel price checking (YYYY-MM-DD format)

## `hotelCheckOut` (type: `string`):

For hotel price checking (YYYY-MM-DD format)

## `proxy` (type: `object`):

Configure proxy settings for reliable scraping

## `maxConcurrency` (type: `integer`):

Number of parallel browser instances (higher = faster but uses more resources)

## `debug` (type: `boolean`):

Enable detailed logging for troubleshooting

## Actor input object example

```json
{
  "performanceMode": "quick-test",
  "mode": "search",
  "searchQuery": "Paris",
  "startUrls": [
    {
      "url": "https://www.tripadvisor.com/Hotel_Review-g60763-d112543-Reviews-The_Plaza-New_York_City_New_York.html"
    }
  ],
  "dataTypes": {
    "hotels": true,
    "restaurants": true,
    "attractions": true,
    "vacationRentals": false
  },
  "maxResults": 50,
  "includeReviews": true,
  "maxReviewsPerListing": 10,
  "reviewFilters": {
    "language": "all",
    "rating": "all",
    "sortBy": "recent"
  },
  "includePhotos": true,
  "includeAmenities": true,
  "includePricing": true,
  "includeContactInfo": true,
  "language": "en",
  "currency": "USD",
  "hotelCheckIn": "2025-12-25",
  "hotelCheckOut": "2025-12-28",
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  },
  "maxConcurrency": 3,
  "debug": false
}
```

# 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 = {
    "performanceMode": "quick-test",
    "searchQuery": "Tokyo",
    "startUrls": [
        {
            "url": "https://www.tripadvisor.com/Hotel_Review-g60763-d112543-Reviews-The_Plaza-New_York_City_New_York.html"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("xquantify/tripadvisor-data-extractor-pro").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 = {
    "performanceMode": "quick-test",
    "searchQuery": "Tokyo",
    "startUrls": [{ "url": "https://www.tripadvisor.com/Hotel_Review-g60763-d112543-Reviews-The_Plaza-New_York_City_New_York.html" }],
}

# Run the Actor and wait for it to finish
run = client.actor("xquantify/tripadvisor-data-extractor-pro").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 '{
  "performanceMode": "quick-test",
  "searchQuery": "Tokyo",
  "startUrls": [
    {
      "url": "https://www.tripadvisor.com/Hotel_Review-g60763-d112543-Reviews-The_Plaza-New_York_City_New_York.html"
    }
  ]
}' |
apify call xquantify/tripadvisor-data-extractor-pro --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,xquantify/tripadvisor-data-extractor-pro"
        }
    }
}

```

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/VN7w9cCxHnSxmNnYl/builds/XKzHDyEx0DbEOcQ2d/openapi.json
