# TripAdvisor Attractions Scraper (`vulnv/tripadvisor-attractions-scraper`) Actor

Extract attractions, tours, and experiences from any TripAdvisor listing page — cities, countries, categories, or product listings. Returns name, rating, review count, ranking, coordinates, address, phone, website, opening hours, images, and more. No login required. Handles pagination automatically.

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

## Pricing

from $2.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/platform/actors/running/actors-in-store#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 Attractions Scraper

Extract rich attraction data from any TripAdvisor listing page — cities, countries, categories, or experience products — with no login required.

Provide one or more TripAdvisor URLs and the scraper will page through all results, visiting each attraction's detail page to collect the full dataset.

***

### ✨ Features

- **Scrapes any TripAdvisor listing URL** — cities, countries, regions, filtered categories (museums, outdoor, tours, etc.)
- **Full detail-page enrichment** — coordinates, address, phone, website, opening hours, price range, ranking, awards, and images
- **No login required** — works completely unauthenticated
- **Tour & experience support** — handles both physical attraction pages and product/tour pages

***

### 📦 Output data

Each item in the dataset represents one attraction. Fields marked *(detail page)* are only populated when **Scrape Full Details** is enabled.

| Field | Type | Description |
|---|---|---|
| `id` | String | TripAdvisor attraction ID |
| `name` | String | Attraction name |
| `url` | String | TripAdvisor page URL |
| `type` | String | Always `"ATTRACTION"` |
| `rating` | Number | Average rating (1–5) |
| `numberOfReviews` | Number | Total review count |
| `rankingPosition` | Number | Position within the destination ranking |
| `rankingString` | String | e.g. `"#7 of 3,572 things to do in London"` *(detail page)* |
| `category` | String | Primary category (e.g. `"Art Museums"`) |
| `description` | String | Attraction description |
| `address` | String | Full address *(detail page)* |
| `addressObj` | Object | Structured address — street, city, country, postcode *(detail page)* |
| `latitude` | Number | GPS latitude *(detail page, physical attractions only)* |
| `longitude` | Number | GPS longitude *(detail page, physical attractions only)* |
| `phone` | String | Phone number *(detail page)* |
| `website` | String | Official website URL *(detail page)* |
| `hours` | String | Opening hours *(detail page)* |
| `suggested_duration` | String | Suggested visit duration |
| `offerGroup` | Object | Lowest ticket/tour price if available |
| `image` | String | Primary image URL |
| `images` | Array | Gallery image URLs |
| `ratingHistogram` | Object | Review counts by star rating (1–5) |
| `awards` | Array | TripAdvisor awards (e.g. Travellers' Choice) |
| `locationString` | String | Human-readable location (e.g. `"London"`) |
| `ancestorLocations` | Array | Parent location hierarchy |

#### Sample output

```json
{
  "id": "188862",
  "name": "The National Gallery",
  "url": "https://www.tripadvisor.co.uk/Attraction_Review-g186338-d188862-Reviews-The_National_Gallery-London_England.html",
  "type": "ATTRACTION",
  "rating": 4.7,
  "numberOfReviews": 41060,
  "rankingPosition": 7,
  "rankingString": "#7 of 3,572 things to do in London",
  "category": "Art Museums",
  "description": "The National Gallery houses the national collection of paintings in the Western European tradition from the 13th to the 19th centuries.",
  "address": "Trafalgar Square, London, WC2N 5DN, GB",
  "addressObj": {
    "street1": "Trafalgar Square",
    "city": "London",
    "country": "GB",
    "postalcode": "WC2N 5DN"
  },
  "latitude": 51.508892,
  "longitude": -0.128293,
  "phone": "+44 20 7747 2885",
  "website": "https://www.nationalgallery.org.uk/",
  "hours": "[\"Mo,Tu,We,Th,Sa,Su 10:00-18:00\", \"Fr 10:00-21:00\"]",
  "image": "https://dynamic-media-cdn.tripadvisor.com/media/photo-o/1d/69/8d/bb/the-national-gallery.jpg",
  "images": ["https://dynamic-media-cdn.tripadvisor.com/media/photo-o/1d/69/8d/bb/the-national-gallery.jpg"],
  "ratingHistogram": { "count5": 30328, "count4": 8732, "count3": 1537, "count2": 266, "count1": 159 },
  "awards": [{ "displayName": "Travellers' Choice" }],
  "locationString": "London"
}
```

***

### 🚀 How to use

#### 1. Find your TripAdvisor listing URL

Navigate to TripAdvisor and browse to the attractions page for your target city, country, or category. Copy the URL from your browser. Examples:

- **City attractions:** `https://www.tripadvisor.com/Attractions-g60763-Activities-New_York_City_New_York.html`
- **Country attractions:** `https://www.tripadvisor.co.uk/Attractions-g186216-Activities-United_Kingdom.html`
- **Category filtered:** `https://www.tripadvisor.com/Attractions-g60763-Activities-c47-New_York_City_New_York.html`
- **Tours & experiences:** `https://www.tripadvisor.co.uk/Attraction_Products-g186216-t11889-United_Kingdom.html`

#### 2. Configure the actor

| Input | Default | Notes |
|---|---|---|
| **Start URLs** | London attractions | One or more TripAdvisor listing URLs |
| **Max Attractions** | 100 | Set higher to scrape more (up to 10,000) |
| **Scrape Full Details** | Enabled | Disable for a fast listing-only run |

#### 3. Run & export

Start the actor and export results as JSON, CSV, or XLSX from the **Dataset** tab.

***

### ⚠️ Limitations

- **Coordinates** are only available for physical attractions. Tour and experience products do not have GPS data on TripAdvisor.
- **Opening hours** and **contact details** may not be present for all attractions — TripAdvisor only shows these when operators have claimed their listing.
- TripAdvisor limits results to **10,000 items** per listing URL. For larger datasets, use multiple filtered URLs (by category, region, etc.).

# Actor input Schema

## `start_urls` (type: `array`):

One or more TripAdvisor attraction listing URLs to scrape. Supports city, country, region, and category pages (e.g. museums, outdoor activities, tours). The scraper handles pagination automatically.

Examples:

- https://www.tripadvisor.com/Attractions-g60763-Activities-New\_York\_City\_New\_York.html
- https://www.tripadvisor.co.uk/Attractions-g186216-Activities-United\_Kingdom.html
- https://www.tripadvisor.co.uk/Attraction\_Products-g186216-t11889-United\_Kingdom.html

## `max_attractions` (type: `integer`):

Maximum number of attractions to scrape across all input URLs. TripAdvisor caps API results at 10,000 per listing URL.

## `scrape_details` (type: `boolean`):

Visit each attraction's individual page to extract the full dataset: GPS coordinates, address, phone, website, opening hours, price range, ranking, images, and more. When disabled, only basic listing data is returned (faster, uses fewer API credits).

## `use_cache` (type: `boolean`):

When enabled, the scraper checks S3 for a previously stored result before fetching the detail page. If a cached record is found it is returned immediately, skipping the Zyte API call. Useful for re-running the same URLs without re-scraping unchanged attractions.

## Actor input object example

```json
{
  "start_urls": [
    {
      "url": "https://www.tripadvisor.co.uk/Attractions-g186338-Activities-London_England.html"
    }
  ],
  "max_attractions": 10,
  "scrape_details": true,
  "use_cache": 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 = {
    "start_urls": [
        {
            "url": "https://www.tripadvisor.co.uk/Attractions-g186338-Activities-London_England.html"
        }
    ],
    "max_attractions": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("vulnv/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 = {
    "start_urls": [{ "url": "https://www.tripadvisor.co.uk/Attractions-g186338-Activities-London_England.html" }],
    "max_attractions": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("vulnv/tripadvisor-attractions-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "start_urls": [
    {
      "url": "https://www.tripadvisor.co.uk/Attractions-g186338-Activities-London_England.html"
    }
  ],
  "max_attractions": 10
}' |
apify call vulnv/tripadvisor-attractions-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=vulnv/tripadvisor-attractions-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/UlrcCYkSC90GaWFB7/builds/2haoTLdu9BmCV1Oul/openapi.json
