Tripadvisor
TripAdvisor Content API for hotel ratings, restaurant search, attraction reviews, rankings, and nearby locations. Use when evaluating hotels or researching destinations. 5K calls/month.
MCP get_skill({ skillId: "tripadvisor-8f719644" })Use this skill with your agent
Create a free account and connect via MCP
# TripAdvisor Content API
Search and retrieve hotel, restaurant, and attraction data from TripAdvisor. Ratings, rankings, reviews, photos, amenities, subratings, trip types, awards.
**Base URL:** `https://api.content.tripadvisor.com/api/v1`
**Rate limit:** 50 calls per second.
**Monthly quota:** 5,000 API calls per month. Each curl request = 1 call. A full hotel lookup (search + details + reviews + photos) = 4 calls. Budget accordingly. Prefer search + details (2 calls) and only fetch reviews/photos when specifically needed.
**API limits:** Up to 10 results per search. Up to 5 reviews and 5 photos per location.
## Authentication
> **First-time setup gotcha:** TripAdvisor requires whitelisting your outbound IP at https://www.tripadvisor.com/developers before the key works. Without this, every call returns `User is not authorized to access this resource with an explicit deny`. This is the #1 first-time failure mode. **Whitelist before troubleshooting auth or quotas.**
>
> - **How to find your current IP:** `curl ifconfig.me`
> - **Propagation:** changes take 1-5 minutes (AWS edge cache).
> - **Multi-IP:** residential CGNAT, VPN exits, and different networks each need their own entry.
> - **No Referer alternative:** the free tier requires IP whitelisting; HTTP Referer restriction is not available.
> - **Verify which key is which:** the developer portal shows the last 4 chars only (e.g. "Ends in 11D7"), so you can confirm without exposing the secret.
Set `TRIPADVISOR_API_KEY` in your `.env` file:
```bash
# In .env (gitignored)
TRIPADVISOR_API_KEY=your_key_here
```
Then source it before calling:
```bash
export $(grep TRIPADVISOR_API_KEY .env | xargs)
```
### Error signatures
| Response | Meaning | Fix |
|---|---|---|
| `User is not authorized to access this resource with an explicit deny` | IP not on allowlist | Whitelist current IP at the developer portal, wait 1-5 min |
| `Forbidden` / 403 with no body | Bad or expired key | Regenerate key |
| `429 Too Many Requests` | Hit monthly quota (5,000 calls) | Wait until next month or upgrade tier |
## Endpoints
### 1. Location Search
Find locations by name. Returns up to 10 results.
```bash
curl -s "https://api.content.tripadvisor.com/api/v1/location/search?key=$TRIPADVISOR_API_KEY&searchQuery=NOFO+Hotel+Stockholm&category=hotels&language=en"
```
**Parameters:**
| Param | Required | Description |
|-------|----------|-------------|
| `searchQuery` | Yes | Text search query (name of hotel, restaurant, city) |
| `category` | No | Filter: `hotels`, `restaurants`, `attractions`, `geos` |
| `phone` | No | Phone number filter (any format, no leading +) |
| `address` | No | Address filter |
| `latLong` | No | Lat/long pair, e.g. `59.3127,18.0716` |
| `radius` | No | Radius from latLong (number) |
| `radiusUnit` | No | `km`, `mi`, or `m` |
| `language` | No | Default `en`. Supports 40+ languages. |
**Response shape:**
```json
{
"data": [
{
"location_id": "237656",
"name": "Nofo Hotel",
"address_obj": {
"street1": "Tjarhovsgatan 11",
"city": "Stockholm",
"country": "Sweden",
"postalcode": "116 21",
"address_string": "Tjarhovsgatan 11, Stockholm 116 21 Sweden"
}
}
]
}
```
### 2. Location Details
Get comprehensive info for a location by ID. This is the richest endpoint.
```bash
curl -s "https://api.content.tripadvisor.com/api/v1/location/{locationId}/details?key=$TRIPADVISOR_API_KEY&language=en¤cy=USD"
```
**Parameters:**
| Param | Required | Description |
|-------|----------|-------------|
| `locationId` | Yes (path) | TripAdvisor location ID from search |
| `language` | No | Default `en` |
| `currency` | No | ISO 4217 code, default `USD` |
**Response includes:**
- `name`, `web_url`, `address_obj`, `latitude`, `longitude`, `timezone`, `phone`
- `rating` (string, e.g. "4.6"), `num_reviews` (string, e.g. "845")
- `review_rating_count`: breakdown by star (`{"1": "7", "2": "10", ...}`)
- `ranking_data`: `ranking` (#10), `ranking_out_of` (168), `ranking_string` ("#10 of 168 hotels in Stockholm")
- `subratings`: Location, Sleep Quality, Rooms, Service, Value, Cleanliness (each 0.0 to 5.0)
- `price_level`: "$", "$$", "$$$", "$$$$"
- `amenities`: array of strings
- `styles`: array (e.g. "Family", "Centrally Located")
- `neighborhood_info`: array with location_id and name
- `trip_types`: business, couples, solo, family, friends with count values
- `awards`: Travelers Choice, Best of Best, etc. with year and images
- `parent_brand`, `brand`: chain affiliation
- `category`, `subcategory`: hotel/restaurant/attraction
- `photo_count`, `see_all_photos` URL
- `write_review` URL
### 3. Location Reviews
Get up to 5 most recent reviews.
```bash
curl -s "https://api.content.tripadvisor.com/api/v1/location/{locationId}/reviews?key=$TRIPADVISOR_API_KEY&language=en"
```
**Parameters:**
| Param | Required | Description |
|-------|----------|-------------|
| `locationId` | Yes (path) | TripAdvisor location ID |
| `language` | No | Default `en` |
| `limit` | No | Number of results (max 5 on free tier) |
| `offset` | No | Index of first result |
**Response shape:**
```json
{
"data": [
{
"id": 123456,
"lang": "en",
"location_id": "237656",
"published_date": "2026-03-15T00:00:00-04:00",
"rating": 5,
"text": "Review text...",
"title": "Review title",
"trip_type": "Couples",
"travel_date": "2026-03",
"user": { "username": "traveler123" },
"subratings": {}
}
]
}
```
**Note:** Reviews may return empty `data: []` for locations with few English reviews. Try different `language` values for international hotels.
### 4. Location Photos
Get up to 5 recent photos with multiple size options.
```bash
curl -s "https://api.content.tripadvisor.com/api/v1/location/{locationId}/photos?key=$TRIPADVISOR_API_KEY&language=en"
```
**Parameters:**
| Param | Required | Description |
|-------|----------|-------------|
| `locationId` | Yes (path) | TripAdvisor location ID |
| `language` | No | Default `en` |
| `limit` | No | Number of results (max 5 on free tier) |
| `offset` | No | Index of first result |
| `source` | No | Comma-separated: `Expert`, `Management`, `Traveler` |
**Photo sizes in response:**
- `thumbnail`: 50x50 cropped
- `small`: 150x150 cropped
- `medium`: max 250px dimension
- `large`: max 550px dimension
- `original`: full resolution
### 5. Nearby Location Search
Find locations near coordinates. Returns up to 10.
```bash
curl -s "https://api.content.tripadvisor.com/api/v1/location/nearby_search?key=$TRIPADVISOR_API_KEY&latLong=59.3127,18.0716&category=hotels&language=en"
```
**Parameters:**
| Param | Required | Description |
|-------|----------|-------------|
| `latLong` | Yes | Lat/long pair, e.g. `59.3127,18.0716` |
| `category` | No | `hotels`, `restaurants`, `attractions`, `geos` |
| `phone` | No | Phone number filter |
| `address` | No | Address filter |
| `radius` | No | Radius from latLong |
| `radiusUnit` | No | `km`, `mi`, `m` |
| `language` | No | Default `en` |
**Response includes `distance` (km) and `bearing` (e.g. "northwest") for each result.**
## Common Workflows
### Hotel Research (most common)
```bash
# 1. Search for hotel
curl -s "https://api.content.tripadvisor.com/api/v1/location/search?key=$TRIPADVISOR_API_KEY&searchQuery=Amerikalinjen+Oslo&category=hotels" | python3 -m json.tool
# 2. Get details with location_id from step 1
curl -s "https://api.content.tripadvisor.com/api/v1/location/1234567/details?key=$TRIPADVISOR_API_KEY¤cy=USD" | python3 -m json.tool
# 3. Get reviews (optional, costs 1 call)
curl -s "https://api.content.tripadvisor.com/api/v1/location/1234567/reviews?key=$TRIPADVISOR_API_KEY" | python3 -m json.tool
# 4. Get photos (optional, costs 1 call)
curl -s "https://api.content.tripadvisor.com/api/v1/location/1234567/photos?key=$TRIPADVISOR_API_KEY" | python3 -m json.tool
```
### Compare Multiple Hotels in a City
```bash
# Search all hotels in city
curl -s "https://api.content.tripadvisor.com/api/v1/location/search?key=$TRIPADVISOR_API_KEY&searchQuery=hotels+Copenhagen&category=hotels"
# Then get details for each location_id returned
# Compare: rating, num_reviews, ranking_data.ranking, subratings, price_level, amenities
```
### Find Restaurants Near Hotel
```bash
# Use hotel's lat/long from details response
curl -s "https://api.content.tripadvisor.com/api/v1/location/nearby_search?key=$TRIPADVISOR_API_KEY&latLong=59.31555,18.078924&category=restaurants"
```
### Destination Research
```bash
# Search for attractions
curl -s "https://api.content.tripadvisor.com/api/v1/location/search?key=$TRIPADVISOR_API_KEY&searchQuery=things+to+do+Stockholm&category=attractions"
# Nearby attractions from a point
curl -s "https://api.content.tripadvisor.com/api/v1/location/nearby_search?key=$TRIPADVISOR_API_KEY&latLong=59.3293,18.0686&category=attractions"
```
## When to Use
- Evaluating hotels (ratings, rankings, subratings, review sentiment)
- Comparing restaurants near a hotel or in a neighborhood
- Finding attractions and things to do near a destination
- Getting TripAdvisor ranking data ("#1 of 168 hotels in Stockholm")
- Checking amenities, trip type breakdown, award status
- Verifying hotel chain affiliation and neighborhood info
## When NOT to Use
- **Pricing or availability.** TripAdvisor Content API has no pricing data. Use `serpapi`, `liteapi`, `chase-travel`, `amex-travel`, or `rapidapi` for prices.
- **Booking.** This is read-only data. No booking capability.
- **Bulk scraping.** 5,000 calls/month. Be deliberate.
## Key Data Points for Hotel Comparison
When comparing hotels, extract and present:
| Field | Path | Example |
|-------|------|---------|
| Rating | `rating` | "4.6" |
| Review count | `num_reviews` | "845" |
| Ranking | `ranking_data.ranking_string` | "#10 of 168 hotels in Stockholm" |
| Location subrating | `subratings.0.value` | "4.7" |
| Service subrating | `subratings.3.value` | "4.7" |
| Cleanliness subrating | `subratings.5.value` | "4.8" |
| Price level | `price_level` | "$$$$" |
| Trip type leader | highest `trip_types[].value` | "Couples: 381" |
| Awards | `awards[].display_name` | "Travelers Choice 2025" |
| Breakfast | `amenities` contains "Breakfast included" | Yes/No |
| Chain | `parent_brand` | "Worldhotels" |
## Supported Languages
`ar`, `zh`, `zh_TW`, `da`, `nl`, `en`, `en_AU`, `en_CA`, `en_HK`, `en_IN`, `en_IE`, `en_MY`, `en_NZ`, `en_PH`, `en_SG`, `en_ZA`, `en_UK`, `fr`, `fr_BE`, `fr_CA`, `fr_CH`, `de`, `de_AT`, `el`, `iw`, `it`, `it_CH`, `ja`, `ko`, `no`, `pt`, `pt_PT`, `ru`, `es`, `es_AR`, `es_CO`, `es_MX`, `es_PE`, `es_VE`, `es_CL`, `sv`, `th`, `tr`, `vi`
Use `da` for Danish, `no` for Norwegian, `sv` for Swedish when searching Scandinavian hotels for local-language reviews.Related Skills
More skills in Data, AI & Research
Ablation Planner
Use when main results pass result-to-claim (`claim_supported = yes` or `partial`) and ablation studies are needed for paper submission. A secondary Codex agent designs ablations from a reviewer's perspective; the local executor reviews feasibility and implements.
Ablation Planner
Use when main results pass result-to-claim (claim_supported=yes or partial) and ablation studies are needed for paper submission.
About
Provides information about the bitwize-music plugin, its version, and its creator. Use when the user asks about the plugin, its purpose, version, or capabilities.
Ab Test Analysis
Analyze A/B test results with statistical significance, sample size validation, confidence intervals, and ship/extend/stop recommendations. Use when evaluating experiment results, checking if a test reached significance, interpreting split test data, or deciding whether to ship a variant.
Academic Search
Search and analyze academic literature. Find papers, understand research methodologies, and synthesize academic findings for research projects.
Adaptyv
How to use the Adaptyv Bio Foundry API and Python SDK for protein experiment design, submission, and results retrieval. Use this skill whenever the user mentions Adaptyv, Foundry API, protein binding assays, protein screening experiments, BLI/SPR assays, thermostability assays, or wants to submit protein sequences for experimental characterization. Also trigger when code imports `adaptyv`, `adaptyv_sdk`, or `FoundryClient`, or references `foundry-api-public.adaptyvbio.com`.
Explore Other Categories
Skills from other categories with shared topics
Alliances
Airline alliance membership (Star Alliance, oneworld, SkyTeam) and cross-alliance booking relationships. Maps which loyalty programs book which airlines, including bilateral partnerships outside alliances.
American Airlines
Check American Airlines AAdvantage balance, elite status, and loyalty points via Patchright. Handles email 2FA with 6-box code entry. Uses persistent browser profiles to skip 2FA on subsequent runs.
Amex Travel
Search Amex travel portal for cash prices, MR points pricing, IAP discounts, and FHR/THC hotel benefits via Patchright. Use when comparing pay-with-points portal pricing to award alternatives.