# Tripadvisor Places Scraper: Hotels, Restaurants & Things to Do (`charitable_trousseau/tripadvisor-listings-scraper`) Actor

Tripadvisor hotels, restaurants and things to do (attractions) for any city, region or country, by place name or list URL: rating, review count, ranking, price level, cuisines, address, coordinates and phone. $3 per 1,000 places, with plan discounts. No login. Listing data only, no reviews.

- **URL**: https://apify.com/charitable_trousseau/tripadvisor-listings-scraper.md
- **Developed by:** [Charitable Trousseau](https://apify.com/charitable_trousseau) (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 $2.10 / 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.
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 Places Scraper: Hotels, Restaurants & Things to Do

Get Tripadvisor's list of hotels, restaurants or attractions for any place. Type a place name or paste a Tripadvisor list URL.

### What you can do with it

- List the hotels, restaurants or attractions of a city with rating, review count and coordinates, for a map or a market overview.
- Compare places by `rating`, `reviewCount` and, for hotels, `rank` out of `rankTotal`.
- Find restaurants by cuisine and price level in a city (`cuisines`, `priceLevel`).
- Build a "things to do" list for a destination with `attractionTypes` and coordinates.

### What you get

One record per place:

- **Place:** `locationId` (Tripadvisor's ID), `name`, `category` (hotel, restaurant or attraction), `url`, `imageUrl`
- **Popularity:** `rating` (1 to 5), `reviewCount`, `position` (the number shown next to the name in Tripadvisor's list), `award` (Travelers' Choice badge, when the place has one)
- **Hotels:** `rankingText` (for example `#2 Best Value of 2,488 places to stay in Lisbon`) with `rank` and `rankTotal`, `priceLevel` (for example `€€`), `priceFromText` and `priceFrom` (the "from" nightly price shown in the list), `phone`, `address`, `street`, `city`, `postalCode`, `country`, `latitude`, `longitude`
- **Restaurants:** `cuisines`, `priceLevel` (for example `$$ - $$$`), `phone`, `address` (one line), `postalCode`, `country`, `latitude`, `longitude`, `openingHours` when Tripadvisor lists them (in practice only for the first 30 restaurants of a list)
- **Attractions:** `attractionTypes` (for example Historic Sites, Castles), `neighborhood` when shown, `latitude`, `longitude`
- **Other:** `geoId` and `geoName` (the Tripadvisor location that was searched), `isNearbyResult`, `search`, `scrapedAt`

#### Sample output

One record from a run on 2026-10-08, as saved:

```json
{
    "rating": 4.9,
    "reviewCount": 3456,
    "position": 1,
    "rankingText": "#1 Best Value of 2,488 places to stay in Lisbon",
    "rank": 1,
    "rankTotal": 2488,
    "priceLevel": "€€",
    "priceFromText": "$332",
    "priceFrom": 332,
    "cuisines": [],
    "attractionTypes": [],
    "neighborhood": null,
    "award": "Travelers' Choice 2026 Winner",
    "address": "Rua da Prata 231, Lisbon, 1100-417, Portugal",
    "street": "Rua da Prata 231",
    "city": "Lisbon",
    "region": null,
    "postalCode": "1100-417",
    "country": "Portugal",
    "latitude": 38.712166,
    "longitude": -9.137548,
    "phone": "+351 21 012 7450",
    "openingHours": null,
    "imageUrl": "https://dynamic-media-cdn.tripadvisor.com/media/photo-o/1c/fc/df/29/hotel-da-baixa.jpg?w=1200&h=-1&s=1",
    "name": "Hotel Da Baixa",
    "locationId": "13402042",
    "category": "hotel",
    "url": "https://www.tripadvisor.com/Hotel_Review-g189158-d13402042-Reviews-Hotel_Da_Baixa-Lisbon_Lisbon_District_Central_Portugal.html",
    "isNearbyResult": false,
    "geoId": "189158",
    "geoName": "Lisbon, Portugal, Europe",
    "search": "Lisbon, Portugal (hotels)",
    "scrapedAt": "2026-10-08T21:09:05.174Z"
}
```

### Input

- **Locations** — cities, regions or countries, one per line. Add the country or state for common names: `Austin, Texas`, not `Austin`. If you give no location and no Tripadvisor URL (for example an API call with an empty input), the example search `Lisbon, Portugal` runs.
- **Category** — hotels, restaurants or things to do. Applies to the locations.
- **Tripadvisor list URLs** — optional. Paste the address of any hotels, restaurants or things-to-do list on www.tripadvisor.com. The category is read from the URL.
- **Maximum places per search** — default 100. Tripadvisor lists 30 per page.

```json
{
    "locations": ["Lisbon, Portugal", "Austin, Texas"],
    "category": "restaurants",
    "maxItemsPerSearch": 150
}
```

```json
{
    "startUrls": ["https://www.tripadvisor.com/Hotels-g189158-Lisbon_Lisbon_District_Central_Portugal-Hotels.html"],
    "maxItemsPerSearch": 60
}
```

### FAQ

#### How do I get a list of all hotels in a city from Tripadvisor?

Put the city in **Locations** (with its country or state, for example `Lisbon, Portugal`), choose the category hotels, and set **Maximum places per search** high enough. Tripadvisor lists 30 per page. Restaurants and things to do work the same way.

#### Does it scrape Tripadvisor reviews?

No. It returns listing data: rating, review count, ranking, price level, cuisines, address, coordinates and phone. It does not return review text, reviewer names or owner details.

#### Does it return websites, emails or amenities?

No. It reads Tripadvisor's list pages, not each place's own page, so there is no website link, no email, no hotel star class, no amenities and no full description. Attractions have no address or phone, only coordinates.

#### Does it work on tripadvisor.co.uk, tripadvisor.de and other country sites?

Only www.tripadvisor.com is supported.

#### How fast is it, and how much does it cost?

In our tests on 8 October 2026, 150 attractions took 8 seconds and 300 restaurants about a minute. $3.00 per 1,000 places on Apify's Free plan, plus a start fee of $0.00005 per run. Paid Apify plans pay less: Bronze 10%, Silver 20% and Gold 30% less. Runs that fail or return nothing cost nothing.

### Limits to know about

- **No reviews.** This tool returns the listing data above. It does not return review text, reviewer names or owner details.
- **List data only.** It reads Tripadvisor's list pages, not each place's own page. So there is no website link, no email, no hotel star class, no amenities and no full description. Attractions have no address or phone, only coordinates.
- **Ranking text exists for hotels only.** Restaurants and attractions get `position`, their place in Tripadvisor's default list order.
- **Hotel prices** are the "from" price Tripadvisor shows without dates. They change with dates and availability; treat them as a guide.
- **Small places:** when a location has fewer places than fit on a page, Tripadvisor fills the page with places from nearby towns. Those records have `isNearbyResult: true`; filter them out if you only want the location itself.
- **Order is Tripadvisor's default** for each list. Sponsored cards are skipped.
- **Filters in a URL are not reliable.** In a test, an attractions URL with a category filter returned the unfiltered list. Use plain list URLs and filter the results yourself (by `cuisines`, `attractionTypes`, `priceLevel` or `rating`).
- Only www.tripadvisor.com is supported, not the country sites such as tripadvisor.de.
- A few records lack a field Tripadvisor did not show for them (most often `phone`, `award` or `position`); those fields are `null`.

### Pricing

You pay per result saved. Runs that fail or return nothing cost nothing.

### Reliability

Tripadvisor blocks most automated traffic. The scraper fetches pages directly with a browser-grade connection, replaces any address Tripadvisor refuses, and falls back to Apify's unblocker proxy for a page it still cannot get. In our tests on 8 October 2026, 150 attractions took 8 seconds and 300 restaurants about a minute. If a location is unknown, a URL is not a list page, or a search still cannot be completed, the run fails with a message that names it and says how many places were saved, instead of passing off partial data as complete.

### Notes

This scraper collects business listing data only. It does not collect reviews or any personal data, and it does not log in.

### Related scrapers

- [Coles Australia Grocery Price Scraper](https://apify.com/charitable_trousseau/coles-au-product-scraper): products, prices and specials from coles.com.au
- [AliExpress Product Search Scraper](https://apify.com/charitable_trousseau/aliexpress-search-scraper): search results by keyword with prices, discounts and units sold
- [eBay Active Listings & Auctions Search Scraper](https://apify.com/charitable_trousseau/ebay-search-scraper): active listings and auctions on five eBay sites
- [Apple App Store Scraper](https://apify.com/charitable_trousseau/app-store-scraper): iOS top charts, search results and app details
- [Zillow ZIP Code Search Scraper](https://apify.com/charitable_trousseau/zillow-search-scraper): homes for sale, rentals and recently sold homes
- [Google Maps Places Scraper](https://apify.com/charitable_trousseau/google-maps-places-scraper): business listings across a whole city, postcode or radius
- [Indeed Jobs Scraper](https://apify.com/charitable_trousseau/indeed-jobs-scraper): job listings on 12 Indeed country sites, descriptions optional
- [Glassdoor Jobs Scraper](https://apify.com/charitable_trousseau/glassdoor-jobs-scraper): job listings with salary ranges and employer ratings
- [LinkedIn Jobs Scraper](https://apify.com/charitable_trousseau/linkedin-jobs-scraper): job postings past LinkedIn's 1,000-per-search limit, no login
- [Google Trends Scraper](https://apify.com/charitable_trousseau/google-trends-scraper): interest over time, interest by region, rising queries and trending searches

# Actor input Schema

## `locations` (type: `array`):

Cities, regions or countries, one per line, for example Lisbon, Portugal. Add the country or state when the name is common (Austin, Texas). Each line is a separate search. If this and the Tripadvisor list URLs are both empty, the example search Lisbon, Portugal runs.

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

What to list for the locations above.

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

Optional. Paste the address of a hotels, restaurants or things-to-do list on www.tripadvisor.com, for example https://www.tripadvisor.com/Restaurants-g189158-Lisbon_Lisbon_District_Central_Portugal.html. The category comes from the URL. Pages for a single hotel, restaurant or attraction are not accepted.

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

Stop each location or URL after this many places. Tripadvisor lists 30 per page.

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

Leave the default. With it the scraper fetches pages directly over Apify datacenter proxies and uses the UNBLOCKER group only for a page it cannot get that way. Other settings are untested.

## Actor input object example

```json
{
  "locations": [
    "Lisbon, Portugal"
  ],
  "category": "hotels",
  "maxItemsPerSearch": 100,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "UNBLOCKER"
    ]
  }
}
```

# Actor output Schema

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

All places saved by 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 = {
    "locations": [
        "Lisbon, Portugal"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "UNBLOCKER"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("charitable_trousseau/tripadvisor-listings-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 = {
    "locations": ["Lisbon, Portugal"],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["UNBLOCKER"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("charitable_trousseau/tripadvisor-listings-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 '{
  "locations": [
    "Lisbon, Portugal"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "UNBLOCKER"
    ]
  }
}' |
apify call charitable_trousseau/tripadvisor-listings-scraper --silent --output-dataset

```

## MCP server setup

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