Tripadvisor Reviews Scraper - Hotels, Restaurants, Attractions avatar

Tripadvisor Reviews Scraper - Hotels, Restaurants, Attractions

Pricing

from $0.99 / 1,000 reviews

Go to Apify Store
Tripadvisor Reviews Scraper - Hotels, Restaurants, Attractions

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

ClearPath

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

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.

Tripadvisor Reviews Scraper: rating, review text, travel dates, reviewer profile, subratings and owner replies from hotels, restaurants and attractions as structured JSON

โšก 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
ย Booking.com Reviews
Guest reviews and score breakdown
ย Google Maps
Place reviews, ratings and details
ย Tripadvisor Reviews
โžค You are here
ย Yelp Reviews
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

ParameterTypeDefaultDescription
placesarrayrequiredUp 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).
maxReviewsPerPlaceinteger100Maximum reviews for each place. Use 0 for all available reviews.
ratingstringallReturn reviews with one selected rating from 1 to 5, or all ratings.
reviewLanguagestringall languagesReturn reviews written in one supported language.
includeSummarybooleantrueAdd one free place-level record to the separate summary dataset.
languagestringenLanguage 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

FieldTypeDescription
locationIdintegerStable Tripadvisor identifier for the reviewed place.
placeNamestring or nullPublic name of the hotel, restaurant, or attraction.
placeKindstring or nullNormalized type: hotel, restaurant, attraction, or geo.
placeUrlstring or nullCanonical Tripadvisor URL for the place.
reviewIdstring or nullStable identifier for deduplication and incremental collection.
ratinginteger or nullReviewer's overall rating from 1 to 5.
titlestring or nullReview headline as published.
textstring or nullFull public review text.
publishedDatestring or nullPublication timestamp provided by Tripadvisor.
publishedPlatformstring or nullPlatform label attached to the review.
travelDatestring or nullMonth of the stay or visit when supplied.
languagestring or nullLanguage code associated with the review.
helpfulVotesinteger or nullNumber of helpful votes visible for the review.
machineTranslatedbooleanWhether the returned text is marked as machine translated.
subratingsarrayNamed category scores such as rooms, service, value, or location.
reviewUrlstring or nullDirect URL for the review.
ownerResponseobject or nullPublic management reply, responder, role, date, and language.
userobjectPublic reviewer profile and contribution counters where available.
scrapedAtstringUTC 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

FieldTypeDescription
locationIdintegerJoin key shared with every review row.
namestring or nullPlace name.
kindstring or nullHotel, restaurant, attraction, or geographic place.
placeUrlstring or nullCanonical Tripadvisor place URL.
ratingnumber or nullCurrent overall place rating.
rankingstring or nullPublic category and destination ranking.
hotelClassnumber or nullHotel class where Tripadvisor publishes it.
priceLevelstring or nullPublic price-band label.
priceRangestring or nullPublished price range where available.
ratingHistogramobject or nullCounts for each rating from one through five.
cuisinearrayCuisine and dietary labels for restaurants.
amenitiesarrayPublicly listed place amenities.
awardsarrayPublic award names.
addressstring or nullFull formatted address.
city, state, countrystring or nullGeographic address components.
postalCodestring or nullPostal code.
latitude, longitudenumber or nullPlace coordinates.
phonestring or nullPublic phone number.
websitestring or nullPublic website URL.
reviewsCountinteger or nullTotal reviews shown for the place.
reviewsMatchingFiltersinteger or nullReviews matching the selected rating and language.
reviewsCapturedintegerReviews delivered during this run.
reviewsPartialbooleanWhether some expected reviews could not be collected.
matchedFromstring or nullWhether the place was resolved from a URL or name.
sourceInputstring or nullOriginal value supplied for the place.
otherMatchesarrayAlternative candidates returned for an ambiguous name.
scrapedAtstringUTC 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 place
  • reviewsMatchingFilters: reviews that match the selected rating and language
  • reviewsCaptured: 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:

  1. Store place summaries by locationId.
  2. Store reviews by reviewId, with locationId as the foreign key.
  3. Upsert place summaries on each scheduled run.
  4. Insert only unseen reviews, then retain the latest scrapedAt value.

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 planPrice per reviewPrice 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

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.