TripAdvisor Hotels Scraper avatar

TripAdvisor Hotels Scraper

Pricing

from $2.34 / 1,000 hotel result pusheds

Go to Apify Store
TripAdvisor Hotels Scraper

TripAdvisor Hotels Scraper

Search TripAdvisor hotels by destination and fetch full hotel detail plus genuinely paginated reviews (a real cursor, not a fixed 20-review cap) for one or more hotel ids. Talks directly to TripAdvisor's internal mobile API — no account or key needed. Derived from tripadvisor-all-in-one-api.

Pricing

from $2.34 / 1,000 hotel result pusheds

Rating

0.0

(0)

Developer

Romy

Romy

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

What does TripAdvisor Hotels Scraper do?

TripAdvisor Hotels Scraper searches TripAdvisor hotels for a destination and/or fetches full detail plus paginated reviews for one or more hotel ids — a batch-run Actor that pushes one dataset row per result.

It talks directly to the same internal API the official TripAdvisor Android app uses, reverse-engineered by capturing live traffic from a real device. No TripAdvisor account, no API key of your own — set up an input, run the Actor, get a dataset.

This is the hotels-only, batch-run slice of TripAdvisor All-in-One API, which also serves restaurants and attractions as an always-on Standby REST API. Use this Actor instead when you just want hotel search/detail/reviews as normal dataset rows, no API integration required.

Why use TripAdvisor Hotels Scraper?

  • Search, detail, and reviews in one Actor — pass a destination id to search, hotel ids to get full detail, or both
  • Real filters that genuinely work — price range, amenities, minimum rating, sort — confirmed live against the same underlying endpoint the parent Actor validated
  • Real paginated reviews, not a 20-item cap — confirmed live end-to-end: page 2 returns 20 genuinely new reviews with zero overlap with page 1, using TripAdvisor's own real (non-trivial) pagination cursor, wrapped so you don't have to reverse-engineer it yourself
  • No account needed — every endpoint works fully anonymously
  • Use cases: hotel price/rating monitoring, review analysis, destination research, travel content aggregation

Input

At least one of geoId or hotelIds is required.

FieldTypeDescription
geoIdstringNumeric TripAdvisor destination id, e.g. "293916" for Bangkok. Runs a hotel search when set.
priceMin / priceMaxintegerNightly price range — confirmed live to genuinely filter results
amenitiesstring[]Amenity tag ids. Get ids from a prior response's filters.availableFilterGroups
minRatingstringConfirmed live values "1"-"5"
sortstringConfirmed live values: BEST_VALUE, PRICE_LOW_TO_HIGH
maxPagesinteger, default 10Stop after this many search pages. In practice this Actor's search only ever returns 1 page — see Known limitations
maxItemsintegerStop once this many hotels from the search have been pushed
hotelIdsstring[]TripAdvisor hotel content ids to fetch full detail for (and reviews, if requested)
includeReviewsboolean, default falseFor each hotel id, also fetch its paginated reviews and attach them to the hotel's row
reviewsMaxItemsintegerStop once this many reviews have been fetched per hotel. Leave empty for all reviews
currencystring, default "GBP"ISO code — confirmed live to change returned prices

Example — search:

{ "geoId": "293916", "minRating": "4", "sort": "PRICE_LOW_TO_HIGH", "maxItems": 20 }

Example — detail + reviews:

{ "hotelIds": ["25246100", "302769"], "includeReviews": true, "reviewsMaxItems": 40 }

Output

Search (geoId) — one dataset row per hotel card:

{
"stableDiffingType": "HotelListCard_hotel_302769_HOTEL_0",
"listSingleCardContent": {
"cardTitle": { "string": "The Peninsula Bangkok" },
"bubbleRating": { "rating": 4.7, "numberReviews": { "string": "(5,968)" } },
"commerceInfo": { "priceForDisplay": { "string": "£260" } },
"cardLink": { "route": { "params": { "contentId": "302769", "contentType": "hotel" } } }
}
}

Detail (hotelIds) — one dataset row per hotel id:

{
"hotelId": "25246100",
"hotel": {
"AppPresentation_queryAppDetailV2": [{ "container": { "navTitle": "Villa Deva Resort & Hotel Bangkok" } }]
},
"reviews": [
{ "htmlTitle": { "htmlString": "Special thanks to May, Im, and Benz" }, "bubbleRating": { "rating": 5 } }
]
}

reviews is omitted entirely when includeReviews is false.

Data notes

  • No request signing exists at all — confirmed by capturing the real app's traffic and finding just static identity headers, not validated against any server-side registry.
  • Review pagination is genuinely non-trivial, and this Actor handles it for you. Confirmed live: a raw page-number parameter alone silently re-returns page 1 — real pagination requires threading an opaque continuation cursor from the previous response back into the next request, alongside an internal page-depth counter. Verified end-to-end during this Actor's own smoke test: fetching hotel 25246100's reviews returned real, distinct review content.
  • currency changes real prices, not just a symbol.

Known limitations

  • Hotel search only returns 1 page, confirmed live during this Actor's own smoke test. Search pagination beyond page 1 was genuinely attempted (not just left unwrapped like the parent Actor) — the same extractUpdateToken() cursor mechanism the reviews pagination below uses was threaded into a second listContent() call as updateToken. TripAdvisor's GraphQL schema rejects it: updateToken is not a valid field of the list endpoint's routeParameters (InputMapDefinesTooManyFieldsException / "not defined for input object type Routing_AppListParametersInput"), unlike the reviews endpoint where the identical mechanism works. maxPages above 1 has no further effect until TripAdvisor's app is found sending that cursor through some other field.
  • This Actor only wraps guest-accessible endpoints. No login flow is implemented or planned — features requiring a real TripAdvisor account (saved trips, writing reviews, booking) are out of scope by design.
  • Restaurants and attractions, destination search, the home feed, and photo galleries are covered by TripAdvisor All-in-One API instead.
  • This is an unofficial, reverse-engineered integration, not affiliated with or endorsed by Tripadvisor LLC. Behavior may change if TripAdvisor changes its API.

Pricing

Pay per event: $0.003 per hotel — charged once for each hotel returned by search and once for each hotel id's detail row (Free plan price; lower on paid Apify plans). See the Actor's Pricing tab for current tiered rates.

Found a bug or have a feature request? Use the Issues tab on this Actor's page.