Tripadvisor Review Scraper: Hotels, Restaurants & Attractions avatar

Tripadvisor Review Scraper: Hotels, Restaurants & Attractions

Under maintenance

Pricing

from $4.99 / 1,000 results

Go to Apify Store
Tripadvisor Review Scraper: Hotels, Restaurants & Attractions

Tripadvisor Review Scraper: Hotels, Restaurants & Attractions

Under maintenance

Collect structured Tripadvisor review data with ease. The actor gathers review text, star ratings, timestamps, reviewer profiles, and helpful votes. Ideal for analysts, agencies, and businesses needing deep customer insights.

Pricing

from $4.99 / 1,000 results

Rating

0.0

(0)

Developer

API Empire

API Empire

Maintained by Community

Actor stats

0

Bookmarked

5

Total users

0

Monthly active users

5 days ago

Last modified

Share

Tripadvisor Review Scraper — Hotels, Restaurants & Attractions

The Tripadvisor review scraper extracts reviews, ratings, reviewer profiles, and property intelligence from TripAdvisor hotel, restaurant, and attraction pages — mixing all three property types in a single run. Every response comes back as typed, normalized JSON: no HTML, no CSS selectors, no parsing step. Point it at a property URL (or a hotel name), set how many reviews you need, and it returns structured review data ready for a spreadsheet, a database, or an LLM pipeline.

🏨🍽️🎡 What is the Tripadvisor Review Scraper?

The Tripadvisor Review Scraper is an Apify Actor that collects publicly visible guest reviews from TripAdvisor's Hotel_Review, Restaurant_Review, and Attraction_Review pages. It calls TripAdvisor's own GraphQL API directly — the same endpoint TripAdvisor's website uses to render reviews — rather than scraping rendered HTML. No TripAdvisor account, login, or API key is required; it runs entirely from the Apify Console or the Apify API.

  • Scrape hotel, restaurant, and attraction reviews in one run
  • Attach full reviewer profiles (name, username, location, contribution count) — optional
  • Attach property intelligence (ranking, price range, amenities, contact details) — optional
  • Filter by star rating and review language before rows are pushed
  • Export as JSON, CSV, Excel, XML, or RSS
  • No proxy setup required — defaults to Apify Residential Proxy

📊 What data does the Tripadvisor Review Scraper collect?

Every dataset row is a single review, tagged with the property type it came from, plus two optional nested blocks — the reviewer's profile and the property's own intelligence data.

Data TypeKey FieldsJSON Field Names
Hotel reviewsstar rating, review text, travel date, trip type, room tiprating, text, travelDate, tripType, roomTip, propertyType: "HOTEL"
Restaurant reviewsstar rating, review text, owner/management responsesrating, text, ownerResponse, propertyType: "RESTAURANT"
Attraction reviewsstar rating, review text, visit context, helpful votesrating, text, tripType, helpfulVotes, propertyType: "ATTRACTION"
Reviewer profilesdisplay name, username, home location, avatar, contribution countuser.name, user.username, user.userLocation, user.avatar, user.contributions.totalContributions
Property intelligenceranking position, price range, amenities, telephone, websitepropertyIntelligence.rankingText, propertyIntelligence.priceRange, propertyIntelligence.amenitiesHighlighted, propertyIntelligence.telephone, propertyIntelligence.website

🆚 How does the Tripadvisor Review Scraper differ from the official TripAdvisor API?

TripAdvisor's own Content API caps reviews at 5 per location and requires a billing relationship before a single call succeeds; the Tripadvisor Review Scraper returns up to 10,000 reviews per property with no TripAdvisor account at all.

FeatureTripAdvisor Content APITripadvisor Review Scraper
Reviews per locationUp to 5 reviews and 5 photos per location (tripadvisor-content-api.readme.io, checked 2026-08-04)Up to 10,000 per property (input-configurable)
Property types coveredHotels, restaurants, attractionsSame 3 types, mixed in one run
Access processRegister a developer account, add billing, set a daily call budget before any request succeeds (tripadvisor-content-api.readme.io/reference/faq, checked 2026-08-04)Start directly from the Apify Console — no TripAdvisor account needed
Pricing modelPay-per-call; first 5,000 calls/month free, then billed, volume discounts above that (same source, checked 2026-08-04)Apify pay-per-result on the row_result event
Rate limitsUp to 50 calls/second; Search endpoints capped at 10,000 calls/day (same source, checked 2026-08-04)No per-second cap set by the Actor itself — throughput depends on TripAdvisor's own anti-bot response and proxy speed
Reviewer profile fieldsNot documented as part of the public review schemaFull reviewer profile available, optional per run

The Content API is the right choice if you already hold a TripAdvisor partner/developer account and only need a handful of the most recent reviews per listing. The Tripadvisor Review Scraper is the better fit when you need deep review history across hotels, restaurants, and attractions without setting up billing with TripAdvisor directly.

🎯 Why do developers and teams scrape TripAdvisor?

TripAdvisor review data is used well beyond travel blogging — here's who actually pulls it, and why.

🤖 For AI engineers and agent builders

Guest reviews are dense, opinionated, unstructured text — exactly what RAG pipelines and travel-recommendation agents need to ground answers in real guest sentiment. A typical workflow: pull the last 500 reviews for a shortlist of hotels via maxComments, index text, rating, and subratings into a vector store, and let an agent answer "which of these hotels has the quietest rooms?" by retrieving matching review passages instead of hallucinating an answer.

📈 For hospitality and travel analysts

Revenue managers and OTAs use review volume, rating, and the per-star ratingHistogram inside placeInfo to benchmark a property against its competitive set over time. Tracking propertyIntelligence.rankingText ("#285 of 525 hotels in New York City") across scheduled runs turns a single scrape into a trend line for competitive rank movement.

📣 For marketers and reputation management teams

Hotel and restaurant chains monitor new reviews and ownerResponse data to see which locations are responding to guest feedback and which aren't. Filtering by reviewRatings: "NEGATIVE" isolates the reviews that need a response before they compound into repeat complaints.

🔬 For researchers and market analysts

Tourism and hospitality researchers use review text, tripType, travelDate, and reviewer userLocation to study visitor demographics and seasonal travel patterns across markets — using only reviews that are already public on the property's page, with no login or paywall involved.

🧭 How to scrape TripAdvisor (step by step)

  1. Open Tripadvisor Review Scraper: Hotels, Restaurants & Attractions on the Apify Console (or call it through the Apify API).
  2. Add one or more TripAdvisor property URLs, hotel names, or keywords to the required startUrls field — direct URLs work for all three property types; names/keywords only resolve hotels.
  3. Set maxComments, sortOrder, reviewsLanguages, and reviewRatings to scope the run, and toggle scrapeReviewerInfo / includePropertyIntelligence for the nested data you want.
  4. Click Start. The Actor auto-paginates through TripAdvisor's review pages and defaults to Apify Residential Proxy to avoid anti-bot blocks.
  5. Download results as JSON, CSV, Excel, XML, or RSS from the run's dataset.

🛠️ What to do when TripAdvisor changes its structure

TripAdvisor rotates its persisted GraphQL query IDs with nearly every front-end deploy. The Actor re-extracts those IDs live from TripAdvisor's own JS bundle on every run instead of hardcoding them, and falls back automatically to TripAdvisor's default sort order if a specific sortBy value is rejected mid-run. The output schema itself stays the same either way, so integrations built against it keep working.

⬇️ Input

The Actor accepts the following parameters, defined in .actor/actor.json:

ParameterRequiredTypeDescriptionExample Value
startUrlsYesarray (stringList)TripAdvisor property URLs, hotel names, or keywords. Direct URLs are required for restaurants and attractions; name/keyword lookup only resolves hotels.["https://www.tripadvisor.com/Hotel_Review-g60763-d208453-Reviews-Hilton_New_York_Times_Square-New_York_City_New_York.html"]
maxCommentsNointegerMaximum reviews to extract per property. Minimum: 1. Maximum: 10000. Default: 10.500
sortOrderNostring (enum)Review fetch order. Enum: newest, oldest, relevant, rating. Default: newest. Note: relevant currently returns the same order as newest — TripAdvisor does not expose a distinct relevance sort on this data source."newest"
reviewsLanguagesNostring (enum)Language to filter reviews by. Enum includes ALL_REVIEW_LANGUAGES and 29 named languages (English, Spanish, French, German, Italian, Portuguese, Dutch, Russian, Japanese, Korean, Chinese Simplified/Traditional, Arabic, Turkish, Hebrew, Swedish, Norwegian, Danish, Finnish, Polish, Czech, Hungarian, Romanian, Greek, Thai, Vietnamese, Indonesian, Malay, Hindi). Default: English."English"
reviewRatingsNostring (enum)Star-rating filter. Enum: ALL_REVIEW_RATINGS, POSITIVE (4–5★), NEGATIVE (1–2★), AVERAGE (3★), or a specific star count "1""5". Default: ALL_REVIEW_RATINGS."POSITIVE"
scrapeReviewerInfoNobooleanWhen true, includes the full reviewer profile object. When false, the user field is null. Default: true.true
includePropertyIntelligenceNobooleanWhen true, includes the propertyIntelligence object (ranking, price range, amenities, contact info). Default: true.true
proxyConfigurationNoobject (proxy editor)Apify Proxy configuration. Defaults to Residential group if left blank.{"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"]}

Example input:

{
"startUrls": [
"https://www.tripadvisor.com/Hotel_Review-g60763-d208453-Reviews-Hilton_New_York_Times_Square-New_York_City_New_York.html",
"https://www.tripadvisor.com/Restaurant_Review-g60864-d477685-Reviews-Crescent_City_Brewhouse-New_Orleans_Louisiana.html",
"https://www.tripadvisor.com/Attraction_Review-g60763-d105127-Reviews-Central_Park-New_York_City_New_York.html"
],
"maxComments": 500,
"sortOrder": "newest",
"reviewsLanguages": "English",
"reviewRatings": "ALL_REVIEW_RATINGS",
"scrapeReviewerInfo": true,
"includePropertyIntelligence": true,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"]
}
}

The most common input mistake: passing a restaurant or attraction name instead of its direct URL. Name/keyword lookup is resolved via Google Search and only reliably finds hotels — restaurant and attraction inputs that aren't a direct Restaurant_Review or Attraction_Review URL are skipped with a warning in the run log.

⬆️ Output

Every run pushes one dataset row per review as typed JSON — the same 21 keys shown in the dataset's default table view, with nothing extra hidden. Export directly as JSON, CSV, Excel, XML, or RSS from the Apify Console.

⭐ Scraped hotel review

{
"id": "918273645",
"url": "https://www.tripadvisor.com/ShowUserReviews-g60763-d208453-r918273645-Hilton_New_York_Times_Square-New_York_City_New_York.html",
"title": "Great location, tired rooms",
"lang": "en",
"locationId": "208453",
"publishedDate": "2026-06-18",
"publishedPlatform": "MOBILE",
"rating": 4,
"helpfulVotes": 3,
"text": "The location right on Times Square can't be beat, but the rooms are due for a refresh.",
"roomTip": "Ask for a room on a high floor away from the elevator.",
"travelDate": "2026-05",
"tripType": "COUPLES",
"user": {
"userId": "ABCDEFG123",
"name": "Sarah M",
"contributions": { "totalContributions": 42, "helpfulVotes": null },
"username": "SarahM_NYC",
"userLocation": "Chicago, Illinois",
"avatar": "https://dynamic-media-cdn.tripadvisor.com/media/photo-t/avatar_100x100.jpg",
"link": "www.tripadvisor.com/Profile/SarahM_NYC"
},
"ownerResponse": {
"id": "812345",
"text": "Thank you for staying with us — we appreciate the feedback and are addressing the room refresh.",
"lang": "en",
"publishedDate": "2026-06-20",
"responder": "Guest Relations Manager",
"connectionToSubject": "MANAGEMENT"
},
"subratings": [
{ "name": "Rooms", "value": 3 },
{ "name": "Service", "value": 5 },
{ "name": "Location", "value": 5 }
],
"photos": [
{
"id": "812223344",
"url": "https://dynamic-media-cdn.tripadvisor.com/media/photo-o/550x309.jpg",
"caption": "View from the room",
"albumId": "112233"
}
],
"placeInfo": {
"id": "208453",
"name": "Hilton New York Times Square",
"rating": 4.0,
"numberOfReviews": 5243,
"locationString": "New York City, New York",
"latitude": 40.758,
"longitude": -73.9855,
"webUrl": "https://www.tripadvisor.com/Hotel_Review-g60763-d208453-Reviews-Hilton_New_York_Times_Square-New_York_City_New_York.html",
"website": "https://www.hilton.com/en/hotels/nycpwhh-hilton-new-york-times-square/",
"address": "1335 6th Ave, New York City, NY 10019",
"addressObj": {
"street1": "1335 6th Ave",
"street2": "",
"city": "New York City",
"state": "NY",
"country": "United States",
"postalcode": "10019"
},
"ratingHistogram": { "count1": 120, "count2": 180, "count3": 420, "count4": 1450, "count5": 3073 }
},
"propertyType": "HOTEL",
"propertyIntelligence": {
"rankingText": "#285 of 525 hotels in New York City",
"priceRange": "$250 - $450",
"amenitiesHighlighted": ["Free Wifi", "Fitness Center", "Restaurant"],
"amenitiesNonHighlighted": ["Air conditioning", "Non-smoking rooms"],
"telephone": "+1 212-586-7000",
"website": "https://www.hilton.com/en/hotels/nycpwhh-hilton-new-york-times-square/",
"heroImage": "https://dynamic-media-cdn.tripadvisor.com/media/photo-o/hero.jpg"
},
"scrapedAt": "2026-08-04T12:34:56.789Z"
}

🍽️ Scraped restaurant review

Same 21-key shape as above, with propertyType: "RESTAURANT". propertyIntelligence.priceRange is populated (price ranges exist on TripAdvisor's restaurant pages), but amenitiesHighlighted and amenitiesNonHighlighted are null — TripAdvisor doesn't expose an amenities list for restaurants, so the Actor leaves the field genuinely null rather than returning an empty amenity claim.

🎡 Scraped attraction review

Same shape again, with propertyType: "ATTRACTION". Here both propertyIntelligence.priceRange and the amenities fields are null — TripAdvisor's own attraction pages don't carry price-range or amenity data at all, confirmed by the Actor's source parsing, not omitted by mistake.

🔍 How does the Tripadvisor Review Scraper compare to other TripAdvisor scrapers?

FeatureTripadvisor Review ScraperGeneric alternative
Output formatTyped, normalized JSON straight from TripAdvisor's GraphQL APIOften HTML-parsed fields that break when TripAdvisor changes its markup
Property coverageHotels, restaurants, and attractions mixed in one runFrequently limited to a single property type per run
Input flexibilityDirect URLs for all 3 types, plus hotel name/keyword lookupDirect URL only, in most cases
Anti-bot handlingTLS impersonation, sticky proxy sessions, live query-ID discovery per runVaries — undocumented in most listings
Schema stability across TripAdvisor deploysQuery IDs re-extracted live each run, so output schema stays fixedDepends on how the underlying scraper is maintained

If you're building an AI agent or RAG pipeline, the output format row is the decision-maker — parsing HTML inside an agent loop is a reliability failure mode, not a feature.

📈 How many results can you scrape with the Tripadvisor Review Scraper?

Up to 10,000 reviews per property — set by both the maxComments input maximum and an internal safety cap in the scrape loop that stops pagination once the offset passes 10,000. TripAdvisor's own GraphQL endpoint returns reviews 10 at a time; the Actor loops through pages automatically until it hits maxComments, the property's total review count, or that safety cap — whichever comes first. No manual pagination is needed.

⚠️ If you combine a low maxComments with a restrictive reviewRatings filter on a property that has few matching reviews, the run will keep paginating (up to the property's total review count or the safety cap) until it finds enough matches, since rating filtering happens after each page is fetched, not inside the TripAdvisor query itself.

🔌 Integrate the Tripadvisor Review Scraper and automate your workflow

The Tripadvisor Review Scraper works with any language or tool that can send an HTTP request, since it runs on the Apify platform like any other Actor.

🌐 REST API integration

from apify_client import ApifyClient
client = ApifyClient("<APIFY_API_TOKEN>")
run = client.actor("API-Empire/tripadvisor-review-scraper-hotels-restaurants-and-attractions").call(
run_input={
"startUrls": [
"https://www.tripadvisor.com/Hotel_Review-g60763-d208453-Reviews-Hilton_New_York_Times_Square-New_York_City_New_York.html"
],
"maxComments": 200,
}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["title"], item["rating"])

Works in Python, Node.js, Go, Ruby, cURL.

🔗 Automation platforms (n8n, Make, LangChain)

n8n — the community Apify node can run this Actor by ID and pass its dataset output straight into any downstream workflow node. Make — the Apify app's "Run Actor" module supports the same call pattern for scenario automation. LangChain — the langchain-apify package exposes an Apify Actor as a callable tool (ApifyActorsTool), so an agent can trigger a scrape and consume the resulting JSON directly inside a chain.

Scraping publicly available TripAdvisor reviews is generally legal, but the reviewer profile data this Actor can attach is personal data, so different rules apply to different parts of the output. The Tripadvisor Review Scraper only returns data already visible to any visitor on TripAdvisor's public property pages — nothing behind a login. Because scrapeReviewerInfo (on by default) attaches a reviewer's name, username, home location, and profile link to each row, that portion of the output is personal data under GDPR and CCPA, and you need a lawful basis before storing or using it in bulk — disabling scrapeReviewerInfo removes it entirely if you only need review text and ratings. The review text, ratings, and property data itself are governed by TripAdvisor's Terms of Service rather than data-protection law. Consult legal counsel for commercial use cases involving bulk personal data.

❓ Frequently asked questions

Does the Tripadvisor Review Scraper work without a TripAdvisor account?

Yes. It connects to TripAdvisor's public GraphQL endpoint as an anonymous browser session; no TripAdvisor login, account, or API key is required. You only need an Apify account to run the Actor.

How often is the scraped data updated?

Every run fetches live from TripAdvisor at the moment it executes — there is no caching layer. Run it on a schedule if you need continuously refreshed review data.

What happens if a property has fewer reviews than I requested, or the URL is no longer valid?

If TripAdvisor has fewer reviews than maxComments, the run logs "reached the end" and returns everything available rather than erroring out. If the URL doesn't resolve to a supported property page, the run logs an error and returns 0 rows for that URL instead of stopping the whole run — other URLs in the same startUrls list still run normally.

Can I scrape private or restricted TripAdvisor content?

No. Only reviews and property details already visible to any visitor on TripAdvisor's public pages are returned. There is no login-gated or private content access.

Does the Tripadvisor Review Scraper work for AI agent workflows and LLM pipelines?

Yes — it's callable as an HTTP endpoint through the Apify API by any agent framework. Every response is already typed JSON with stable field names, so there's no parsing step before passing review text and ratings into an LLM.

How does the Tripadvisor Review Scraper handle TripAdvisor's anti-bot system?

TripAdvisor fronts every request with DataDome. The Actor uses Safari TLS impersonation (Chrome impersonation profiles get a 403 challenge from DataDome), seeds a DataDome session cookie per property, and keeps that session sticky to one residential proxy IP across every request for that property. If a request fails, it retries automatically before giving up on that page.

How does the Tripadvisor Review Scraper compare to other TripAdvisor scrapers?

It calls TripAdvisor's own internal GraphQL API — the same one the TripAdvisor website itself uses — rather than parsing the rendered HTML page. That makes it less brittle against markup-only redesigns, though TripAdvisor's persisted query IDs still rotate periodically, which is why the Actor re-extracts them live on every run instead of hardcoding them.

Does the Tripadvisor Review Scraper return data in a format LLMs can use directly?

Yes. Typed, normalized JSON with stable field names — pass it directly into an LLM context window, index it into a vector store, or route it through an agent tool without a parsing step.

Can I use the Tripadvisor Review Scraper without managing proxies?

Yes. It defaults to Apify Residential Proxy automatically if you leave proxyConfiguration blank; residential proxy traffic is billed under your own Apify plan, but you don't need to source or configure proxies yourself.

Why does the relevant sort option return the same reviews as newest?

Because TripAdvisor's GraphQL endpoint doesn't expose a separate relevance-ranking value on this data source — the Actor's sortOrder: "relevant" currently maps to the same default TripAdvisor ordering as newest, documented honestly rather than faked as a distinct sort.

What happens when TripAdvisor changes its structure or blocks the scraper?

The Actor is maintained, and the output schema stays stable — field names and types don't change on your end even when TripAdvisor rotates its internal query IDs or front-end structure.

💬 Your feedback

Found a bug, a missing field, or a property page this Actor doesn't handle correctly? We want to know. Open the Issues tab on this Actor's Apify Store page, or reach out to API-Empire through the Apify Console — reports like this directly shape what gets fixed next.