Tripadvisor Reviews Scraper
Extract Tripadvisor reviews for hotels, restaurants and attractions: rating, full text, reviewer, hometown, trip type, owner response and review URL.
How it works
- 1Open it on Apify
Hit Run on Apify — it opens the tool in the cloud, no install.
- 2Set the inputs
Adjust
placeUrls,maxReviewsPerPlace,maxPlaces(sensible defaults are pre-filled). - 3Click Run
The tool runs on Apify’s cloud and collects the data for you.
- 4Export the results
Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.
Pricing
$0.00025 per review = $0.25 per 1,000
| You are charged for | When | Price |
|---|---|---|
| Review | One Tripadvisor review stored in the dataset. Sample rows and diagnostic rows are never charged. | $0.00025 |
| Actor Start | Charged when the Actor starts running. Number of events charged depends on Actor memory (one event per GB, minimum one event). | $0.001 |
Pay-per-event pricing: you are billed per result, not per subscription — a run that returns nothing costs nothing beyond the start fee. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-08-10, and they are what you are actually charged.
Inputs
| Field | What it does | Type |
|---|---|---|
placeUrls | Tripadvisor hotel, restaurant or attraction review URLs. A bare slug such as Hotel_Review-g60763-d671150-Reviews-The_Empire_Hotel-New_York_City_New_York.html also works. Country domains (.co.uk, .fr, ...) are accepted. Leave empty to get one free, clearly labelled sample row. | array |
maxReviewsPerPlace | How many reviews to return for each place, newest first. Tripadvisor serves 10 per page, so this rounds up to the next page. Only stored review rows are charged. | integer |
maxPlaces | Safety bound on how many of the supplied URLs are processed in one run. | integer |
What you get
A structured dataset — each result includes fields like:
placeNameratingtitlereviewTextreviewerNamereviewerHometownpublishedAttripTypereviewUrlExport every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.
Related tools in Reviews & Reputation Data
Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.
Booking.com Reviews Scraper
Extract public Booking.com guest reviews: rating, review title, positive and negative text, reviewer name and country.
Google Play Reviews Scraper
Google Play reviews scraper at $0.09 per 1,000, flat at every volume. Unlimited reviews, any country or language, star and date filters. No API key.
2GIS Reviews Scraper
Extract 2GIS reviews by place URL or city search: star rating, review text, author, date, photos, owner replies and aggregate rating. No 2GIS API key.
Yelp Scraper
Scrape Yelp businesses and reviews via Yelp's official Fusion API: rating, review count, price, phone, address, GPS and review text.
Glassdoor Company Reviews Scraper
Scrape Glassdoor company reviews and ratings by company name or URL. Get pros, cons, recommend rate and CEO approval as rows for analysis.
Google Reviews Monitor — Multi-Location Alerts & Reports
Track Google Maps reviews across all your locations. Get only-new deltas, negative-review and rating-drop alerts to Slack, plus AI summaries and reply drafts.
Where this tool sits
- Categories
- Reviews & Reputation Data Travel, Hotels & Events
- Platforms
- Tripadvisor
Tripadvisor Reviews Scraper
Give it a Tripadvisor hotel, restaurant or attraction URL and it returns the public reviews as structured rows: star rating, title, full review text, reviewer name and hometown, trip date and trip type, the owner's reply, and a direct link to the review on Tripadvisor.
No browser and no residential proxy, so it is fast and cheap. Plain HTTP requests, about 10-15 reviews per request.
$0.25 per 1,000 reviews ($0.00025 each), plus $0.001 each time a run starts. That is the cheapest Tripadvisor review scraping on the market.
What you get
One row per review. The coverage column below is measured on a single real run of 100 reviews pulled from four places at once - The Empire Hotel in New York, a restaurant, the Empire State Building, and a London hotel. These are counts from that run, not estimates.
| Field | Coverage | Example |
|---|---|---|
reviewId | 100% | 1072411899 |
reviewUrl | 100% | https://www.tripadvisor.com/ShowUserReviews-g60763-d671150-r1072411899-... |
rating | 100% | 4 |
title | 100% | Clean but Needs Remodeling |
reviewText | 100% | 365 characters on average |
publishedAt | 100% | 2026-08-10 |
createdAt | 100% | 2026-08-09 |
tripDate | 99% | 2026-08-31 |
tripType | 99% | FAMILY, COUPLES, SOLO, FRIENDS, BUSINESS |
language | 100% | en, fr, it, es |
helpfulVotes | 100% present, 0 on most reviews | 2 |
reviewerName | 100% | amahmoud |
reviewerId | 100% | 51BDB06A78983782F6571787209484D5 |
reviewerProfileUrl | 100% | https://www.tripadvisor.com/Profile/amahmoud |
reviewerContributions | 100% | 65 |
reviewerHometown | 42% | Seattle, Washington |
ownerResponseText | 53% | the management reply, full text |
ownerResponseAt | 53% | 2026-08-08 |
placeId | 100% | 671150 |
placeName | 100% | The Empire Hotel |
placeUrl | 100% | the URL you supplied |
placeType | 100% | ACCOMMODATION, EATERY, ATTRACTION, ACTIVITY |
placeRating | 100% | 3.7 |
placeReviewCount | 100% | 9795 |
scrapedAt | 100% | ISO timestamp |
reviewerHometown and ownerResponseText are below 100% because Tripadvisor genuinely does not have them for every review - reviewers can leave the hometown blank, and most reviews get no management reply. Every other column was populated on all 100 rows.
Sample output row
{
"reviewId": "1072411899",
"reviewUrl": "https://www.tripadvisor.com/ShowUserReviews-g60763-d671150-r1072411899-The_Empire_Hotel-New_York_City_New_York.html",
"rating": 4,
"title": "Clean but Needs Remodeling",
"reviewText": "Stayed four nights in a king room on the 9th floor. The bed was comfortable and the staff at the front desk were genuinely helpful with luggage and restaurant bookings...",
"publishedAt": "2026-08-10",
"createdAt": "2026-08-09",
"tripDate": "2026-07-31",
"tripType": "COUPLES",
"language": "en",
"helpfulVotes": 2,
"reviewerName": "amahmoud",
"reviewerId": "51BDB06A78983782F6571787209484D5",
"reviewerProfileUrl": "https://www.tripadvisor.com/Profile/amahmoud",
"reviewerContributions": 65,
"reviewerHometown": "Seattle, Washington",
"ownerResponseText": "Thank you for taking the time to share your feedback. We are glad the team looked after you...",
"ownerResponseAt": "2026-08-08",
"placeId": "671150",
"placeName": "The Empire Hotel",
"placeUrl": "https://www.tripadvisor.com/Hotel_Review-g60763-d671150-Reviews-The_Empire_Hotel-New_York_City_New_York.html",
"placeType": "ACCOMMODATION",
"placeRating": 3.7,
"placeReviewCount": 9795,
"scrapedAt": "2026-08-10T04:22:11.903Z"
}
Every row is flat - no nested objects, no arrays - so the dataset exports cleanly to CSV, Excel, JSON or XML straight from the run's Storage tab, or through the Apify API and any of the client libraries.
Input
{
"placeUrls": [
"https://www.tripadvisor.com/Hotel_Review-g60763-d671150-Reviews-The_Empire_Hotel-New_York_City_New_York.html"
],
"maxReviewsPerPlace": 40
}
placeUrls- hotel, restaurant or attraction review URLs. A bare slug works too. Country
domains (.co.uk, .fr, .it, ...) work and return that domain's review set.
maxReviewsPerPlace- newest first. Up to 5000.maxPlaces- safety bound on how many URLs one run processes.proxyConfiguration- optional. Leave it empty; the run uses Apify's shared rotating datacenter
addresses, which cost nothing on top of the run. If you supply proxyUrls, your own servers are used exactly as given. Metered proxy groups are not offered and a request for one is replaced, with a notice on the output row, so a run can never quietly bill per gigabyte.
Input field names follow the conventions used across similar Actors, so switching is usually a drop-in change - point placeUrls at your existing list of place URLs and set the per-place limit.
Leave placeUrls empty and you get one clearly labelled sample row, free. A run with empty input was measured charging exactly zero review events.
Pricing
$0.25 per 1,000 reviews, plus a $0.001 run start fee. You are charged once per review row actually stored - a 100-review run was measured charging exactly 100 events. Sample rows and diagnostic rows are never charged, and a bad URL costs you nothing.
| Reviews in a run | Review cost | Start fee | Total |
|---|---|---|---|
| 100 | $0.025 | $0.001 | $0.026 |
| 1,000 | $0.25 | $0.001 | $0.251 |
| 10,000 | $2.50 | $0.001 | $2.501 |
| 100,000 | $25.00 | $0.001 | $25.001 |
There is no subscription, no monthly minimum and no per-place fee. This is the cheapest Tripadvisor review scraping on the market.
How deep can it go
Verified on The Empire Hotel, which has 8,923 reviews: page requests worked all the way to offset 8,920 with no rate limiting and no cap. Hotels and attractions serve 10 reviews per page, restaurants serve 15; the actor works this out from the first page rather than assuming.
Each page request returns a block of reviews, so 1,000 reviews from a hotel is about 100 requests and finishes in a couple of minutes on the default 1 GB memory. Several place URLs in one run are processed one after another, each with its own limit, and one place failing does not stop the rest.
What to use it for
- Reputation monitoring - schedule a daily run on your own properties and alert on any new
review below 3 stars. publishedAt and reviewId make deduplication trivial.
- Competitive benchmarking on the demand side - pull the review sets of the hotels or
restaurants in one city and compare rating distributions and complaint themes over time.
- Review-response coverage -
ownerResponseTextandownerResponseAtshow which reviews a
property answered and how fast, across a whole portfolio.
- Training and evaluation data - rated, dated, language-tagged review text for sentiment
models, topic extraction or LLM evaluation sets.
- Trip-context segmentation -
tripTypeandtripDatesplit feedback into families, couples,
solo and business travellers, and into the season each stay actually happened in.
What this does not do
- No review photos. Tripadvisor's review list returns an empty photo array on every review, so
there is no photo column rather than a column that is always empty. Photos need a different query that this actor does not make.
- No place search. You supply the place URL; it does not find places by name or by city.
- No sort or language filter options. Reviews come back in Tripadvisor's default order, newest
first. Options that were not verified to change results are not exposed.
- Attraction pages return the attraction's product reviews. For a big attraction, Tripadvisor's
own review list is largely reviews of the bookable tickets and tours attached to it. Each row carries the placeName, placeId and placeType of what was actually reviewed, so you can tell them apart.
- Vacation rental pages are not supported and return an uncharged diagnostic row.
- No private or removed reviews - only what a logged-out visitor can see.
- No reviewer contact details. Tripadvisor does not publish them and this actor does not guess.
FAQ
How do I scrape Tripadvisor reviews without getting blocked? Run this Actor and leave the proxy settings alone. It requests the public review pages the way an ordinary visitor's browser does, retries a refused page on a fresh exit address several times, and if a page still will not load you get an uncharged diagnostic row saying so instead of a silent gap. No headless browser is involved.
Does it need a residential proxy? No. It uses Apify's shared rotating datacenter addresses, which add nothing to the run cost. Metered proxy groups are deliberately not offered - review pages are large, and per-gigabyte bandwidth would cost more than the reviews themselves for no extra coverage.
Can I scrape all reviews for a hotel? Yes. Set maxReviewsPerPlace up to 5000. Deep pagination was tested to offset 8,920 on a hotel with 8,923 reviews.
Does it work for restaurants and attractions too? Yes, and for Tripadvisor's country domains. Hotels, restaurants, attractions and activities were all covered in the same 100-review test run.
Can I scrape several places in one run? Yes. Put every URL in placeUrls; maxReviewsPerPlace applies to each of them, and maxPlaces bounds how many one run touches. Duplicate URLs are collapsed.
How much does 1,000 reviews cost? $0.25, plus the $0.001 start fee, so $0.251.
What happens if a place has no reviews, or the URL is wrong? You get a single uncharged diagnostic row saying which it was. You are never charged for a run that returned no reviews.
Can I get the reviewer's email? No. Tripadvisor does not publish reviewer emails and this actor does not attempt to guess them.
Is scraping Tripadvisor reviews legal? This Actor only reads pages any logged-out visitor can open, and it collects no private data. You are responsible for how you use the output - check Tripadvisor's terms and your local rules, particularly around personal data, before you republish anything.