Install
$ agentstack add skill-borski-travel-hacking-toolkit-tripadvisor ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ● Network access Used
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ● Environment & secrets Used
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
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:
# In .env (gitignored)
TRIPADVISOR_API_KEY=your_key_here
Then source it before calling:
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.
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:
{
"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.
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,phonerating(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 stringsstyles: array (e.g. "Family", "Centrally Located")neighborhood_info: array with location_id and nametrip_types: business, couples, solo, family, friends with count valuesawards: Travelers Choice, Best of Best, etc. with year and imagesparent_brand,brand: chain affiliationcategory,subcategory: hotel/restaurant/attractionphoto_count,see_all_photosURLwrite_reviewURL
3. Location Reviews
Get up to 5 most recent reviews.
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:
{
"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.
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 croppedsmall: 150x150 croppedmedium: max 250px dimensionlarge: max 550px dimensionoriginal: full resolution
5. Nearby Location Search
Find locations near coordinates. Returns up to 10.
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)
# 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
# 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
# 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
# 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, orrapidapifor 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.
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: borski
- Source: borski/travel-hacking-toolkit
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.