Tripadvisor Reviews Scraper - Hotels, Restaurants, Attractions
Pricing
from $0.99 / 1,000 reviews
Tripadvisor Reviews Scraper - Hotels, Restaurants, Attractions
Extract every review from Tripadvisor hotels, restaurants and attractions: rating, full text, travel dates, reviewer profile, subratings and owner replies. Filter by rating or language, add a place summary with ranking and rating breakdown. Export to JSON, CSV or Excel.
Pricing
from $0.99 / 1,000 reviews
Rating
0.0
(0)
Developer
ClearPath
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Tripadvisor Reviews Scraper | Hotels, Restaurants & Attractions (2026)
One structured row per Tripadvisor review, plus a separate place summary: 5,000 reviews in under 30 seconds.
โก Direct data collection, no headless browser: every review at full depth (all 5,396 on The Ritz, all 1,143 on Ostra) in seconds, with a separate place summary included free.
Collect public Tripadvisor reviews from hotels, restaurants, and attractions by URL or place name. Each result includes the rating, full text, dates, reviewer profile, helpful votes, subratings, and owner response where available.
| Clearpath Hotel Review Suite ย ย โขย ย Structured reviews from major travel platforms | |||
|
Guest reviews and score breakdown |
Place reviews, ratings and details |
โค You are here |
Local business reviews and ratings |
Copy to your AI assistant
clearpath/tripadvisor-reviews-scraper on Apify. Every public Tripadvisor hotel, restaurant and attraction review: rating, text, reviewer, subratings, owner replies. Call ApifyClient("TOKEN").actor("clearpath/tripadvisor-reviews-scraper").call(run_input={...}), then client.dataset(run["defaultDatasetId"]).list_items().items. Provide places as Tripadvisor URLs or place names. Full spec: GET https://api.apify.com/v2/acts/clearpath~tripadvisor-reviews-scraper/builds/default (Bearer TOKEN) โ inputSchema, actorDefinition.storages.dataset, readme. Token: https://console.apify.com/account/integrations
Key Features
- Complete review records: rating, title, full text, publish date, travel date, language, helpful votes, reviewer profile, and review URL
- Hotels, restaurants, and attractions: mix up to 200 Tripadvisor URLs or place names in one run
- Focused review collection: filter by star rating or review language, then set a limit per place or collect all available reviews
- Free place summaries: overall rating, ranking, rating histogram, address, coordinates, price level, cuisine, amenities, and review totals in a separate dataset
How to Scrape Tripadvisor Reviews
Basic: reviews from one hotel
{"places": ["https://www.tripadvisor.com/Hotel_Review-g186338-d187591-Reviews-The_Ritz_London_Hotel-London_England.html"],"maxReviewsPerPlace": 100}
Find a place by name
Add the city or region to make the match unambiguous.
{"places": ["The Ritz London","Ostra Boston"],"maxReviewsPerPlace": 250,"includeSummary": true}
Collect low-rating reviews in English
{"places": ["https://www.tripadvisor.com/Hotel_Review-g60763-d675616-Reviews-The_Plaza_New_York-New_York_City_New_York.html"],"maxReviewsPerPlace": 1000,"rating": "1","reviewLanguage": "en"}
Set maxReviewsPerPlace to 0 to collect every available review that matches your filters.
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
places | array | required | Up to 200 Tripadvisor place URLs or names. Hotels, restaurants, and attractions can be mixed. Any Tripadvisor country domain works (.com, .co.uk, .de, .fr, and so on). |
maxReviewsPerPlace | integer | 100 | Maximum reviews for each place. Use 0 for all available reviews. |
rating | string | all | Return reviews with one selected rating from 1 to 5, or all ratings. |
reviewLanguage | string | all languages | Return reviews written in one supported language. |
includeSummary | boolean | true | Add one free place-level record to the separate summary dataset. |
language | string | en | Language used for place-summary labels. Review text stays in its published language. |
The commonly used startUrls field is also accepted when you call the Actor programmatically.
What Data Can You Extract from Tripadvisor?
The default dataset contains one item per review. The locationId field joins every review to its place summary.
Review fields
| Field | Type | Description |
|---|---|---|
locationId | integer | Stable Tripadvisor identifier for the reviewed place. |
placeName | string or null | Public name of the hotel, restaurant, or attraction. |
placeKind | string or null | Normalized type: hotel, restaurant, attraction, or geo. |
placeUrl | string or null | Canonical Tripadvisor URL for the place. |
reviewId | string or null | Stable identifier for deduplication and incremental collection. |
rating | integer or null | Reviewer's overall rating from 1 to 5. |
title | string or null | Review headline as published. |
text | string or null | Full public review text. |
publishedDate | string or null | Publication timestamp provided by Tripadvisor. |
publishedPlatform | string or null | Platform label attached to the review. |
travelDate | string or null | Month of the stay or visit when supplied. |
language | string or null | Language code associated with the review. |
helpfulVotes | integer or null | Number of helpful votes visible for the review. |
machineTranslated | boolean | Whether the returned text is marked as machine translated. |
subratings | array | Named category scores such as rooms, service, value, or location. |
reviewUrl | string or null | Direct URL for the review. |
ownerResponse | object or null | Public management reply, responder, role, date, and language. |
user | object | Public reviewer profile and contribution counters where available. |
scrapedAt | string | UTC timestamp for this collection. |
The nested user.contributions object separates hotel, restaurant, and attraction review totals. This is useful for reviewer-history analysis without flattening unrelated counts into one number.
Review output example
{"locationId": 187591,"placeName": "The Ritz London Hotel","placeKind": "hotel","placeUrl": "https://www.tripadvisor.com/Hotel_Review-g186338-d187591-Reviews-The_Ritz_London_Hotel-London_England.html","reviewId": "1073664821","rating": 5,"title": "A memorable stay","text": "The room was quiet, the service was attentive, and breakfast was excellent.","publishedDate": "2026-08-17T10:10:57-04:00","publishedPlatform": "Desktop","travelDate": "2026-05","language": "en","helpfulVotes": 3,"machineTranslated": false,"subratings": [{"name": "Rooms","value": 5},{"name": "Service","value": 5},{"name": "Location","value": 5}],"reviewUrl": "https://www.tripadvisor.com/ShowUserReviews-g186338-d187591-r1073664821-The_Ritz_London_Hotel-London_England.html#review1073664821","ownerResponse": {"text": "Thank you for staying with us. We hope to welcome you back soon.","title": "Owner Response","responder": "Hotel Manager","connection": "General Manager","publishedDate": "2026-08-18T05:46:33-04:00","language": "en"},"user": {"userId": "traveler-492831","username": "london_guest","displayName": "Alex","location": "Manchester, United Kingdom","avatar": "https://media-cdn.tripadvisor.com/media/photo-l/avatar.jpg","profileUrl": "https://www.tripadvisor.com/Profile/london_guest","joinedDate": "2018-04-11T09:15:00-0400","contributions": {"reviews": 45,"hotelReviews": 14,"restaurantReviews": 15,"attractionReviews": 16,"photos": 8,"helpfulVotes": 21}},"scrapedAt": "2026-08-31T08:06:31.819712+00:00"}
Fields that Tripadvisor does not publish for a review are returned as null or an empty list. This keeps the structure predictable across places.
Place summary output
When includeSummary is enabled, the run creates a separate summary dataset with one row per resolved place.
Summary fields
| Field | Type | Description |
|---|---|---|
locationId | integer | Join key shared with every review row. |
name | string or null | Place name. |
kind | string or null | Hotel, restaurant, attraction, or geographic place. |
placeUrl | string or null | Canonical Tripadvisor place URL. |
rating | number or null | Current overall place rating. |
ranking | string or null | Public category and destination ranking. |
hotelClass | number or null | Hotel class where Tripadvisor publishes it. |
priceLevel | string or null | Public price-band label. |
priceRange | string or null | Published price range where available. |
ratingHistogram | object or null | Counts for each rating from one through five. |
cuisine | array | Cuisine and dietary labels for restaurants. |
amenities | array | Publicly listed place amenities. |
awards | array | Public award names. |
address | string or null | Full formatted address. |
city, state, country | string or null | Geographic address components. |
postalCode | string or null | Postal code. |
latitude, longitude | number or null | Place coordinates. |
phone | string or null | Public phone number. |
website | string or null | Public website URL. |
reviewsCount | integer or null | Total reviews shown for the place. |
reviewsMatchingFilters | integer or null | Reviews matching the selected rating and language. |
reviewsCaptured | integer | Reviews delivered during this run. |
reviewsPartial | boolean | Whether some expected reviews could not be collected. |
matchedFrom | string or null | Whether the place was resolved from a URL or name. |
sourceInput | string or null | Original value supplied for the place. |
otherMatches | array | Alternative candidates returned for an ambiguous name. |
scrapedAt | string | UTC timestamp for this collection. |
{"locationId": 5572598,"name": "Ostra","kind": "restaurant","placeUrl": "https://www.tripadvisor.com/Restaurant_Review-g60745-d5572598-Reviews-Ostra-Boston_Massachusetts.html","rating": 4.6,"ranking": "#11 of 3,102 places to eat in Boston","hotelClass": null,"priceLevel": "$$$$","priceRange": null,"ratingHistogram": {"rating1": 11,"rating2": 23,"rating3": 75,"rating4": 212,"rating5": 822},"cuisine": ["Italian","Seafood","Mediterranean"],"amenities": [],"awards": [],"address": "1 Charles St S, Boston, MA 02116","city": "Boston","state": "MA","country": "United States","postalCode": "02116","latitude": 42.351173,"longitude": -71.06732,"phone": "+1 617-421-1200","website": "https://ostraboston.com/","reviewsCount": 1143,"reviewsMatchingFilters": 1143,"reviewsCaptured": 250,"reviewsPartial": false,"matchedFrom": "url","sourceInput": "https://www.tripadvisor.com/Restaurant_Review-g60745-d5572598-Reviews-Ostra-Boston.html","otherMatches": [],"scrapedAt": "2026-08-31T08:06:31.899339+00:00"}
reviewsCount is the place's total review count. reviewsMatchingFilters is the number matching your language and rating filters. reviewsCaptured is the number delivered in this run.
Advanced Tripadvisor Review Collection
Ready-made configurations for reputation monitoring, complaint analysis, portfolio comparisons, and complete review archives.
Monitor several hotels with a consistent sample
{"places": ["The Ritz London","The Savoy London","Claridge's London"],"maxReviewsPerPlace": 500,"reviewLanguage": "en","includeSummary": true}
Build a complaint dataset
Run once for one-star reviews and again for two-star reviews. Keeping each rating in its own dataset makes comparisons simpler.
{"places": ["Ostra Boston","Mamma Maria Boston"],"maxReviewsPerPlace": 0,"rating": "1","reviewLanguage": "en"}
Collect every available review
{"places": ["https://www.tripadvisor.com/Attraction_Review-g187147-d188151-Reviews-Eiffel_Tower-Paris_Ile_de_France.html"],"maxReviewsPerPlace": 0,"includeSummary": true}
For large runs, results appear progressively in the dataset. Completed batches remain available if a later place cannot be collected.
Matching, Completeness, and Repeat Runs
Prefer URLs for exact identity
A direct place URL identifies one Tripadvisor property. Use URLs for production monitoring, franchise locations, similarly named hotels, and any workflow where a wrong match is more costly than preparing the input list.
Place-name input is convenient during exploration. Include the city, country, neighborhood, or landmark when the name is common. The summary's matchedFrom, sourceInput, and otherMatches fields let you audit how each place was selected.
Understand the three review counts
The summary deliberately keeps three different counters:
reviewsCount: all reviews currently shown for the placereviewsMatchingFilters: reviews that match the selected rating and languagereviewsCaptured: rows delivered after applying your requested limit and run allowance
These values should not be treated as interchangeable. For example, a hotel may have 8,000 total reviews, 320 one-star English reviews, and 100 captured rows because maxReviewsPerPlace was set to 100.
Build incremental collections
Use reviewId as the durable deduplication key when you run the Actor on a schedule. Save previously seen IDs, append new rows, and update the place summary independently. scrapedAt tells you when a row entered your collection; publishedDate tells you when the reviewer posted it.
Tripadvisor review ordering and totals can change as new feedback is published or existing content is moderated. Do not rely on dataset position as an identifier. Use reviewId and locationId instead.
Detect incomplete collections
Check reviewsPartial in every place summary. A value of false means the requested collection completed without a known gap. A value of true means the delivered reviews remain usable, but the place should be retried before you treat the set as complete.
The run isolates place failures. If one input cannot be collected, successful places remain in storage. The final OUTPUT record reports delivered reviews, resolved places, failed places, budget status, and the summary dataset identifier.
Working with Tripadvisor Review Exports
Use JSON when you need every nested field. CSV and Excel are convenient for rating analysis, but nested owner responses, reviewer contributions, and subratings may be serialized into cells.
For a relational database, a practical model is:
- Store place summaries by
locationId. - Store reviews by
reviewId, withlocationIdas the foreign key. - Upsert place summaries on each scheduled run.
- Insert only unseen reviews, then retain the latest
scrapedAtvalue.
For text analysis, keep language, machineTranslated, rating, and travelDate beside the review text. These fields help separate language effects, score bands, and the date of the actual visit from the later publication date.
For owner-response analysis, treat ownerResponse as optional. A missing object means no public response was available for that review at collection time. When present, compare ownerResponse.publishedDate with the review's publishedDate to measure response time.
Pricing: Pay Per Event
The primary charge is per review. Higher Apify subscription tiers receive lower rates.
| Apify plan | Price per review | Price per 1,000 reviews |
|---|---|---|
| Free | $0.00199 | $1.99 |
| Bronze | $0.00199 | $1.99 |
| Silver, Gold, Platinum, Diamond | $0.00099 | $0.99 |
Each run also has a $0.00005 Actor start charge. Place-summary rows are included and are not charged as reviews.
You pay only for the reviews you collect. Place-summary rows are included at no extra charge, and filtering by rating or language collects fewer reviews, so it costs less.
FAQ
What is Tripadvisor?
Tripadvisor is a travel guidance platform with public reviews for accommodation, restaurants, attractions, and experiences. This Actor focuses on public review and place-summary data for hotels, restaurants, and attractions.
Does Tripadvisor have an API, and why use this Actor instead?
Tripadvisor offers an official Content API, but access is approval-gated, rate-limited, and returns only a few of the most recent reviews per place with a limited set of fields. This Actor needs no application, collects every review at full depth, and returns the complete field set (reviewer profile and contribution counts, per-aspect subratings, owner responses, travel dates), which makes it the practical choice for building a complete Tripadvisor review dataset.
Do I need a Tripadvisor account or cookies?
No account details or cookies are accepted as input. The Actor collects publicly visible review data from the place you provide.
Can I use a place name instead of a URL?
Yes. Add the city or region to improve the match, such as Ostra Boston. A direct Tripadvisor URL is best when several places share the same name.
How many reviews can I collect?
Set maxReviewsPerPlace to any positive limit, or use 0 for all available reviews. The limit applies separately to each place, while your run's charge limit and free-plan allowance still apply globally.
Can I filter reviews by rating?
Yes. Choose one rating from 1 to 5. Run separate collections when you need more than one selected rating but not the full set.
Can I filter reviews by language?
Yes. Choose one of the supported language codes or leave reviewLanguage empty for every available language. Review text stays in the language published for that result.
How fresh is the data?
Each run collects the reviews and place details available at run time. The scrapedAt timestamp records when each result was collected.
What happens when a place name is ambiguous?
The first relevant hotel, restaurant, or attraction is used. The summary row includes otherMatches so you can inspect alternative matches. Use a direct URL when exact identity matters.
Does the dataset preserve input order?
No order is promised when several places are processed together. Results become available as each place completes work. Use locationId, placeName, and sourceInput to group records instead of relying on row position.
What is the difference between the reviews and summary datasets?
The default dataset contains one row per review. The separate summary dataset contains one row per place with ratings, ranking, location, rating distribution, and collection counts. Join them with locationId.
How do I export the data?
Use the run's Storage tab to download JSON, CSV, Excel, XML, or HTML. JSON preserves nested reviewer, owner-response, subrating, and histogram fields most accurately.
Can I combine these results with Booking.com or Yelp reviews?
Yes. Use Booking.com Reviews Scraper for accommodation reviews and Yelp Reviews Scraper for local-business reviews. Their source-specific datasets can be normalized into one downstream schema.
How should I update an existing review database?
Use reviewId to ignore rows you already hold and locationId to update the matching place summary. Keep the newest place-level rating and histogram, since those values change as reviews are added or removed.
What does reviewsPartial mean?
It is a completeness flag for one place. When it is true, the run kept the reviews it successfully collected but detected a gap. Retry that place before using the dataset for a completeness-sensitive archive.
Is it legal to scrape Tripadvisor reviews?
The Actor extracts publicly available data. Reviewer names, profile links, locations, and contribution counts may be personal data. You are responsible for Tripadvisor's terms and applicable privacy law, including GDPR and CCPA.
Support
- Bugs: Issues tab
- Features: Email or issues
- Email: max@mapa.slmail.me
Legal Compliance
Extracts publicly available data. Users must comply with Tripadvisor terms and applicable data protection regulations, including GDPR and CCPA.
Collect Tripadvisor reviews and place summaries in analysis-ready datasets.
