Search Tripadvisor hotels
GET /tripadvisor/search — bearer auth, JSON responses, billed per successful request.
Search Tripadvisor hotels
Searches Tripadvisor for hotels and returns one row per hotel card, including rating, subratings, ranking, price, amenities, and the quoted review. The crawler interacts with the page as a visitor would: typing the destination, selecting dates, setting rooms and guests, applying filters, entering a price range, and choosing sort order. Only destination is required; omitted parameters leave the page unchanged rather than applying defaults.
When to use it
Use this when you need structured hotel data from Tripadvisor's search results, including properties that appear nearby or as sponsored listings. Use max_pages to control result volume and credit cost. Use checkin and checkout together when you need stay-specific pricing; omit both when you only need hotel listings without rates.
Notes
- A broader result set than expected means a filter or step could not be applied and was skipped; check
nearbyandsponsoredflags to identify non-matching entries. - Each page in
max_pagescosts 30 credits upfront, charged when the crawl starts, even if no results are found or fewer pages exist. - Authentication via
Authorizationheader takes precedence over?key=; if both are present, the query parameter is ignored.
| Parameter | In | Type | Description |
|---|---|---|---|
| destination * | query | string | Where to stay, as you would type it into Tripadvisor's search. The first suggestion that starts with it is taken -- not "Nearby", and not a sponsored place. |
| checkin | query | string<date> | The first night, as `YYYY-MM-DD`, today or later. **Requires `checkout`.** Optional: without dates Tripadvisor still lists the hotels, it just prices them for no stay in particular. With them, `price` is for the stay, and a hotel with no rate for it has none. |
| checkout | query | string<date> | The day you leave, as `YYYY-MM-DD`, after `checkin`. **Requires `checkin`.** |
| rooms | query | integer | How many rooms. Left as the page has it when absent. |
| adults | query | integer | How many adults. Left as the page has it when absent. |
| children | query | integer | How many children. Their ages are not set. |
| filters | query | string | Filters to tick, named the way the page prints them -- `Pets Allowed`, `3 Star`, `Budget` -- or by the value on their checkbox, such as `amenity:9167`. Comma-separated, or repeated as `filters[]=`. Up to 20. Which filters a list offers depends on the destination, so one it does not offer is skipped rather than refused. |
| price_min | query | integer | The lowest nightly price, in the currency the page shows (US dollars on the English site). |
| price_max | query | integer | The highest nightly price, at least `price_min`. One past the end of Tripadvisor's slider means no upper bound. |
| sort | query | best_value | traveler_ranked | price | distance | How the list is ordered: `best_value`, `traveler_ranked`, `price` (low to high) or `distance` (to the city center). Left as the page has it when absent. |
| max_pages | query | integer | How many pages of results to read, through "Next page". **Each one is 30 credits**, charged for when the crawl starts whether or not the list turns out to have that many. |
| premium | query | string | Go through the premium proxy pool rather than the standard one. **On by default**, because Tripadvisor sits behind DataDome, which turns the standard pool away; send `false` to use the standard pool. Free either way. `true`, `false`, `1`, `0`, `yes`, `no`, `on`, `off`, in any case. Anything else is refused rather than read as `false`. |
| country | query | string | The country to appear to be browsing from, as a two-letter ISO 3166-1 alpha-2 code. Free. Required to use `city`. |
| city | query | string | The city inside that country, as the pool spells it. **Requires `country`.** Free here, where on `/crawl` it doubles the price. |
| key | query | string | The API key, as an alternative to the `Authorization` header. Ignored when a header is present. |
curl -X GET "https://app.irmu.com/api/tripadvisor/search?destination=&checkin=&checkout=&rooms=&adults=&children=&filters=&price_min=&price_max=&sort=&max_pages=&premium=&country=&city=&key=" \
-H "Authorization: Bearer $IRMU_API_KEY"{
"url": "https://www.tripadvisor.com/Hotels-g227870-Sabadell_Catalonia-Hotels.html",
"destination": "Sabadell",
"checkin": "2026-11-24",
"checkout": "2026-11-28",
"rooms": 1,
"adults": 2,
"children": null,
"filters": [
"Pets Allowed",
"3 Star"
],
"price_min": 50,
"price_max": 150,
"sort": "traveler_ranked",
"max_pages": 1,
"hotels": [
{
"position": 3,
"name": "Catalonia Sabadell",
"url": "https://www.tripadvisor.com/Hotel_Review-g227870-d284272-Reviews-Catalonia_Sabadell-Sabadell_Catalonia.html",
"id": "284272",
"geoId": "227870",
"rating": 3.7,
"reviewCount": 554,
"ratingWord": "Average",
"subratings": {
"Location": 4.1,
"Cleanliness": 4,
"Service": 4.1,
"Value": 3.7
},
"stars": 4,
"ranking": {
"text": "#3 Best Value of 20 places to stay in Sabadell",
"position": 3,
"total": 20
},
"price": {
"amount": 112,
"currency": "USD"
},
"amenities": [
"Restaurant",
"Bar/Lounge",
"Free Wifi"
],
"badges": [
"Breakfast included"
],
"tags": [
"Fully refundable"
],
"roomsLeft": 2,
"image": "https://dynamic-media-cdn.tripadvisor.com/media/photo-o/1.jpg",
"review": {
"author": "Alejandro M",
"text": "Very good infrastructure. Comfy room..."
},
"sponsored": false,
"nearby": false,
"page": 1
}
],
"credits_charged": 30,
"credits_remaining": 970,
"job_id": "0198a9b6-1f4c-7c3e-9a2b-5d8e6f0a1b23_0198a9b6-2a71-7f0d-8c44-9e1b3c5d7f02",
"status": "done",
"position": null,
"debug": null,
"error": null
}const res = await fetch("https://app.irmu.com/api/tripadvisor/search", {
method: "GET",
headers: {
Authorization: `Bearer ${process.env.IRMU_API_KEY}`,
"Content-Type": "application/json",
}
});
const data = await res.json();import os, requests
res = requests.get(
"https://app.irmu.com/api/tripadvisor/search",
headers={"Authorization": f"Bearer {os.environ['IRMU_API_KEY']}"}
)
print(res.json())| Status | Meaning |
|---|---|
| 200 | The hotels. |
| 202 | Paid for and still going. Collect it from `/crawl/{job}`, free, as a slow crawl is collected. That endpoint answers the crawl envelope, so what is lifted into `hotels` here arrives under `data` there. |
| 401 | No key, an unknown key, or a caller that is not an organization. |
| 402 | Not enough credits, or the daily limit is reached. Nothing is charged and no attempt is recorded. |
| 422 | A malformed request -- no destination, one date without the other, dates in the past, a `price_max` under the `price_min`, a sort that is not one of the four, too many pages, or a flag that is not a yes or a no. |
| 500 | The crawl failed outright. **The credits are refunded**, so `credits_charged` is `0`. The attempt is still recorded against `www.tripadvisor.com`. |
| 503 | The crawl could not be routed through a proxy pool. Nothing is charged. |
Start building with Irmu today
200 free credits every month, no card required. Every API, every integration, one key.