# Tripadvisor Scraper — Hotels, Restaurants & Attractions, Cheap (`fabrikit/tripadvisor-scraper`) Actor

Tripadvisor scraper for hotels, restaurants and attractions in any city: names, addresses, coordinates, business phones, ratings, review counts, price level and cuisines. Optional details: ranking, amenities, website, hours. No reviews. From US$1.50 per 1,000 places.

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

## Pricing

from $1.50 / 1,000 place scrapeds

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 Scraper — Hotels, Restaurants & Attractions, Cheap

Get hotels, restaurants and attractions (things to do) from Tripadvisor for any city, with business data you can use for lead lists, market research, travel apps and competitor maps. Search by **location name** or paste **Tripadvisor list URLs** with your own filters. No login, no reviews, no reviewer data.

### What you get

| Field | Hotels | Restaurants | Attractions |
|---|---|---|---|
| name, url, id, category, image, position | yes | yes | yes |
| address, city, country, postal code | yes | yes | with details |
| latitude / longitude | yes | yes | with details |
| business phone | yes | yes | with details |
| rating, reviews count | yes | yes | yes |
| price level / price range | yes | yes | – |
| cuisines | – | yes | – |
| attraction types (`tags`), neighbourhood (`area`) | – | – | yes |
| with details: ranking ("#24 of 240 hotels in Santiago"), website, amenities, hotel class, opening hours, description | yes | yes | yes |

Tripadvisor price information is a **price level** (`$`–`$$$$`), not nightly rates.

### Input

```json
{
  "searchQueries": ["Santiago Chile", "Barcelona Spain"],
  "category": "restaurant",
  "maxItems": 50,
  "includeDetails": false,
  "site": "com"
}
```

- `searchQueries` — city or area names (or a numeric Tripadvisor location ID)
- `startUrls` — Hotels-/Restaurants-/Attractions- list URLs (your filters are kept), location URLs (`Tourism-g...`) or single place URLs
- `category` — `hotel`, `restaurant`, `attraction` or `all`
- `maxItems`, `maxItemsPerSearch` — total and per location/category limits
- `includeDetails` — open each place page for ranking, amenities, website, hours (add-on event)
- `site` — Tripadvisor domain/language (com, co.uk, es, de, fr, ...)

### Output example

```json
{
  "id": "3192360",
  "url": "https://www.tripadvisor.com/Restaurant_Review-g294305-d3192360-Reviews-Bocanariz-Santiago_Santiago_Metropolitan_Region.html",
  "name": "Bocanariz",
  "category": "restaurant",
  "address": "Avenue Jose Victorino Lastarria 276 Santiago Historico, Santiago Chile",
  "city": "Santiago",
  "country": "Chile",
  "lat": -33.438446,
  "lng": -70.64117,
  "phone": "+56 9 3911 0332",
  "rating": 4.5,
  "reviewsCount": 8289,
  "priceLevel": 3,
  "priceRange": "$$ - $$$",
  "cuisines": ["Mediterranean", "Wine Bar"],
  "ranking": null,
  "detailsFetched": false
}
```

### Pricing

| Event | Price | When |
|---|---|---|
| `place-result` | US$0.0015 (US$1.50 / 1,000) | per place saved |
| `place-details` | US$0.002 (US$2.00 / 1,000) | per place enriched when `includeDetails` is on |
| Actor start | US$0.00005 | once per run |

### FAQ

**Does it collect reviews?** No. It returns the review count and rating only; no review texts and no reviewer names.

**How many places per city?** Whatever Tripadvisor lists, up to the end of the list (hundreds to thousands per city). Use several locations or filtered list URLs for bigger areas.

**Why a proxy?** Tripadvisor uses anti-bot protection. The Actor starts on datacenter IPs and moves to residential IPs automatically when it gets blocked (from the site's country first, e.g. US for tripadvisor.com, then other countries if those keep getting blocked); every blocked request is retried on a new IP. The run's `SUMMARY` record shows which proxy rung and country were used.

**Which phone numbers are returned?** The business phone listed on the place page. No personal data.

**Use cases:** hospitality lead lists, restaurant and hotel market maps, competitor benchmarking, travel and local-search apps.

Use the data according to Tripadvisor's terms and applicable law.

### En español

Extrae hoteles, restaurantes y atracciones de Tripadvisor por ciudad: nombre, dirección, coordenadas, teléfono del negocio, puntuación, número de reseñas, nivel de precio y tipos de cocina. Con `includeDetails` suma ranking, servicios, sitio web y horarios. No incluye reseñas ni nombres de usuarios. Precio: US$1,50 por 1.000 lugares (+ US$2,00 por 1.000 con detalles).

# Actor input Schema

## `searchQueries` (type: `array`):

City or area names, one search per entry (for example: Barcelona Spain, Tokyo, Valparaiso Chile). A numeric Tripadvisor location ID also works.

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

List URLs (Hotels-g..., Restaurants-g..., Attractions-g...Activities...) with your own filters, location URLs (Tourism-g...) or single place URLs (Hotel_Review-..., Restaurant_Review-..., Attraction_Review-...).

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

Hotels, restaurants, attractions (things to do) or all three for every location.

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

Maximum number of places in total.

## `maxItemsPerSearch` (type: `integer`):

Optional cap for each location/category so one big city does not use the whole budget.

## `includeDetails` (type: `boolean`):

Open each place page to add ranking, amenities, hotel class, website, opening hours, region and (for attractions) address, phone and coordinates. Billed as an extra event per place and slower.

## `site` (type: `string`):

Which Tripadvisor domain to read. It sets the language of names and categories.

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

Tripadvisor uses anti-bot protection. The Actor starts with datacenter IPs and switches to residential IPs (from the site's country, rotating IPs and countries) automatically when it gets blocked. Choose RESIDENTIAL here to skip the datacenter attempts.

## Actor input object example

```json
{
  "searchQueries": [
    "Santiago Chile"
  ],
  "startUrls": [],
  "category": "hotel",
  "maxItems": 20,
  "includeDetails": false,
  "site": "com",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `places` (type: `string`):

All places collected during the run

# 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 = {
    "searchQueries": [
        "Santiago Chile"
    ],
    "startUrls": [],
    "maxItems": 20,
    "includeDetails": false,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("fabrikit/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 = {
    "searchQueries": ["Santiago Chile"],
    "startUrls": [],
    "maxItems": 20,
    "includeDetails": False,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("fabrikit/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 '{
  "searchQueries": [
    "Santiago Chile"
  ],
  "startUrls": [],
  "maxItems": 20,
  "includeDetails": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call fabrikit/tripadvisor-scraper --silent --output-dataset

```

## MCP server setup

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