# Tripadvisor Attractions Scraper (`boncross/tripadvisor-attractions-scraper`) Actor

Scrape the things to do Tripadvisor lists for a city or around a point. Just add a city and get name, rating, review count, type, neighbourhood, description, coordinates, awards, ticket prices and opening status. Filter by type, rating, award and neighbourhood.

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

## Pricing

from $1.00 / 1,000 attraction-listeds

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 Attractions Scraper

### What is Tripadvisor Attractions Scraper?

Drop a pin anywhere on the map, set a radius, and Tripadvisor Attractions Scraper tells you what there is to see around it, with the distance to each place in kilometres. Or name a city and take its whole Things to Do list: Paris returned 10,928 attractions, more than the 10,000 a single Tripadvisor list will show you.

Each row is one attraction with its rating, review count, type, neighbourhood, description, coordinates, award and, where Tripadvisor shows one, the ticket price.

This actor gives you the list. Tripadvisor Place Details adds opening hours and contact details for the ids you pick, and Tripadvisor Reviews returns the reviews.

**BonCross Verified** means we tested this actor against the live site before release and kept the record:

- 28 of 28 live checks on its inputs and filters passed on 7 October 2026
- 12 cities run the same day: 300 attractions, none empty
- Charges checked against the 300 rows
- A name that matches the wrong city gets an uncharged row saying so

### Two ways to search

**Around a point.** Give a latitude, a longitude and a radius from 1 to 50 km. You don't need a city. This is the search for "what's within walking distance of the hotel or the venue?", and `distanceKm` is on each row.

**By city.** Give a Tripadvisor link, an id or a name, and filter the list by type (museums, landmarks, parks, nightlife…), rating, award, neighbourhood and "good for" tags such as Free Entry or Good for Kids. Combine the two and the point narrows the city.

Either way:

- You get coordinates on each row, filtered or not. They were filled on 100% of 420 attractions in 14 cities.
- You can sort by traveler favorites or traveler ranking.
- A city name works in English or in its own script, and a close misspelling still finds it.
- A city that can't be listed gets a row saying why, free of charge.
- The price is $1.60 per 1,000 attractions on the Free plan and $1.00 on Business, usage included.

### What data can you extract?

| Field | Description |
|---|---|
| 🏷️ Name | The attraction's name on Tripadvisor |
| ⭐ Rating | The overall score out of five |
| Reviews | How many reviews it has |
| Type | The attraction types the card shows, such as "Art Museums" |
| Tag ids | Tripadvisor's ids for those types |
| Neighbourhood | The neighbourhood it sits in |
| 📝 Description | Tripadvisor's short description |
| 📍 Coordinates | Latitude and longitude |
| 📏 Distance | Kilometres from your point, in a point search |
| 🏆 Award | Travelers' Choice or Best of the Best, and the year |
| 🎟️ Tickets | "Admission tickets from $42", and the amount as a number |
| Open now | Whether it is open as the run starts, where shown |
| 🖼️ Photo | The lead photo |
| 🔗 Link | The attraction's Tripadvisor page |

### How to scrape Tripadvisor attractions

1. [Sign up for a free Apify account](https://console.apify.com/sign-up).
2. Open [Tripadvisor Attractions Scraper](https://apify.com/boncross/tripadvisor-attractions-scraper).
3. Add one or more cities, or fill in "Latitude", "Longitude" and "Radius (km)" for a point search.
4. Choose a sort and any filters, and how many attractions you want per city.
5. Press Start. The list downloads as Excel, CSV, JSON, XML or HTML.

### ⬇️ Input

Start with a city or a point. Nothing else is required.

For a city, paste a Tripadvisor link (any page of that city), its id (`g187147`) or its name. Names in English or in the city's own script work (`Rome`, `東京`, `กรุงเทพ`), and the row shows which city a name resolved to. Use the link or the id when the name is in a third language or many places share it. Links in bulk go in "Start URLs (bulk upload)".

For a point, give a latitude, a longitude and a radius in kilometres. With a city as well, the point narrows that city. With no city, the search runs around the point wherever it is.

"Maximum attractions per city" (default 100) sets how many attractions each city returns, and zero means all of them. "Maximum attractions for the whole run" caps the run.

Filters take the labels Tripadvisor shows on the city's Things to Do page, or their ids. If you ask for several types, they're listed one after another without duplicates.

#### All there is within 1 km of the Eiffel Tower

```json
{
  "lat": "48.8584",
  "lng": "2.2945",
  "radiusKm": 1,
  "maxItemsPerLocation": 0
}
```

#### Museums in Paris, top 50

```json
{
  "locations": ["https://www.tripadvisor.com/Attractions-g187147-Activities-Paris_Ile_de_France.html"],
  "categories": ["Museums"],
  "maxItemsPerLocation": 50
}
```

#### Free attractions, rated 4 and up, in three cities

```json
{
  "locations": ["New York City", "Rome", "g186338"],
  "goodFor": ["Free Entry"],
  "minRating": "4"
}
```

| Input | Notes |
|---|---|
| `locations`, `startUrls` | Cities as links, ids or names |
| `lat`, `lng`, `radiusKm` | A point and a radius (default 2 km, from 1 to 50) |
| `categories` | Types such as Museums, Sights & Landmarks, Nature & Parks, Nightlife, Spas & Wellness, Fun & Games, Classes & Workshops |
| `goodFor` | Tags such as Good for a Rainy Day, Budget-friendly, Free Entry, Good for Couples, Good for Kids, Hidden Gems |
| `minRating` | `"3"`, `"4"` or `"5"` |
| `awards` | `travelersChoice` and/or `bestOfTheBest` |
| `neighborhoods` | Neighbourhood names as the city's page lists them |
| `sortBy` | `travelerFavorites` (default) or `travelerRanked` |
| `currency` | For the ticket prices some attractions show (default USD) |
| `maxItemsPerLocation`, `maxItems` | The per-city limit and the run-wide one |

#### For developers

- `maxItemsPerLocation` defaults to 100, and 0 means the whole list. `maxItems` defaults to 0, which is no cap.
- With `maxItemsPerLocation` above 10,000 or at 0, a city with more than 10,000 attractions continues neighbourhood by neighbourhood after its list ends. Duplicates are removed.
- With a radius around a point, a city that keeps nothing stops early: after 5 pages in a row with no attraction kept, or after about three times the pages `maxItemsPerLocation` needs.
- A wrong-city match is refused: when the place Tripadvisor returns shares only a word with the name you gave (`Asdfgh City`), you get an error row and no charge.
- The same city given twice returns one list, attributed to the first input.
- A point search with no city reports `searchGeoId` `1` and `searchGeoName` "World".

### ⬆️ Output

One row per attraction, in the order of the sort you picked.

```json
{
  "id": "188151",
  "locationId": 188151,
  "name": "Eiffel Tower",
  "url": "https://www.tripadvisor.com/Attraction_Review-g187147-d188151-Reviews-Eiffel_Tower-Paris_Ile_de_France.html",
  "rating": 4.6,
  "ratingScale": 5,
  "totalReviews": 144108,
  "categories": ["Points of Interest & Landmarks", "Observation Decks & Towers"],
  "tagIds": [11160, 11068],
  "neighborhood": "Tour Eiffel / Invalides",
  "description": "Completed in 1889, this colossal landmark, although initially hated by many Parisians, is …",
  "lat": 48.858353,
  "lng": 2.294464,
  "award": "bestOfTheBest",
  "awardYear": 2026,
  "ticketsFromText": "Admission tickets from $42",
  "ticketsFrom": 42,
  "isOpenNow": null,
  "openStatusText": null,
  "photoUrl": "https://dynamic-media-cdn.tripadvisor.com/media/photo-o/1a/9e/7f/9d/eiffeltoren.jpg?w=1200&h=800&s=1",
  "totalResults": 10000,
  "searchGeoId": 187147,
  "searchGeoName": "Paris",
  "input": "g187147",
  "position": 1,
  "scrapedAt": "2026-10-04T19:41:36.109Z"
}
```

| Column | Meaning |
|---|---|
| `id`, `locationId` | Tripadvisor's id for the attraction, as text and as a number. It joins with the Tripadvisor reviews and place details scrapers |
| `totalReviews` | The attraction's review count |
| `categories`, `tagIds` | The types printed on the attraction's card, and their ids |
| `ticketsFromText`, `ticketsFrom` | The ticket line as shown, in the currency you chose, and its amount (empty when Tripadvisor shows the line without a price) |
| `distanceKm` | In a point search: kilometres from your point |
| `totalResults` | How many attractions matched the search on Tripadvisor (the site counts up to 10,000) |
| `searchGeoId`, `searchGeoName` | The city searched, as resolved from your input (`1`, "World", for a point with no city) |
| `position` | Order in the list for that city |
| `input`, `error` | What you asked for and, on a row for a city that could not be listed, why |

#### How often each column is filled

These figures come from the first 30 attractions in each of 14 cities on five continents, 420 in all, measured on 4 October 2026.

| Column | Filled |
|---|---|
| Name, link, rating, reviews, type, coordinates, photo | 100% |
| Description | 84% |
| Neighbourhood | 77% |
| Award | 54% |
| Tickets | 35% |
| Open now | 23% |

Ticket prices vary most. Tripadvisor sometimes shows the ticket line with no amount, and in a 300-attraction check across 12 cities on 7 October 2026 `ticketsFromText` was filled on 13% of rows and `ticketsFrom` on 7%.

### How many attractions can you get, and how fast?

| Run | Attractions | Time |
|---|---|---|
| 14 cities, 30 each | 420 | 4 s of scraping, about 10 s in all |
| One city, first 1,000 | 1,000 | 15 s of scraping, 18 s in all |
| The whole of Paris | 10,928 | about 11 minutes |

Tripadvisor shows at most 10,000 attractions in one list, and it lists some places twice. You get each one once. For a bigger city, set "Maximum attractions per city" above 10,000, or to zero. Paris gave 8,961 distinct attractions from its list and 1,967 more from its neighbourhoods. Tripadvisor gives no exact total above 10,000, which is why we can't tell you what share that is.

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

| Event | Free plan | Starter | Scale | Business |
|---|---|---|---|---|
| `actor-start`, per run | $0.001 | $0.001 | $0.001 | $0.001 |
| `attraction-listed`, per attraction | $0.0016 | $0.00144 | $0.00125 | $0.001 |

Enterprise plans pay the Business price.

**$1.60 per 1,000 attractions** on the Free plan, $1.00 on Business. That covers platform usage, and there's no proxy to set up or pay for.

- 14 cities, 30 attractions each: $0.001 + 420 × $0.0016 = **$0.673** ($0.42 on Business).
- The whole of Paris (10,928 rows): $0.001 + 10,928 × $0.0016 = **$17.486** ($10.93 on Business).

A city that couldn't be listed is never charged for.

Apify gives Free plan users $5 of credits a month, which pays for about 3,100 attractions here.

### Limits worth knowing

- Tours, day trips and other bookable products aren't part of this list.
- Both sorts are Tripadvisor's rankings, and the score behind them isn't published.
- A row's type shows the types printed on its card, which isn't always the type you filtered on. A museum can read "Architectural Buildings".
- Past 10,000 attractions, coverage depends on the city's neighbourhood lists.
- A name resolves to the best-known place with that name. When it matters, give the link or the id.
- Text is in English. The currency setting changes the ticket line only.
- You get one lead photo per attraction.

### FAQ

#### Can I search around an address?

Convert it to a latitude and longitude first, then give those with a radius. You don't need a city.

#### Why is `ticketsFrom` empty when the attraction sells tickets?

Tripadvisor doesn't always show a ticket price. On some requests the ticket line reads "Admission Tickets Available" with no amount. `ticketsFrom` is then empty for those rows, and `ticketsFromText` has the line as shown. Running the same search again usually returns the price.

#### How do I get more than 10,000 attractions?

Set "Maximum attractions per city" above 10,000, or to zero for all of them.

#### Does it include tours and day trips?

No. This is the list of places to visit. Bookable tours and activities aren't in it.

#### What happens if I mistype a city?

A close misspelling still resolves, and the row shows which city you got. If Tripadvisor answers with a different place that only shares a word with your input, the match is refused and you get an error row at no charge, naming the place Tripadvisor offered. A link or an id is never name-checked.

#### Do I need proxies or a Tripadvisor account?

There's no account to create and no proxy to configure. Proxy usage is part of the price.

#### Is it legal to scrape Tripadvisor attractions?

The list is public: Tripadvisor shows it to visitors who aren't signed in, and that's all the actor reads. Public data collection is broadly lawful. Your use of the data is your responsibility under GDPR and similar rules, and legal advice is worth taking if you're unsure.

### Plug it into a trip planner or a schedule

Coordinates, rating and type on each row are what a trip planner or a travel app needs, and a points-of-interest database for a destination is one run. To call it from code, `POST` your input to `https://api.apify.com/v2/acts/boncross~tripadvisor-attractions-scraper/run-sync-get-dataset-items` and read the rows from the response. A yearly schedule is enough to see which attractions gain or lose a Travelers' Choice award. Through the Apify MCP server an AI agent can call the tool `tripadvisor-attractions-scraper` with a point and ask what's nearby.

### More from BonCross

- [Tripadvisor Hotels Scraper](https://apify.com/boncross/tripadvisor-hotels-scraper): Every hotel Tripadvisor lists for a city, with nightly prices for your dates and guests.
- [Tripadvisor Place Details Scraper](https://apify.com/boncross/tripadvisor-location-details): The full Tripadvisor record for any hotel, restaurant or attraction.
- [Tripadvisor Restaurants Scraper](https://apify.com/boncross/tripadvisor-restaurants-scraper): Every restaurant Tripadvisor lists for a city.
- [Tripadvisor Reviews Scraper](https://apify.com/boncross/tripadvisor-reviews): Every Tripadvisor review for any hotel, restaurant, attraction or tour.
- [Trip.com Attraction Products Scraper](https://apify.com/boncross/tripcom-attraction-products): Every product Trip.com sells for an attraction.
- [Trip.com Attraction Availability & Prices](https://apify.com/boncross/tripcom-availability): Trip.com attraction availability and prices.

### Your feedback

Tell us if an attraction you can see on Tripadvisor isn't in your list, or if a point search missed something obvious. The Issues tab in Apify Console is the place, and the coordinates or the city help us reproduce it. We answer every issue.

# Changelog

This Actor's version history is a separate document: https://apify.com/boncross/tripadvisor-attractions-scraper/changelog.md

# Actor input Schema

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

The cities to list attractions for. Paste a Tripadvisor link for the city (any page of it, for example its Things to Do page), its id (g187147), or its name (Paris, 東京, New York City). Regions and countries are not lists: give a city.

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

Tripadvisor city links, with the option to load them in bulk from a file, a Google Sheet or a remote list. Combined with anything in the list above.

## `maxItemsPerLocation` (type: `integer`):

How many attractions to return for each city, in the order of the sort you pick. Zero means every one the site lists.

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

A run-wide ceiling on attractions, across every city. Zero means no limit.

## `sortBy` (type: `string`):

The two orders Tripadvisor offers on a city's Things to Do list.

## `categories` (type: `array`):

For example Museums, Sights & Landmarks, Nature & Parks, Nightlife, Spas & Wellness, Fun & Games, Classes & Workshops. Several types are each listed in turn, without duplicates.

## `minRating` (type: `string`):

Only attractions rated at least this, out of 5.

## `awards` (type: `array`):

Only award winners.

## `goodFor` (type: `array`):

For example Good for a Rainy Day, Budget-friendly, Free Entry, Good for Couples, Good for Kids, Hidden Gems.

## `neighborhoods` (type: `array`):

Neighbourhood names as the city's Things to Do page lists them, for example Le Marais.

## `lat` (type: `string`):

Decimal degrees, for example 48.8584. Set with longitude to search near a point.

## `lng` (type: `string`):

Decimal degrees, for example 2.2945.

## `radiusKm` (type: `integer`):

How far from the point, in kilometres. Rows further away are left out.

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

Three-letter code, for example USD or EUR. Used for the ticket prices some attractions show.

## Actor input object example

```json
{
  "locations": [
    "g187147"
  ],
  "startUrls": [],
  "maxItemsPerLocation": 100,
  "maxItems": 0,
  "sortBy": "travelerFavorites",
  "categories": [
    "Museums"
  ],
  "goodFor": [
    "Free Entry"
  ],
  "neighborhoods": [
    "Le Marais"
  ],
  "lat": "48.8584",
  "lng": "2.2945",
  "radiusKm": 2,
  "currency": "USD"
}
```

# Actor output Schema

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

Tripadvisor attractions: every row the run returned.

## `stats` (type: `string`):

Counts for the run: cities resolved, pages fetched, rows returned.

# 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": [
        "https://www.tripadvisor.com/Attractions-g187147-Activities-Paris_Ile_de_France.html"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("boncross/tripadvisor-attractions-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": ["https://www.tripadvisor.com/Attractions-g187147-Activities-Paris_Ile_de_France.html"] }

# Run the Actor and wait for it to finish
run = client.actor("boncross/tripadvisor-attractions-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": [
    "https://www.tripadvisor.com/Attractions-g187147-Activities-Paris_Ile_de_France.html"
  ]
}' |
apify call boncross/tripadvisor-attractions-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,boncross/tripadvisor-attractions-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/05P12Yuu18YJnkySP/builds/80DhVDIjfkSy9b4aj/openapi.json
