TripAdvisor Restaurants Scraper avatar

TripAdvisor Restaurants Scraper

Under maintenance

Pricing

from $2.34 / 1,000 restaurant result pusheds

Go to Apify Store
TripAdvisor Restaurants Scraper

TripAdvisor Restaurants Scraper

Under maintenance

Search TripAdvisor restaurants for a destination and fetch full detail plus genuinely paginated reviews for one or more restaurant ids, with real price/rating/sort filters. No account or API key needed. Derived from romy/tripadvisor-all-in-one-api.

Pricing

from $2.34 / 1,000 restaurant result pusheds

Rating

0.0

(0)

Developer

Romy

Romy

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Categories

Share

What does TripAdvisor Restaurants Scraper do?

TripAdvisor Restaurants Scraper takes a destination geoId and/or a list of restaurant ids, and pushes restaurant search results, full restaurant detail, and paginated reviews to the dataset.

It talks directly to the same internal API the official TripAdvisor Android app uses, reverse-engineered by capturing live traffic from a real device. Unlike many reverse-engineered mobile APIs, TripAdvisor needs no per-request signature at all — just a static API key and self-generated device/session ids, confirmed live and standalone-reproducible. No TripAdvisor account, no API key of your own. This is the restaurants slice of TripAdvisor All-in-One API, split out as its own focused Actor.

Why use TripAdvisor Restaurants Scraper?

  • Search or detail, in one Actor — pass geoId for a restaurant list, restaurantIds for full detail, or both in the same run
  • Real filters that genuinely work — price range, minimum rating, sort — confirmed live in the parent Actor
  • 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) continuation cursor, wrapped so you don't have to reverse-engineer it yourself
  • No account needed — every call works fully anonymously
  • Use cases: restaurant discovery for a destination, price/rating monitoring, review analysis, dining research bots

Input

FieldTypeDescription
geoIdstringDestination geoId from TripAdvisor search (e.g. "293916" for Bangkok). Required unless restaurantIds is set. Runs a restaurant list search.
priceMin / priceMaxintegerOnly used with geoId.
minRatingstringOnly used with geoId. Confirmed live values "1"-"5".
sortstringOnly used with geoId. Confirmed live values BEST_VALUE, PRICE_LOW_TO_HIGH.
maxPagesintegerOnly used with geoId. Default 10. See Known Limitations — list pagination beyond page 1 is not confirmed live and this actor caps at 1 page regardless of this value.
maxItemsintegerOnly used with geoId. Stop once this many restaurants have been pushed. Leave empty to only bound by maxPages.
restaurantIdsstring[]TripAdvisor restaurant content ids (from a geoId search, or a TripAdvisor URL/app link). Required unless geoId is set. One dataset row per id.
includeReviewsbooleanOnly used with restaurantIds. Paginates and attaches each restaurant's reviews. Default false.
reviewsMaxItemsintegerOnly used when includeReviews is true. Stop once this many reviews have been collected for a restaurant. Leave empty to fetch all reviews.
currencystringISO code, default GBP. Affects prices in returned data.

At least one of geoId / restaurantIds is required; both may be set in the same run.

Example (search):

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

Example (detail + reviews):

{ "restaurantIds": ["24191839", "16726460"], "includeReviews": true, "reviewsMaxItems": 50 }

Output

List search (geoId): one dataset row per restaurant — TripAdvisor's own map-pin object for that restaurant (saveId.id is the content id, primaryInfo.text the name, secondaryInfo.text the cuisine/type, overlay.text the rating), confirmed live against Bangkok (geoId 293916).

Detail / reviews (restaurantIds): one dataset row per id:

{
"restaurantId": "24191839",
"restaurant": { "AppPresentation_queryAppDetailV2": [{ "container": { "navTitle": "Bangkok'78" } }] },
"reviews": [{ "htmlTitle": { "htmlString": "My lunch" }, "bubbleRating": { "rating": 5 } }]
}

reviews is omitted entirely when includeReviews is false.

Known limitations

  • Restaurant list-search pagination beyond page 1 does not work, confirmed live. The parent's README already flags /restaurants list pagination beyond page 1 as unwrapped; this Actor attempted to genuinely thread a continuation cursor the same way it does for reviews (which does work), but confirmed live against geoId 293916 (Bangkok): the restaurant list response never carries a continuation updateToken at all — only a "View all restaurants" deep link with its own separate filter parameter that the parent's listContent() has no field for. So this Actor caps the list search at 1 page regardless of the maxPages input, and logs a warning explaining why. Reviews pagination (includeReviews) is unaffected and works as documented above.
  • List search returns the map's restaurant pins, not a dedicated results array. TripAdvisor's restaurant list-search response is structured like a mixed overview screen (a few "top restaurant" teaser cards plus an accompanying map). This Actor extracts the map's restaurant pins as the per-page result set — confirmed live to be a complete, homogeneous list of real restaurants (28 for Bangkok on an unfiltered search) with a usable content id, name, cuisine, and rating on each.
  • This Actor only wraps guest-accessible endpoints. No login flow is implemented or planned.
  • 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 restaurant — charged once for each restaurant returned by search and once for each restaurant 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.