Get Tripadvisor reviews and ratings with one API
The Tripadvisor API returns hotel, restaurant and attraction reviews and ratings as clean JSON.
4 active endpoints, on 1 and 2 credit tiers.
- POST/tripadvisor/v1/reviews
- POST/tripadvisor/v1/places/list
- POST/tripadvisor/v1/detail
- POST/tripadvisor/v1/search
What Tripadvisor endpoints does ReefAPI ship?
4 live read endpoints. Read-only data API: no writes, no account actions, no dashboard access on the target site.
Tripadvisor API
3 of 4 endpoints, ready to run
Reviews plus the whole place profile in one response: rating histogram, subratings for location, cleanliness, service and value, amenities and hours.
{ "ok": true, "meta": { "api": "tripadvisor", "endpoint": "reviews", "mode": "live", "latency_ms": 2680, "record_count": 50, "cache_hit": false }, "data": { "results": [ { "place": { "location_id": "91703", "name": "Bellagio", "entity_type": "hotel", "rating": 4, "review_count": 15770, "ranking": "#59 of 260 hotels in Las Vegas", "price_range": "$$", "price_level": null, "rating_histogram": { "1": 1423, "2": 1277, "3": 1984, "4": 2128, "5": 8958 }, "subratings": { "Location": 4.7, "Cleanliness": 4.3, "Service": 4.1, "Value": 3.8, "Sleep Quality": 4.3, "Rooms": 4.1 }, "amenities": [ "Electric vehicle charging station", "Wifi", "Pool" ], "cuisines": [], "dietary": [], "hours": null, "awards": [], "address": "3600 Las Vegas Blvd S, Las Vegas, Nevada, 89109-4303, US", "latitude": 36.11294, "longitude": -115.17643, "phone": "00 1 888-987-6667", "website": null, "photos": [], "url": "https://www.tripadvisor.com/Hotel_Review-g45963-d91703-Reviews-Bellagio-Las_Vegas_Nevada.html", "reviews_scraped": 50, "completeness_pct": 0.32, "source": "tripadvisor" }, "reviews": [ { "id": "1075218762", "rating": 5, "title": "A Perfect Place to Start Our Southwest Adventure", "text": "We stayed at the Bellagio Resort & Casino for one night before beginning our family RV trip through the Southwest, and it was a great way to kick off the vacation.\n\nThe Bellagio is simply a classic Las Vegas resort. The location on the Strip is excellent, making it easy to walk around and experience Vegas without needing to go far.\n\nWe especially enjoyed the pool complex. The pools and surrounding grounds are beautiful and provide a surprisingly relaxing escape from the energy of the Strip. Even with only one night at the resort, we made sure to spend some time there.\n\nAnd of course, there are the Bellagio Fountains. No matter how many times you’ve seen them, they’re still a treat. Watching the fountains with the Bellagio as the backdrop is one of those experiences that just feels like Las Vegas.\n\nOur stay was short, but everything about the resort—from the pools and location to the atmosphere and fountains—made it a memorable start to our trip.\n\nA beautiful resort in one of the best locations on the Strip. We would happily stay at the Bellagio again.", "language": "en", "published_date": "2026-08-27", "created_date": "2026-08-27", "trip_type": "FAMILY", "stay_date": "2026-08-31", "helpful_votes": 0, "additional_ratings": {}, "photos": [], "mgmt_response_text": null, "mgmt_response_date": null, "url": null, "source": "tripadvisor" }, { "id": "1075166747", "rating": 2, "title": "Average and overpriced. Wouldn’t even honor the offer we booked on. Tge room was nice, that’s about all", "text": "Staff has no clue what hospitality is. Average and overpriced- the entire stay. The room was nice, but that’s it. Casino floor staff and servers seemed very unhappy.", "language": "en", "published_date": "2026-08-27", "created_date": "2026-08-27", "trip_type": "FAMILY", "stay_date": "2026-08-31", "helpful_votes": 0, "additional_ratings": {}, "photos": [], "mgmt_response_text": null, "mgmt_response_date": null, "url": null, "source": "tripadvisor" }, { "id": "1075140541", "rating": 1, "title": "Lifetime achievement, turns to humiliation.", "text": "So,I've been away for 36 years. In that time ,I'd seen both Oceans Eleven movies ( Sinatra &Clooney).I'd promised myself, when I finally make it home, I'd do the work and save up,to stand looking at the fountain, as the later actors had done.I finally achieved this only to be snubbed by the staff on the gaming floor, when we'd asked four different serving staff for water in the 109 degree heat. It wasn't so much about suffering from the heat and thirst we endured, but the condescending demeanor we received from every server we'd asked. We finally had to leave the casino,missing the fountain show, to buy water from a casino shop across the street, killing what I had hoped to be a landmark event to experience. Bad form,Bellagio.I expected better of you.", "language": "en", "published_date": "2026-08-27", "created_date": "2026-08-27", "trip_type": "FAMILY", "stay_date": "2026-08-31", "helpful_votes": 0, "additional_ratings": {}, "photos": [], "mgmt_response_text": null, "mgmt_response_date": null, "url": null, "source": "tripadvisor" } ], "stats": { "reviews": 50, "total": 15663, "completeness_pct": 0.32, "gql_diag": { "bytes": 223960, "success": 5 }, "bytes": 223960, "minted": false, "ld_cache": "hit" } } ] } }
How the Tripadvisor API works
Tripadvisor is a normal ReefAPI surface — the same four rules that hold for every other engine on the key.
No OAuth app, no request signing, no per-site account. One key covers all 185 engines.
Every route is a POST with a JSON body. Parameters are validated against the published schema before anything is charged.
Credits, not seats. Failed and blocked calls are never charged, and cache hits cost nothing.
One envelope everywhere. meta carries latency_ms, record_count and the endpoint that answered.
Name in, review feed out, two calls
search resolves a name to a URL; reviews turns that URL into the profile and the feed together. There is no separate profile call to pay for — the histogram and subratings ride along with the reviews.
{"query": "Bellagio Las Vegas"}Take results[0].url. entity_type tells you whether it is a hotel, a restaurant or an attraction.
{"url": "...", "maxReviews": 1000}One call. place{} carries the histogram and subratings, reviews[] carries the rows, and place.completeness_pct says what share of the site's count you hold.
A thousand reviews for 20 credits, in under ten seconds on our run. Repeat per URL to sweep a city — places/list gives you thirty of them at a time.
curl -X POST https://api.reefapi.com/tripadvisor/v1/reviews \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"startUrls":[{"url":"https://www.tripadvisor.com/Hotel_Review-g45963-d91703-Reviews-Bellagio-Las_Vegas_Nevada.html"}],"maxReviews":45}'{
"ok": true,
"data": { … },
"meta": {
"api": "tripadvisor",
"endpoint": "reviews",
"mode": "live",
"latency_ms": …,
"record_count": …
},
"error": null
}How to read a Tripadvisor URL — the g-number and the d-number
Every action here is keyed on the page URL, and that URL encodes two different ids that people constantly mix up. Taking the measured Bellagio URL apart: https://www.tripadvisor.com/Hotel_Review-g45963-d91703-Reviews-Bellagio-Las_Vegas_Nevada.html
| URL part | Measured value | What it identifies |
|---|---|---|
| g-number | g45963 = Las Vegas | the geo — a city or region. This is the geo_id parameter on places/list. |
| d-number | d91703 = Bellagio | the place itself. Comes back as location_id on every response. |
| trailing slug | Las_Vegas_Nevada | the location_slug that pairs with geo_id when you pin a city exactly |
| Hotel_Review-… | Bellagio | entity_type "hotel" |
| Restaurant_Review-… | — | entity_type "restaurant" |
| Attraction_Review-… | Bellagio Conservatory & Botanical Garden (d625114) | entity_type "attraction" — a place you visit |
| AttractionProductReview-… | O by Cirque du Soleil at the Bellagio (d12165098) | entity_type "activity" — a bookable tour, show or ticket, not a place |
"activity" is a real entity_type in responses even though the search filter only offers hotel, restaurant, attraction and geo. A name search for one venue can therefore return a hotel, an attraction and an activity that all sit at the same address — check entity_type before you treat three rows as duplicates.
How far the feed pages, and what a thousand rows cost
Measured on 2026-08-27 against one Las Vegas hotel that reports 15,770 reviews, by raising maxReviews until the row count stopped moving.
Billed per 50 rows returned: a thousand reviews is 20 credits, three thousand is 60. Asking for 50 costs 1. The profile, histogram and subratings arrive in the same response at no extra call.
Around 3,000 rows. Asked for 1,000 we got exactly 1,000; asked for 3,000 we got 2,984; asked for 6,000 we got 3,149. The parameter accepts 10,000 but the feed does not have it — plan for roughly three thousand per place, not for the count printed on the page.
Against us: the place's review_count (15,770 here) is every language, while the feed we paged came back 100% English across 3,149 rows. completeness_pct is honest but pessimistic if you only care about English.
Against us: language 'es' returned 300 rows, every one of them English, with no warning. Do not build a per-language pull on it — read each row's own language field instead.
No duplicates: 3,149 rows, 3,149 distinct review ids. Rating, title, body, language, published date, trip type and stay date were filled on every row; helpful_votes on 1 of 50 and the management response on 13 of 50 — those two are genuinely rare, not broken.
What people build with Tripadvisor
The jobs this data is most often used for.
endpoints
credits per call
Hospitality teams call reviews to monitor a property's Tripadvisor rating, ranking and guest feedback.
Travel apps use search and detail to show live ratings for hotels, restaurants and attractions.
Market analysts use the rating histogram and subratings to benchmark a venue against competitors.
What Tripadvisor data costs
The cheapest call here is 1 credit, so $15/mo (Pro) buys 10,000 of them — $1.50 per 1,000 credits. Credits roll over and never expire, and failed or blocked calls are not charged.
Full pricing →- 1,000 free credits on signup, no card
- One key, all 185 APIs, one credit pool
- Failed and blocked calls are never charged
- Credits roll over and never expire
Call it in two lines
Sign up, get 1,000 credits and one key that works on every engine. Then this is the whole protocol.
curl -X POST https://api.reefapi.com/tripadvisor/v1/reviews \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"startUrls":[{"url":"https://www.tripadvisor.com/Hotel_Review-g45963-d91703-Reviews-Bellagio-Las_Vegas_Nevada.html"}],"maxReviews":45}'import requests
r = requests.post(
"https://api.reefapi.com/tripadvisor/v1/reviews",
headers={"x-api-key": REEF_KEY},
json={
"startUrls": [
{
"url": "https://www.tripadvisor.com/Hotel_Review-g45963-d91703-Reviews-Bellagio-Las_Vegas_Nevada.html"
}
],
"maxReviews": 45
},
)
print(r.json()["data"])Have a question? We got answers.
The questions people actually ask before wiring up Tripadvisor.
Get a free key →Why does looking a place up by name sometimes fail?▾
The query and queries parameters go through a name-resolution step that regularly comes back with 'Could not resolve a locationId', and we would rather label them unreliable than let you build on them. The dependable path is two steps: call search with the name to get location_id and the exact page URL, then pass that url to detail or reviews. A measured search for 'Bellagio Las Vegas' returned three distinct entities — the hotel (91703), the conservatory (625114) and the Cirque du Soleil show (12165098) — which is precisely the ambiguity a single name lookup has to guess at.
Is ranking a number I can sort on?▾
No. It is a human-readable string: a measured Bellagio lookup returned "#59 of 260 hotels in Las Vegas". Both numbers and the category and city are baked into one field, so sorting on it means parsing it, and the phrasing differs between hotels, restaurants and attractions. If you need an ordering, sort on rating and review_count, which are a float and an integer.
Why is price_range set but price_level null?▾
They are two separate fields and only one was populated on the measured record: price_range "$$" with price_level null. Read price_range for the dollar-sign band. The same pattern shows up elsewhere on a place record — a hotel returns cuisines, dietary, awards and photos as empty arrays and hours and website as null, because those are restaurant and attraction fields that simply do not apply. Empty here means not applicable, not missing.
Can I verify the rating breakdown adds up?▾
Yes, and it is a useful integrity check. The measured Bellagio histogram was {5: 8953, 4: 2127, 3: 1984, 2: 1277, 1: 1423}, which sums to exactly 15,764 — the same value as review_count. The keys are strings, not integers, so index them as "5" rather than 5. If a histogram ever fails to sum to review_count, you are looking at a partially-rendered page rather than a real discrepancy.
What subratings does a hotel return versus a restaurant?▾
They differ by entity type, and there is no fixed key set. A measured hotel returned Location 4.7, Cleanliness 4.3, Service 4.1, Value 3.8, Sleep Quality 4.3 and Rooms 4.1. Restaurants instead carry food and atmosphere dimensions. Iterate the subratings object rather than reading fixed keys, or a restaurant record will look empty to code written against a hotel.
Why is the phone number formatted with a leading 00?▾
Because Tripadvisor publishes the international dial-out prefix rather than E.164. A measured hotel returned "00 1 888-987-6667" — that is 00, country code 1, then the national number, with spaces and a hyphen. It will not pass an E.164 validator and it will not tel: dial correctly outside the countries that use 00. Normalize to +1 888 987 6667 yourself before storing.
Why is a call slow, and how do I make it cheaper?▾
A measured detail call took 22.8 seconds, and reviews is heavier still because runtime scales with maxReviews (default 200, ceiling 10,000). Two things help. Pass startUrls with several place URLs in one call instead of issuing one call per place — the work of establishing the session is done once for the batch. And ask for the fewest reviews you actually need: fetching 200 when you display 10 costs you twenty times the runtime for nothing.
Why am I only seeing English reviews?▾
Because language defaults to en. Any ISO 639-1 code narrows to that language, and language 'all' returns every language — with non-English reviews machine-translated by Tripadvisor, and the review's own language field telling you which ones those are. For a property in a non-English market the default will hide most of the review volume, so 'all' is usually the honest setting for sentiment work.
What is the Tripadvisor API?▾
Tripadvisor API is a ReefAPI endpoint group for hotels, restaurants and attractions with reviews. It returns live JSON through POST requests under /tripadvisor/v1.
Is the Tripadvisor API free to try?▾
Yes. ReefAPI starts with 1,000 free credits, no card required. Tripadvisor calls use the same shared credit balance as every other ReefAPI engine.
Do I need a Tripadvisor login or account?▾
No login to Tripadvisor is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.
How fresh is the Tripadvisor data?▾
The page example is captured from a live reviews call, and production requests fetch live data through ReefAPI rather than a static sample.
How many credits does the Tripadvisor API use?▾
Tripadvisor actions currently cost 1-2 credits per successful call. Failed or blocked calls are free, and all APIs draw from one credit pool.
Can I call Tripadvisor from an AI assistant or MCP client?▾
Yes. Connect ReefAPI once through MCP and your assistant can call tripadvisor actions with the same key, credit pool and JSON envelope used by normal REST requests.
14 Reputation & Reviews APIs on the same key
One key, one credit pool, one response envelope. If you are pulling Tripadvisor, you are one call away from the rest of the category — no second contract, no second integration.
Try it on your own data before you pay anything
The call above is the real endpoint, not a recording. A free key gives you 1,000 credits, the other 184 APIs, and the same envelope everywhere.
Endpoints, parameters and credit costs on this page are read from the live catalog and cannot drift from what the API accepts. Field notes were captured on 2026-08-27.