# TripAdvisor Scraper: Hotels, Restaurants & Attractions (`scrapemint/tripadvisor-scraper`) Actor

Scrape TripAdvisor hotels, restaurants, attractions, things to do, vacation rentals, and tours. Each row ships pricing, contact, amenities, awards, ratings breakdown, photos, coordinates, hours, cuisine, and review summaries. Multi country, multi currency. Pay per row.

- **URL**: https://apify.com/scrapemint/tripadvisor-scraper.md
- **Developed by:** [Kennedy Mutisya](https://apify.com/scrapemint) (community)
- **Categories:** Travel
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-usage

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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 Scraper Pro: Hotels, Restaurants, Attractions, Tours & Rentals

Scrape TripAdvisor hotels, restaurants, attractions, things to do, vacation rentals, and tours. Each row ships pricing, contact details, amenities, awards, ratings breakdown, photos, coordinates, address, hours, cuisine types, and review summaries. Multi country, multi currency, multi language. Pay per row.

**Built for** travel agencies pulling supplier catalogs, OTAs benchmarking competitors, hotel revenue managers tracking comp set rates, restaurant owners watching neighborhood rankings, BI teams piping travel data into a warehouse, content teams powering travel guides with structured data, and lead-gen platforms enriching travel records with TripAdvisor authority signals.

**Keywords this actor ranks for:** tripadvisor scraper, tripadvisor api, tripadvisor data extractor, tripadvisor hotel scraper, tripadvisor restaurant scraper, tripadvisor attraction scraper, tripadvisor reviews api, tripadvisor pricing api, vacation rental scraper, tripadvisor to JSON, tripadvisor to CSV, hotel competitor benchmarking, restaurant ranking tracker.

---

### Why this actor

| Other TripAdvisor scrapers | **This actor** |
|---|---|
| Hotels only | Six entity types: hotels, restaurants, attractions, things to do, vacation rentals, tours |
| Title and rating only | Full enrichment: pricing, amenities, hours, awards, breakdown, photos, coordinates |
| One ranking field | Position + total + percentile + raw text |
| Single currency | 17 currencies with rate normalization for hotels and tours |
| English only | 16 interface and review languages |
| No structured address | Street, city, region, postal, country parsed from JSON-LD |
| No badge detection | Travelers' Choice (with year), Certificate of Excellence, owner claimed |
| No nearby graph | Optional nearby section graph for place clustering |

---

### How it works

```mermaid
flowchart LR
    A[Search query<br/>or Start URLs] --> B[Resolve geo ID<br/>+ pick place types]
    B --> C[Listing crawl<br/>cards + paginate]
    C --> D[Detail page<br/>Playwright + Apify residential]
    A --> D
    D --> E[Parse JSON-LD<br/>+ DOM body text]
    E --> F[Pricing contact amenities<br/>awards breakdown photos]
    F --> G[One row per property]
    G --> H[(JSON CSV API)]
````

Pages render with Playwright behind rotating residential proxy with browser fingerprinting and per-session homepage warmup. JSON-LD blocks ship name, rating, review count, address, and coordinates as primary source. DOM body text covers rank, badges, amenities, and hours. DataDome interstitials resolve automatically.

***

### What you get per row

```mermaid
flowchart LR
    R[Property row] --> R1[Identity<br/>locationId kind url]
    R --> R2[Name + category<br/>tags hotelClass]
    R --> R3[Rating<br/>stars reviewCount ranking percentile]
    R --> R4[Breakdown<br/>cleanliness service value location]
    R --> R5[Pricing<br/>lowestRate priceTier tourPrice duration]
    R --> R6[Contact<br/>phone website address coordinates]
    R --> R7[Amenities + awards<br/>Travelers Choice CoE]
    R --> R8[Photos + reviewTags<br/>recentReviewSnippets]
    R --> R9[Cuisines + meals<br/>hours opening days]
```

Toggle on `includeNearbyResults` and the row carries the surrounding properties (10 to 20 nearby hotels, restaurants, or attractions).

***

### Quick start

**Scrape Chicago top hotels, restaurants, and attractions**

```json
{
  "searchQuery": "Chicago",
  "placeTypes": ["hotels", "restaurants", "things_to_do"],
  "maxResults": 25,
  "extractAmenities": true,
  "extractAwards": true,
  "extractRatingBreakdown": true
}
```

**Direct property URLs (mix any types)**

```json
{
  "startUrls": [
    "https://www.tripadvisor.com/Hotel_Review-g60713-d224064-Reviews-The_Ritz_Carlton_San_Francisco-San_Francisco_California.html",
    "https://www.tripadvisor.com/Restaurant_Review-g60713-d301570-Reviews-Gary_Danko-San_Francisco_California.html",
    "https://www.tripadvisor.com/Attraction_Review-g60713-d104713-Reviews-Alcatraz_Island-San_Francisco_California.html"
  ],
  "extractRatingBreakdown": true,
  "extractPhotos": true
}
```

**Vacation rentals in Tuscany with check in / check out dates**

```json
{
  "searchQuery": "Tuscany",
  "placeTypes": ["vacation_rentals"],
  "maxResults": 30,
  "checkInDate": "2026-06-01",
  "checkOutDate": "2026-06-08",
  "guests": 4,
  "currency": "EUR",
  "language": "en"
}
```

**Tours and experiences in Tokyo**

```json
{
  "searchQuery": "Tokyo",
  "placeTypes": ["tours"],
  "maxResults": 50,
  "language": "en",
  "currency": "USD"
}
```

**Top hotels with minimum rating filter**

```json
{
  "searchQuery": "Maldives",
  "placeTypes": ["hotels"],
  "maxResults": 100,
  "minRating": 4.5,
  "extractAmenities": true,
  "extractAwards": true,
  "currency": "USD"
}
```

***

### Sample output

```json
{
  "locationId": "224064",
  "kind": "hotel",
  "url": "https://www.tripadvisor.com/Hotel_Review-g60713-d224064-Reviews-The_Ritz_Carlton_San_Francisco-San_Francisco_California.html",
  "name": "The Ritz-Carlton, San Francisco",
  "category": "Hotel",
  "rating": {
    "stars": 4.5,
    "reviewCount": 2847,
    "ranking": {
      "position": 4,
      "total": 235,
      "text": "#4 of 235 hotels in San Francisco",
      "percentile": 98.72
    },
    "breakdown": {
      "cleanliness": 4.8,
      "service": 4.7,
      "value": 4.2,
      "location": 4.6,
      "rooms": 4.6,
      "sleep quality": 4.7
    }
  },
  "priceTier": "$$$$",
  "hotelClass": 5.0,
  "contact": {
    "phone": "+1-415-296-7465",
    "website": "https://www.ritzcarlton.com/...",
    "address": "600 Stockton St, San Francisco, CA 94108-3601",
    "addressStructured": {
      "street": "600 Stockton St",
      "city": "San Francisco",
      "region": "CA",
      "postalCode": "94108-3601",
      "country": "US"
    },
    "coordinates": { "lat": 37.79213, "lng": -122.40869 }
  },
  "amenities": [
    "Free High Speed Internet",
    "Pool",
    "Fitness Center",
    "Spa",
    "Restaurant",
    "Bar / Lounge",
    "Pet Friendly",
    "Airport Transportation"
  ],
  "awards": ["Travelers' Choice 2026", "Certificate of Excellence"],
  "reviewTags": ["great location", "luxury experience", "club lounge", "afternoon tea"],
  "recentReviewSnippets": [
    "Stunning property with impeccable service",
    "Best afternoon tea in the city",
    "Worth every penny for the experience"
  ],
  "pricing": {
    "lowestRate": { "amount": 695, "currency": "USD", "rawText": "from $695" },
    "checkInDate": null,
    "checkOutDate": null,
    "guests": 2,
    "rooms": 1,
    "currency": "USD"
  },
  "photos": [
    "https://media-cdn.tripadvisor.com/media/photo-o/.../original.jpg"
  ],
  "scrapedAt": "2026-04-28T10:00:00.000Z"
}
```

***

### Who uses this

| Role | Use case |
|---|---|
| Travel agency | Pull supplier catalog with pricing, photos, and amenities. Build a custom booking site. |
| OTA / metasearch | Benchmark competitor pricing across hotels, vacation rentals, and tours daily. |
| Hotel revenue manager | Track comp set ranking and rate movements. One row per property per snapshot. |
| Restaurant owner | Watch neighborhood ranking and review tag drift. Spot menu trends. |
| Content team | Power travel guides with structured data: cuisines, hours, photo galleries. |
| BI / data analyst | Pipe TripAdvisor catalog into Snowflake or BigQuery. Each row API ready. |
| Lead-gen platform | Enrich company records with TripAdvisor authority signals (review count, ranking). |
| Real estate / VR | Vacation rental market analysis with date range pricing and amenity filtering. |

***

### Input reference

| Field | Type | What it does |
|---|---|---|
| `searchQuery` | string | City, neighborhood, or country. Resolves to a TripAdvisor geo ID. |
| `startUrls` | string\[] | Mix Tourism, Hotel\_Review, Restaurant\_Review, Attraction\_Review, VacationRentalReview, AttractionProductReview, list URLs. |
| `maxResults` | integer | Cap per search query or list URL. |
| `placeTypes` | string\[] | hotels, restaurants, things\_to\_do, vacation\_rentals, tours. |
| `includeReviewTags` | boolean | Pull auto generated review tags. |
| `includeNearbyResults` | boolean | Capture the nearby section graph. |
| `extractAmenities` | boolean | Pull every listed amenity. |
| `extractAwards` | boolean | Travelers' Choice, Certificate of Excellence, more. |
| `extractRatingBreakdown` | boolean | Per category ratings. |
| `extractRecentReviewSnippets` | boolean | First three review snippets. |
| `extractContact` | boolean | Phone, website, address, coordinates. |
| `extractHoursAndPricing` | boolean | Hours, lowest rate, tour duration and price, meal types. |
| `extractPhotos` | boolean | Gallery photo URLs. |
| `maxPhotosPerProperty` | integer | Cap on photo URLs returned per row. |
| `checkInDate`, `checkOutDate` | string | ISO dates for hotel and vacation rental availability. |
| `guests`, `rooms` | integer | Pricing parameters. |
| `minRating` | number | Drop properties below this stars threshold. |
| `language` | enum | 16 languages. |
| `currency` | enum | 17 currencies. |
| `dedupe` | boolean | Skip location IDs from previous runs. |
| `concurrency` | integer | Parallel pages. |
| `proxyConfiguration` | object | Apify proxy. Residential is required. |

***

### API call

```bash
curl -X POST \
  "https://api.apify.com/v2/acts/YOUR_USER~tripadvisor-scraper/runs?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "searchQuery": "Barcelona",
    "placeTypes": ["hotels", "restaurants"],
    "maxResults": 50,
    "currency": "EUR",
    "extractAmenities": true,
    "extractAwards": true
  }'
```

***

### Pricing

The first few properties per run are free so you can validate output before paying. After that, one charge per property row. Amenities, awards, ratings breakdown, photos, contact details, and review tags are all included at no extra cost.

***

### FAQ

#### What is the difference between this and the official TripAdvisor Content API?

TripAdvisor's Content API is partner-tier only and starts at thousands of dollars per month with strict access requirements. This actor reads HTML any anonymous web visitor sees, no key required, with full enrichment fields including coordinates, hours, amenities, and ranking percentile.

#### Why does TripAdvisor block scrapers?

TripAdvisor sits behind DataDome with aggressive bot detection. The actor uses fingerprinted Chrome with rotating residential proxies, per-session homepage warmup, and DataDome interstitial resolution. Most challenges resolve within two retries.

#### Does it work for vacation rentals?

Yes. Pass `placeTypes: ["vacation_rentals"]` plus `checkInDate` / `checkOutDate` and the actor returns the available rentals with per-night rates in your chosen currency.

#### Does it scrape reviews?

This actor focuses on property data with summary review fields (count, breakdown, recent snippets, tags). For full reviews with author and timestamps, use the related TripAdvisor Review Intelligence actor.

#### Can I scrape attractions and tours separately?

Yes. `things_to_do` covers all attractions. `tours` filters to bookable tour products with duration and price.

#### How accurate is the ranking field?

`rating.ranking.percentile` is computed from position and total. Position 4 of 235 hotels gives 98.72 percentile (top 1.3%). Useful for comp-set benchmarking and dashboards.

#### Does it pull coordinates?

Yes. From JSON-LD when available, falling back to embedded map data. Returned as `{ lat, lng }` decimal degrees.

#### Is TripAdvisor scraping legal?

This actor reads HTML any anonymous web visitor can see. Respect TripAdvisor's terms and rate limit sensibly. Do not redistribute photos or descriptions you have no lawful basis to publish.

***

### Related actors

- **TripAdvisor Property Rank Tracker**. Daily rank, rating drift, and Travelers' Choice signals for one or many properties.
- **TripAdvisor Review Intelligence**. Every review with rating, text, trip type, traveler info, and helpful votes.
- **Booking Review Intelligence**. Same shape across Booking.com hotels.
- **Airbnb Market Intelligence**. Vacation rental market data on Airbnb.
- **Yelp Review Intelligence**. Restaurant and local business reviews.
- **Google Maps Scraper**. Local business data with reviews and photos.

# Actor input Schema

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

City, neighborhood, or country name. The actor resolves it to a TripAdvisor geo ID and pulls the matching place lists. Leave blank if you only want to scrape startUrls.

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

Mix any of: Tourism (city overview), Hotel\_Review, Restaurant\_Review, Attraction\_Review, VacationRentalReview, AttractionProductReview, or list URLs (Hotels-, Restaurants-, Attractions-).

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

Hard cap on properties returned per search or list URL. 0 means everything TripAdvisor exposes.

## `placeTypes` (type: `array`):

Which TripAdvisor sections to crawl when scraping by search query. Direct URLs always honor their type.

## `includeReviewTags` (type: `boolean`):

Pull the auto generated review tags (e.g. great location, romantic, family friendly). Used by travelers to filter reviews.

## `includeNearbyResults` (type: `boolean`):

Also pull the nearby section that TripAdvisor shows on every detail page (10 to 20 nearby properties).

## `extractAmenities` (type: `boolean`):

Hotels, vacation rentals, and attractions ship every listed amenity (pool, free Wi-Fi, accessibility, family rooms).

## `extractAwards` (type: `boolean`):

Travelers' Choice, Certificate of Excellence, Best of the Best, and category awards.

## `extractRatingBreakdown` (type: `boolean`):

Per category ratings (cleanliness, service, value, location, rooms, sleep) for hotels, plus food / service / value / atmosphere for restaurants.

## `extractRecentReviewSnippets` (type: `boolean`):

Capture the first three review snippets visible on the detail page. Useful for sentiment summaries without pulling every review.

## `extractContact` (type: `boolean`):

Phone number, website URL, structured address, and coordinates when present.

## `extractHoursAndPricing` (type: `boolean`):

Operating hours, price tier, lowest rate (hotels and vacation rentals), tour duration and price, and meal types served.

## `extractPhotos` (type: `boolean`):

Pull the gallery photo URLs in original resolution.

## `maxPhotosPerProperty` (type: `integer`):

Cap on photo URLs returned per row. Set 0 for all.

## `checkInDate` (type: `string`):

ISO date YYYY-MM-DD. Drives availability and pricing for hotels and vacation rentals. Leave blank for default rate.

## `checkOutDate` (type: `string`):

ISO date YYYY-MM-DD. Required when checkInDate is set.

## `guests` (type: `integer`):

Number of adult guests. Affects pricing.

## `rooms` (type: `integer`):

Number of rooms. Hotels only.

## `minRating` (type: `number`):

Drop properties rated below this number of stars (1.0 to 5.0). 0 means no filter.

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

TripAdvisor interface and review language. Affects which reviews are surfaced and how metadata reads.

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

Currency for hotel rates, vacation rental rates, and tour pricing.

## `dedupe` (type: `boolean`):

Skip property IDs already pushed in previous runs. Turn off to refresh stale rows.

## `concurrency` (type: `integer`):

Number of pages processed in parallel. Three to five is safe. Higher triggers Cloudflare challenges.

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

Apify proxy. Residential is required for TripAdvisor at meaningful volume.

## Actor input object example

```json
{
  "searchQuery": "Chicago",
  "startUrls": [],
  "maxResults": 25,
  "placeTypes": [
    "hotels",
    "restaurants",
    "things_to_do"
  ],
  "includeReviewTags": true,
  "includeNearbyResults": false,
  "extractAmenities": true,
  "extractAwards": true,
  "extractRatingBreakdown": true,
  "extractRecentReviewSnippets": true,
  "extractContact": true,
  "extractHoursAndPricing": true,
  "extractPhotos": true,
  "maxPhotosPerProperty": 12,
  "checkInDate": "",
  "checkOutDate": "",
  "guests": 2,
  "rooms": 1,
  "minRating": 0,
  "language": "en",
  "currency": "USD",
  "dedupe": true,
  "concurrency": 4,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# 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 = {
    "searchQuery": "Chicago",
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapemint/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 = {
    "searchQuery": "Chicago",
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

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

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "TripAdvisor Scraper: Hotels, Restaurants & Attractions",
        "description": "Scrape TripAdvisor hotels, restaurants, attractions, things to do, vacation rentals, and tours. Each row ships pricing, contact, amenities, awards, ratings breakdown, photos, coordinates, hours, cuisine, and review summaries. Multi country, multi currency. Pay per row.",
        "version": "0.1",
        "x-build-id": "ligNDooknqMD9NxAK"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/scrapemint~tripadvisor-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-scrapemint-tripadvisor-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/scrapemint~tripadvisor-scraper/runs": {
            "post": {
                "operationId": "runs-sync-scrapemint-tripadvisor-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/scrapemint~tripadvisor-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-scrapemint-tripadvisor-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "searchQuery": {
                        "title": "Search query",
                        "type": "string",
                        "description": "City, neighborhood, or country name. The actor resolves it to a TripAdvisor geo ID and pulls the matching place lists. Leave blank if you only want to scrape startUrls.",
                        "default": ""
                    },
                    "startUrls": {
                        "title": "Start URLs",
                        "type": "array",
                        "description": "Mix any of: Tourism (city overview), Hotel_Review, Restaurant_Review, Attraction_Review, VacationRentalReview, AttractionProductReview, or list URLs (Hotels-, Restaurants-, Attractions-).",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxResults": {
                        "title": "Max results per search query / start URL",
                        "minimum": 0,
                        "maximum": 5000,
                        "type": "integer",
                        "description": "Hard cap on properties returned per search or list URL. 0 means everything TripAdvisor exposes.",
                        "default": 25
                    },
                    "placeTypes": {
                        "title": "Place types to include",
                        "type": "array",
                        "description": "Which TripAdvisor sections to crawl when scraping by search query. Direct URLs always honor their type.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "hotels",
                                "restaurants",
                                "things_to_do",
                                "vacation_rentals",
                                "tours"
                            ],
                            "enumTitles": [
                                "Hotels",
                                "Restaurants",
                                "Things to do (attractions)",
                                "Vacation rentals",
                                "Tours and experiences"
                            ]
                        },
                        "default": [
                            "hotels",
                            "restaurants",
                            "things_to_do"
                        ]
                    },
                    "includeReviewTags": {
                        "title": "Include review tags",
                        "type": "boolean",
                        "description": "Pull the auto generated review tags (e.g. great location, romantic, family friendly). Used by travelers to filter reviews.",
                        "default": true
                    },
                    "includeNearbyResults": {
                        "title": "Include nearby results",
                        "type": "boolean",
                        "description": "Also pull the nearby section that TripAdvisor shows on every detail page (10 to 20 nearby properties).",
                        "default": false
                    },
                    "extractAmenities": {
                        "title": "Extract amenities and features",
                        "type": "boolean",
                        "description": "Hotels, vacation rentals, and attractions ship every listed amenity (pool, free Wi-Fi, accessibility, family rooms).",
                        "default": true
                    },
                    "extractAwards": {
                        "title": "Extract awards",
                        "type": "boolean",
                        "description": "Travelers' Choice, Certificate of Excellence, Best of the Best, and category awards.",
                        "default": true
                    },
                    "extractRatingBreakdown": {
                        "title": "Extract rating breakdown",
                        "type": "boolean",
                        "description": "Per category ratings (cleanliness, service, value, location, rooms, sleep) for hotels, plus food / service / value / atmosphere for restaurants.",
                        "default": true
                    },
                    "extractRecentReviewSnippets": {
                        "title": "Extract recent review snippets",
                        "type": "boolean",
                        "description": "Capture the first three review snippets visible on the detail page. Useful for sentiment summaries without pulling every review.",
                        "default": true
                    },
                    "extractContact": {
                        "title": "Extract contact details",
                        "type": "boolean",
                        "description": "Phone number, website URL, structured address, and coordinates when present.",
                        "default": true
                    },
                    "extractHoursAndPricing": {
                        "title": "Extract hours and pricing",
                        "type": "boolean",
                        "description": "Operating hours, price tier, lowest rate (hotels and vacation rentals), tour duration and price, and meal types served.",
                        "default": true
                    },
                    "extractPhotos": {
                        "title": "Extract photo URLs",
                        "type": "boolean",
                        "description": "Pull the gallery photo URLs in original resolution.",
                        "default": true
                    },
                    "maxPhotosPerProperty": {
                        "title": "Max photos per property",
                        "minimum": 0,
                        "maximum": 200,
                        "type": "integer",
                        "description": "Cap on photo URLs returned per row. Set 0 for all.",
                        "default": 12
                    },
                    "checkInDate": {
                        "title": "Check in date (hotels and vacation rentals)",
                        "type": "string",
                        "description": "ISO date YYYY-MM-DD. Drives availability and pricing for hotels and vacation rentals. Leave blank for default rate.",
                        "default": ""
                    },
                    "checkOutDate": {
                        "title": "Check out date (hotels and vacation rentals)",
                        "type": "string",
                        "description": "ISO date YYYY-MM-DD. Required when checkInDate is set.",
                        "default": ""
                    },
                    "guests": {
                        "title": "Guests (hotels and vacation rentals)",
                        "minimum": 1,
                        "maximum": 10,
                        "type": "integer",
                        "description": "Number of adult guests. Affects pricing.",
                        "default": 2
                    },
                    "rooms": {
                        "title": "Rooms (hotels)",
                        "minimum": 1,
                        "maximum": 8,
                        "type": "integer",
                        "description": "Number of rooms. Hotels only.",
                        "default": 1
                    },
                    "minRating": {
                        "title": "Minimum rating (filter)",
                        "minimum": 0,
                        "maximum": 5,
                        "type": "number",
                        "description": "Drop properties rated below this number of stars (1.0 to 5.0). 0 means no filter.",
                        "default": 0
                    },
                    "language": {
                        "title": "Language",
                        "enum": [
                            "en",
                            "es",
                            "fr",
                            "de",
                            "it",
                            "pt",
                            "nl",
                            "ru",
                            "ja",
                            "ko",
                            "zh",
                            "ar",
                            "tr",
                            "pl",
                            "sv",
                            "th"
                        ],
                        "type": "string",
                        "description": "TripAdvisor interface and review language. Affects which reviews are surfaced and how metadata reads.",
                        "default": "en"
                    },
                    "currency": {
                        "title": "Currency",
                        "enum": [
                            "USD",
                            "EUR",
                            "GBP",
                            "CAD",
                            "AUD",
                            "JPY",
                            "CHF",
                            "BRL",
                            "MXN",
                            "INR",
                            "AED",
                            "SGD",
                            "HKD",
                            "ZAR",
                            "NZD",
                            "SEK",
                            "PLN"
                        ],
                        "type": "string",
                        "description": "Currency for hotel rates, vacation rental rates, and tour pricing.",
                        "default": "USD"
                    },
                    "dedupe": {
                        "title": "Deduplicate across runs",
                        "type": "boolean",
                        "description": "Skip property IDs already pushed in previous runs. Turn off to refresh stale rows.",
                        "default": true
                    },
                    "concurrency": {
                        "title": "Concurrency",
                        "minimum": 1,
                        "maximum": 16,
                        "type": "integer",
                        "description": "Number of pages processed in parallel. Three to five is safe. Higher triggers Cloudflare challenges.",
                        "default": 4
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Apify proxy. Residential is required for TripAdvisor at meaningful volume.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ]
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
