Tripadvisor Review Scraper
Pricing
$19.99/month + usage
Tripadvisor Review Scraper
Scrape Tripadvisor reviews from any hotel, restaurant, or attraction. This actor extracts reviewer names, ratings, dates, comments, and location details. Perfect for sentiment analysis, competitor tracking, and travel market research.
Pricing
$19.99/month + usage
Rating
5.0
(2)
Developer
Scraper Engine
Maintained by CommunityActor stats
0
Bookmarked
28
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
TripAdvisor Review Scraper — Ratings, Text and Reviewer Profiles
Extract TripAdvisor hotel reviews as structured JSON: review text, star rating, subratings, travel date, reviewer profile, owner responses, photos, and hotel metadata — no HTML parsing required. Point it at a hotel URL, a hotel name, or a keyword and it returns typed, ready-to-use rows. Start a run from the Apify Console or the API and watch reviews land in your dataset in real time.
🏨 What is TripAdvisor Review Scraper?
TripAdvisor Review Scraper is an Apify Actor that pulls reviews from TripAdvisor hotel pages (Hotel_Review-* URLs) and returns each review as a JSON row — text, rating, subratings, trip details, reviewer profile, and the hotel's own metadata. It scopes to hotels only; restaurant and attraction review pages are not supported. No TripAdvisor account or login is required — the Actor reads the same public review pages any visitor sees. It's built for hospitality teams, market researchers, and developers who need review data in a pipeline rather than a browser tab.
🔓 What TripAdvisor review data is publicly available to scrape?
Everything a TripAdvisor visitor can see on a hotel's review page is public — no login is required to read reviews, ratings, or hotel details. What's gated sits behind a TripAdvisor account for writing, not reading.
| Data Category | Publicly Available | Restricted (TripAdvisor account required) |
|---|---|---|
| Review text, title, star rating | Yes | |
| Subratings (Value, Location, Cleanliness, Service, Sleep Quality...) | Yes | |
| Reviewer display name, username, home location, contribution count | Yes | |
| Owner / management responses | Yes | |
| Hotel name, address, geo-coordinates, rating histogram | Yes | |
| Review photos | Yes | |
| Writing a review or voting a review "helpful" | Login required | |
| Reviewer's private contact details (email, phone) | Not published by TripAdvisor at all, with or without login |
TripAdvisor Review Scraper only returns publicly visible data — what any visitor sees. Nothing behind a login wall.
📋 What data can I extract with TripAdvisor Review Scraper?
Every review row carries the fields below, read directly from the row-building code in src/main.py — not just the columns shown in the default dataset view.
📝 Review identity and content fields
| Field | Description |
|---|---|
id | TripAdvisor's internal review ID |
url | Direct link to the review on TripAdvisor |
title | Review headline |
text | Full written review body |
lang | Language code the review was written in |
locationId | TripAdvisor location ID for the hotel |
publishedDate | Date the review was published |
publishedPlatform | Platform the review was submitted from (e.g. OTHER) |
travelDate | Month/year of the reviewer's stay (YYYY-MM) |
tripType | Trip context TripAdvisor assigns (e.g. FAMILY, COUPLES, BUSINESS) |
roomTip | Reviewer's tip for future guests, if one was given (null otherwise) |
⭐ Ratings and engagement fields
| Field | Description |
|---|---|
rating | Overall star rating, 1–5 |
helpfulVotes | Helpful-vote count on the review itself |
subratings | Array of {name, value} category ratings (Value, Rooms, Location, Cleanliness, Service, Sleep Quality — categories vary by hotel type) |
🧩 Nested objects: reviewer, owner response, photos, and hotel info
| Field | Description |
|---|---|
user | Reviewer profile object — userId, name, username, userLocation, avatar, link, and contributions.totalContributions. null when scrapeReviewerInfo is disabled. contributions.helpfulVotes is always null — TripAdvisor's data source does not expose a per-user helpful-votes total, so the Actor ships null rather than a fabricated number |
ownerResponse | Management's reply object — id, text, lang, publishedDate, responder, connectionToSubject. null when the property never responded |
photos | Array of reviewer-submitted photos — id, url, caption, albumId |
placeInfo | Hotel metadata — id, name, rating, numberOfReviews, locationString, latitude, longitude, webUrl, website, address, addressObj (street1, street2, city, state, country, postalcode), ratingHistogram (count1–count5) |
scrapedAt | ISO-8601 UTC timestamp of when the row was collected |
🤖 Add-on: Need additional TripAdvisor data?
This Actor is scoped to hotel reviews. For hotel and place discovery beyond reviews, or for Google-side review data on the same properties, pair it with Google Maps Extractor in the same account. For the accommodation-listing side of a trip (not reviews), Airbnb Rooms URLs Scraper covers Airbnb host portfolios.
🔌 How does TripAdvisor Review Scraper differ from the official TripAdvisor Content API?
TripAdvisor publishes an official Content API, but its Location Reviews endpoint returns only the 5 most recent reviews per location — nowhere near enough for trend analysis or bulk research. TripAdvisor Review Scraper returns up to 10,000 reviews per hotel, in the order you choose, with the full reviewer profile attached.
| Feature | TripAdvisor Content API | TripAdvisor Review Scraper |
|---|---|---|
| Reviews per location | Up to 5 most recent (as documented on the API's ReadMe portal, checked 2026-08-04) | Up to 10,000 per hotel per run |
| Historical / oldest reviews | Not supported — most-recent only | sortOrder: "oldest" available |
| Reviewer profile fields | Not documented in the public reference | Full profile (name, username, location, avatar, contributions) when scrapeReviewerInfo is enabled |
| Rating filtering | Not documented | Filter by star rating or positive/negative/average via reviewRatings |
| Rate limit | Up to 50 calls per second (as documented, checked 2026-08-04) | No published call-rate cap — bound by TripAdvisor's own anti-bot response during a run |
| Setup | TripAdvisor developer account, billing details, and a pay-as-you-go budget | Apify account only — no TripAdvisor account needed |
Use the official Content API if 5 recent reviews per property is enough and you already have TripAdvisor developer credentials. Use TripAdvisor Review Scraper when you need deep review history, reviewer profiles, or rating-filtered datasets without opening a TripAdvisor developer account.
▶️ How to use TripAdvisor Review Scraper
- Open the Actor's page on the Apify Store and click Try for free (or find it in your Apify Console under Actors).
- Add at least one entry to the required
startUrlsfield — a direct hotel URL, a hotel name, or a keyword. - Optionally set
maxComments,sortOrder,reviewsLanguages,reviewRatings, andscrapeReviewerInfo. - Click Start. Reviews are pushed to the dataset one at a time as they're collected, so results appear during the run.
- Download results as JSON, CSV, Excel, XML, or RSS from the dataset toolbar, or pull them with
apify_client/ a webhook once the run finishes.
🏨 How to scale to bulk hotel review extraction
startUrls is an array — add as many hotel URLs, names, or keywords as you want in one run, and the Actor works through them one hotel at a time, applying the same maxComments, sort, language, and rating settings to each. There's no separate "bulk mode" to enable; a longer list is the bulk method.
💡 What can you do with TripAdvisor review data?
- 🏨 Revenue managers monitoring guest sentiment use
ratingandsubratingsto track category-level trends (cleanliness, service, value) across a property over time. - 📊 Market researchers and analysts pull
text,rating,tripType, andtravelDateinto a BI dashboard to compare guest experience by season or traveler segment. - 🕵️ Competitive intelligence teams compare
placeInfo.ratingHistogramandsubratingsacross competitor hotels to benchmark positioning. - 💬 Customer experience teams filter on
ownerResponseto find reviews a property has, or hasn't, responded to. - 🤖 AI engineers feed the
textfield into an LLM summarization or sentiment pipeline, usingplaceInfoandsubratingsas structured grounding context — no scraping or HTML cleanup needed before it reaches the model.
🛡️ How does TripAdvisor Review Scraper handle rate limits and blocking?
TripAdvisor fronts every request with DataDome bot protection, so the Actor makes requests with curl_cffi using Safari TLS impersonation (Chrome impersonation profiles get a 403 challenge from DataDome). It opens one proxy session per hotel — Apify Residential Proxy by default — and reuses that same session for the page fetch and every review request for that hotel, since DataDome ties its session cookie to the IP that received it.
Failed or non-200 requests to TripAdvisor's GraphQL endpoint are retried up to 3 times with a short delay before the Actor gives up on that page and moves on. TripAdvisor's review API only reliably accepts its default SERVER_DETERMINED sort; if it rejects sortOrder: "oldest" or "rating" mid-run, the Actor automatically falls back to the default order and keeps collecting rather than failing the run.
⚠️ TripAdvisor's own pagination caps each request at 10 reviews per page regardless of maxComments, and the Actor enforces a hard safety ceiling of 10,000 reviews per hotel even if you request more.
⬇️ Input
| Parameter | Required | Type | Description | Example Value |
|---|---|---|---|---|
startUrls | Yes | array | Direct TripAdvisor hotel URLs, hotel names, or keywords. Mix and match freely. Restaurant and attraction URLs are not supported — only Hotel_Review pages. | ["https://www.tripadvisor.com/Hotel_Review-g60763-d208453-Reviews-Hilton_New_York_Times_Square-New_York_City_New_York.html"] |
maxComments | No | integer | Maximum reviews to collect per URL. Default 10, minimum 1, maximum 10000. | 100 |
sortOrder | No | string | Order reviews are fetched in. Enum: newest (default), oldest, relevant, rating. relevant currently returns the same order as newest — TripAdvisor does not expose a distinct relevance ranking on this data source. | "newest" |
reviewsLanguages | No | string | Language to filter reviews by. Default "English". Enum: ALL_REVIEW_LANGUAGES plus 29 named languages (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). | "English" |
reviewRatings | No | string | Star-rating filter applied after fetching. Default "ALL_REVIEW_RATINGS". Enum: ALL_REVIEW_RATINGS, POSITIVE (4–5★), NEGATIVE (1–2★), AVERAGE (3★), or a specific value "5", "4", "3", "2", "1". | "ALL_REVIEW_RATINGS" |
scrapeReviewerInfo | No | boolean | Include the full reviewer profile object. Default true. When false, the user field is null in every row. | true |
proxyConfiguration | No | object | Apify Proxy configuration. TripAdvisor blocks non-residential traffic quickly, so this defaults to Residential when 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","luxury hotel New York"],"maxComments": 200,"sortOrder": "newest","reviewsLanguages": "English","reviewRatings": "ALL_REVIEW_RATINGS","scrapeReviewerInfo": true,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
⬆️ Output
Each collected review is pushed to the Apify dataset as one typed JSON row, with a consistent schema across runs. Export as JSON, CSV, Excel, XML, or RSS from the dataset toolbar, or read it via API/apify_client. The Actor is billed pay-per-event on the row_result event — one charge per review row actually pushed to the dataset. Reviews filtered out post-fetch by reviewRatings, or rows that fail to parse, are never pushed and never charged.
Example output
{"id": "1040504451","url": "https://www.tripadvisor.com/ShowUserReviews-g60763-d208453-r1040504451-Hilton_New_York_Times_Square-New_York_City_New_York.html","title": "Great stay near Times Square","lang": "en","locationId": "208453","publishedDate": "2026-07-27","publishedPlatform": "OTHER","rating": 5,"helpfulVotes": 0,"text": "We stayed for two weeks. Great location, close to everything, staff were excellent...","roomTip": null,"travelDate": "2026-07","tripType": "FAMILY","user": {"userId": "4381D233A5C57ADAF67693B272BEFE70","name": "Dimitris T","contributions": {"totalContributions": 2,"helpfulVotes": null},"username": "margaretmN8866NJ","userLocation": "Thessaloniki, Greece","avatar": "https://dynamic-media-cdn.tripadvisor.com/media/photo-o/1a/f6/de/5a/default-avatar-2020-36.jpg?w=100&h=100&s=1","link": "www.tripadvisor.com/Profile/margaretmN8866NJ"},"ownerResponse": null,"subratings": [{ "name": "Value", "value": 5 },{ "name": "Rooms", "value": 5 },{ "name": "Location", "value": 5 },{ "name": "Cleanliness", "value": 5 },{ "name": "Service", "value": 5 },{ "name": "Sleep Quality", "value": 5 }],"photos": [],"placeInfo": {"id": "208453","name": "Hilton New York Times Square","rating": 4.3,"numberOfReviews": 7879,"locationString": "New York City, New York","latitude": 40.75665,"longitude": -73.988815,"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/nyctshh-hilton-times-square/","address": "234 West 42nd Street, New York City, NY 10036","addressObj": {"street1": "234 West 42nd Street","street2": "","city": "New York City","state": "NY","country": "United States","postalcode": "10036"},"ratingHistogram": {"count1": 267, "count2": 290, "count3": 704, "count4": 2568, "count5": 5064}},"scrapedAt": "2026-08-04T09:15:00.000000+00:00"}
⚙️ How does it work?
TripAdvisor Review Scraper opens a proxy session per hotel and fetches the hotel's review page directly, which seeds the cookies TripAdvisor's anti-bot system (DataDome) expects. It then reads reviews through TripAdvisor's own paginated GraphQL endpoint, 10 at a time, resolving hotel names and keywords to a hotel page first when you don't provide a direct URL. Only publicly visible review and hotel data is returned — nothing behind a login. Because the output schema is fixed by the Actor rather than by TripAdvisor's page markup, the field names and structure stay stable even when TripAdvisor changes its front-end.
🔗 Integrations
TripAdvisor Review Scraper runs like any other Apify Actor, so it works with the tools you already use to run Actors.
Calling TripAdvisor Review Scraper programmatically
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_API_TOKEN>")run = client.actor("tripadvisor-review-scraper-pay-per-events").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,"sortOrder": "newest",})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item)
Works in Go, Ruby, Node.js, cURL — any language that can make an HTTP request against the Apify API.
No-code tools (n8n, Make)
In n8n, use the official Apify node (or the HTTP Request node against the Apify API) to start a run and read back the dataset. In Make, the Apify app module can run the Actor and pass results into a subsequent scenario step, the same way it would for any other Apify Actor.
⚖️ Is it legal to scrape TripAdvisor reviews?
Scraping publicly available data — data any visitor can see without logging in — is generally lawful, and that is what TripAdvisor Review Scraper does. It returns only what's already visible on a hotel's public review page: no login, no bypassing an authentication wall.
Reviewer profile fields (name, username, location, avatar) returned when scrapeReviewerInfo is enabled are personal data, so GDPR (EU/UK) and CCPA (California) considerations apply to how you store, use, and retain that data — not to whether you may access the public page itself. Set scrapeReviewerInfo to false if you only need review text and ratings and want to avoid collecting personal data at all. Consult legal counsel if your use case involves bulk storage of personal data.
❓ Frequently asked questions
What TripAdvisor review fields does TripAdvisor Review Scraper return?
The top fields are text, rating, subratings, title, and publishedDate, plus the full reviewer profile in user and hotel metadata in placeInfo. See What data can I extract for every field.
Does TripAdvisor Review Scraper require a TripAdvisor account or login?
No. The Actor reads public hotel review pages directly; no TripAdvisor account, login, or API key is needed.
How many reviews can I extract in one run?
Up to 10,000 per hotel, set with maxComments (minimum 1, maximum 10,000). The Actor auto-paginates through TripAdvisor's 10-reviews-per-page API until it hits that number, the hotel's total review count, or its own 10,000-review safety cap.
What happens if a hotel name or keyword doesn't resolve to a hotel?
startUrls accepts hotel names and keywords in addition to direct URLs. When you don't supply a direct Hotel_Review URL, the Actor resolves it via a Google search (TripAdvisor's own on-site search returns a bot challenge). If no matching hotel is found, that entry is skipped and logged with a warning — direct hotel URLs give the most reliable results.
Can I scrape multiple TripAdvisor hotels at once?
Yes — startUrls is an array. Add as many hotel URLs, names, or keywords as you want and the Actor collects reviews for each one in the same run, applying the same settings to all of them.
Does TripAdvisor Review Scraper work with Claude, ChatGPT, and other AI agent tools?
It's callable as a standard HTTP endpoint through the Apify API by any agent framework that can make HTTP requests — see the Integrations section above for the apify_client example.
How does TripAdvisor Review Scraper compare to other TripAdvisor review scrapers?
Compare on documented capability rather than marketing copy: check what fields each scraper's own listing documents for the user, subratings, and placeInfo objects, and whether the listing states a review cap per hotel — this Actor documents a 10,000-review cap and a full reviewer profile object.
Does TripAdvisor Review Scraper return data in a format LLMs can use directly?
Yes. Every row is typed, normalized JSON with consistent field names across runs — no HTML, no selectors to write. Pass text and subratings straight into an LLM prompt, index them into a vector store, or feed them to an agent tool.
What happens when TripAdvisor changes its layout or anti-bot system?
The Actor's output schema is fixed by its own code, not by TripAdvisor's page markup, so field names stay stable even after a TripAdvisor front-end change. If TripAdvisor's persisted-query IDs rotate in a way the Actor can't yet resolve, the run logs a warning and may return fewer or no reviews for that hotel rather than silently returning wrong data.
Can I use TripAdvisor Review Scraper without managing proxies or browser infrastructure?
Yes. The Actor handles proxy sessions (Residential by default), TLS fingerprinting, and request retries itself — you don't configure any of that beyond the optional proxyConfiguration field.
Which fields work best for AI training data and RAG indexing?
For RAG, index text alongside title, rating, and placeInfo.name for grounding context. For structured training data, rating, subratings, tripType, and travelDate are the most consistently populated fields across records, all returned as typed primitives (strings, numbers, or nested objects) rather than free-form HTML.
🔗 Related scrapers
| Scraper Name | What it extracts |
|---|---|
| Google Maps Extractor | Places, business listings, and Google-side reviews for the same properties |
| Airbnb Rooms URLs Scraper | Airbnb host portfolios and co-host listing URLs |
💬 Your feedback
Found a bug, or need a field this Actor doesn't return yet? Leave a message in the Actor's Issues tab on the Apify Store, or reach out through Apify Console support — reports like these are how this scraper keeps working as TripAdvisor changes.