Tripadvisor API

Get Tripadvisor reviews and ratings with one API

The Tripadvisor API returns hotel, restaurant and attraction reviews and ratings as clean JSON.

T
/tripadvisor/v1

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.

4 endpoints

reviews

1 cr

Reviews + the full place profile (rating histogram, subratings, amenities) for one or more Tr…

required
optional
startUrls, url, queries, query, maxReviews, language

places/list

2 cr

Discover hotels, restaurants or attractions in a city/area (name, rating, review count).

required
location
optional
category, geo_id, location_slug, max_results

detail

2 cr

Full profile for one Tripadvisor hotel, restaurant or attraction by page URL.

required
url
optional

search

1 cr

Find Tripadvisor places (hotels, restaurants, attractions) and destinations by name.

required
query
optional

Every parameter, every allowed value →

Tripadvisor API

3 of 4 endpoints, ready to run

View docs ↗

Reviews plus the whole place profile in one response: rating histogram, subratings for location, cleanliness, service and value, amenities and hours.

1 credit0 required · 3 optional
POST/tripadvisor/v1/reviews
ok2680 ms · 50 records · sample
{
  "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"
        }
      }
    ]
  }
}
Real response, fetched from the live endpoint with the parameters on the left — trimmed to the first few rows, with seller names left out. Press Try it for the untrimmed response.

How the Tripadvisor API works

Tripadvisor is a normal ReefAPI surface — the same four rules that hold for every other engine on the key.

01
Authenticate
x-api-key header

No OAuth app, no request signing, no per-site account. One key covers all 185 engines.

02
Call
POST /tripadvisor/v1/…

Every route is a POST with a JSON body. Parameters are validated against the published schema before anything is charged.

03
Pay
1 or 2 credits per call

Credits, not seats. Failed and blocked calls are never charged, and cache hits cost nothing.

04
Read
{ ok, data, meta, error }

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.

01search
POST/tripadvisor/v1/search
{"query": "Bellagio Las Vegas"}

Take results[0].url. entity_type tells you whether it is a hotel, a restaurant or an attraction.

02reviews
POST/tripadvisor/v1/reviews
{"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.

request
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}'
response envelope
{
  "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 partMeasured valueWhat it identifies
g-numberg45963 = Las Vegasthe geo — a city or region. This is the geo_id parameter on places/list.
d-numberd91703 = Bellagiothe place itself. Comes back as location_id on every response.
trailing slugLas_Vegas_Nevadathe location_slug that pairs with geo_id when you pin a city exactly
Hotel_Review-…Bellagioentity_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.

What 1,000 reviews cost

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.

Where paging stops

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.

The count you are comparing against

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.

language does nothing today

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.

Duplicates and empty fields

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.

4

endpoints

1/2

credits per call

01

Hospitality teams call reviews to monitor a property's Tripadvisor rating, ranking and guest feedback.

02

Travel apps use search and detail to show live ratings for hotels, restaurants and attractions.

03

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 →
$0.67–$1.50 / 1,000 credits
  • 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
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}'
python
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"])
FAQ

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.