TripAdvisor Reviews Deep Scraper — Hotels & Restaurants
Pricing
Pay per usage
TripAdvisor Reviews Deep Scraper — Hotels & Restaurants
Deep-scrape TripAdvisor hotel and restaurant reviews with ratings, travel types, stay dates, author profiles, and helpful votes. Supports search, pagination, sorting, and filtering. Export JSON/CSV/Excel.
Pricing
Pay per usage
Rating
0.0
(0)
Developer

Ricardo Akiyoshi
Actor stats
0
Bookmarked
1
Total users
0
Monthly active users
a day ago
Last modified
Categories
Share
TripAdvisor Reviews Deep Scraper
Deep-scrape reviews from TripAdvisor hotels and restaurants. Extracts review title, full text, ratings, travel type, stay dates, author profiles, helpful votes, management responses, and sub-ratings. Supports direct URLs, search-based discovery, automatic pagination, and multiple sort orders.
What It Does
This actor performs deep extraction of review data from TripAdvisor hotel and restaurant pages:
Place-level data:
- Place name, overall rating, total review count
- Address, price level, ranking, category
- Place type (hotel / restaurant / attraction)
Review-level data:
- Review title and full text (not truncated)
- Star rating (1-5, half-star precision)
- Travel type (Couples, Family, Solo, Business, Friends)
- Stay date / date of visit
- Author name, hometown/location, contribution count
- Helpful votes count
- Publication date
- Sub-ratings (Service, Value, Cleanliness, Location, etc.)
- Management response text and date
- Language
Features
- 4-layer extraction -- NEXT_DATA JSON, JSON-LD, Apollo/GraphQL state, DOM scraping
- Automatic pagination through all review pages (offset-based)
- Search by name + location when you don't have the URL
- Hotels AND restaurants in a single run
- Sort reviews by most recent, most detailed, or stay date
- Up to 50,000 reviews per place (configurable limit)
- Anti-detection -- UA rotation, randomized headers, request jitter
- Proxy support -- use Apify residential proxies for reliable scraping
- Deduplication -- no duplicate reviews in your output
- PPE pricing -- pay only for what you scrape ($0.004/review)
Input
| Field | Type | Default | Description |
|---|---|---|---|
hotelUrls | array | [] | TripAdvisor hotel review page URLs |
restaurantUrls | array | [] | TripAdvisor restaurant review page URLs |
searchTerms | array | [] | Search for places by name |
location | string | "" | Location to narrow search (e.g., "Paris, France") |
maxReviews | integer | 500 | Max reviews per place (0 = unlimited) |
sortBy | string | "most_recent" | Sort order (see below) |
proxyConfiguration | object | - | Proxy settings |
Sort Options
| Value | Description |
|---|---|
most_recent | Newest reviews first |
detailed_reviews | Most detailed/longest reviews first |
date_of_stay_newest | Newest stay date first |
date_of_stay_oldest | Oldest stay date first |
Example Input -- Hotel URLs
{"hotelUrls": ["https://www.tripadvisor.com/Hotel_Review-g60763-d93437-Reviews-The_Roosevelt_Hotel-New_York_City_New_York.html","https://www.tripadvisor.com/Hotel_Review-g187147-d188734-Reviews-Le_Meurice-Paris_Ile_de_France.html"],"maxReviews": 200,"sortBy": "most_recent"}
Example Input -- Restaurant URLs
{"restaurantUrls": ["https://www.tripadvisor.com/Restaurant_Review-g60763-d457808-Reviews-Joe_s_Pizza-New_York_City_New_York.html"],"maxReviews": 100}
Example Input -- Search by Name
{"searchTerms": ["Hilton Times Square", "Peter Luger Steak House"],"location": "New York","maxReviews": 300}
Example Input -- Mixed (Hotels + Restaurants + Search)
{"hotelUrls": ["https://www.tripadvisor.com/Hotel_Review-g60763-d93437-Reviews-The_Roosevelt_Hotel-New_York_City_New_York.html"],"restaurantUrls": ["https://www.tripadvisor.com/Restaurant_Review-g60763-d457808-Reviews-Joe_s_Pizza-New_York_City_New_York.html"],"searchTerms": ["Ritz Paris"],"location": "Paris","maxReviews": 500,"sortBy": "detailed_reviews"}
Output
The actor produces two types of records in the dataset:
Place Summary Record
{"type": "placeSummary","placeKey": "d93437","placeType": "hotel","placeName": "The Roosevelt Hotel","rating": 4.0,"totalReviews": 12543,"address": "45 E 45th St, New York City, NY 10017","category": "Hotel","priceLevel": "$$$$","ranking": "#87 of 508 hotels in New York City","url": "https://www.tripadvisor.com/Hotel_Review-g60763-d93437-Reviews-The_Roosevelt_Hotel-New_York_City_New_York.html","scrapedAt": "2026-03-02T10:30:00.000Z"}
Review Record
{"type": "review","placeName": "The Roosevelt Hotel","placeRating": 4.0,"totalReviews": 12543,"placeType": "hotel","placeKey": "d93437","placeUrl": "https://www.tripadvisor.com/Hotel_Review-g60763-d93437-Reviews-The_Roosevelt_Hotel-New_York_City_New_York.html","reviewIndex": 1,"title": "Classic NYC hotel with modern touches","text": "We stayed here for 4 nights during our anniversary trip. The room was spacious by Manhattan standards, and the location on Madison Avenue is unbeatable. The lobby is stunning with its original Art Deco details. Staff was friendly and accommodating. Only downside was the noise from the street, but that's NYC for you.","rating": 4,"travelType": "Couples","stayDate": "February 2026","author": "TravelJunkie2025","location": "Chicago, Illinois","authorContributions": 47,"helpful": 12,"publishedDate": "2026-02-28","language": "en","subRatings": {"Service": 5,"Value": 3,"Cleanliness": 4,"Location": 5},"hasManagementResponse": true,"managementResponseText": "Thank you for your kind review! We're delighted you enjoyed your anniversary stay with us.","managementResponseDate": "2026-03-01","scrapedAt": "2026-03-02T10:30:15.000Z","pageNumber": 1}
Use Cases
- Hospitality Intelligence -- Analyze guest sentiment for your hotel or competitor hotels
- Restaurant Monitoring -- Track review trends, common complaints, and praise points
- Travel Market Research -- Compare review volumes and ratings across a city or region
- Competitor Benchmarking -- Compare your property's reviews against competitors
- Reputation Management -- Monitor new reviews and management response rates
- NLP / Sentiment Analysis -- Feed review text into ML models for automated classification
- Academic Research -- Study travel behavior, seasonal patterns, or review authenticity
- Content Marketing -- Discover what travelers care about most to inform content strategy
- Investment Due Diligence -- Assess hotel/restaurant quality via guest feedback data
- Location Planning -- Evaluate customer satisfaction across potential expansion markets
Pricing (Pay-Per-Event)
This actor uses Apify's pay-per-event model:
- review-scraped: $0.004 per review extracted
You set a maximum budget per run, and the actor will never exceed it. The first reviews are free (Apify gives free platform credits to try actors).
How to Run
On Apify Platform
- Go to the actor page on Apify Store
- Click "Start" or "Try for free"
- Enter your hotel/restaurant URLs or search terms
- Set max reviews and sort order
- Click "Run"
- Download results as JSON, CSV, or Excel
Locally
# Clone the repositorygit clone <repo-url>cd tripadvisor-reviews-scraper# Install dependenciesnpm install# Create input filemkdir -p ./storage/key_value_stores/defaultecho '{"hotelUrls": ["https://www.tripadvisor.com/Hotel_Review-g60763-d93437-Reviews-The_Roosevelt_Hotel-New_York_City_New_York.html"], "maxReviews": 20}' > ./storage/key_value_stores/default/INPUT.json# Runnpm start
Via Apify API
curl -X POST "https://api.apify.com/v2/acts/<ACTOR_ID>/runs" \-H "Authorization: Bearer <YOUR_TOKEN>" \-H "Content-Type: application/json" \-d '{"hotelUrls": ["https://www.tripadvisor.com/Hotel_Review-g60763-d93437-Reviews-The_Roosevelt_Hotel-New_York_City_New_York.html"],"maxReviews": 100,"sortBy": "most_recent"}'
Via Apify Client (Node.js)
const { ApifyClient } = require('apify-client');const client = new ApifyClient({ token: '<YOUR_TOKEN>' });const run = await client.actor('<ACTOR_ID>').call({hotelUrls: ['https://www.tripadvisor.com/Hotel_Review-g60763-d93437-Reviews-The_Roosevelt_Hotel-New_York_City_New_York.html',],maxReviews: 200,sortBy: 'most_recent',});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(`Got ${items.length} records`);
Technical Details
- Runtime: Node.js 18 on Apify platform
- Framework: Crawlee (CheerioCrawler) + Apify SDK v3
- Extraction: 4-layer cascade (NEXT_DATA, JSON-LD, Apollo state, DOM)
- Rate limiting: 15 requests/minute, 3 concurrent max, random jitter
- Retries: 3 automatic retries per failed request
- Memory: ~256 MB recommended for typical runs, 512 MB for 10K+ reviews
- Anti-detection: User-Agent rotation, randomized headers, request delays
Limitations
- TripAdvisor aggressively blocks scrapers. Use Apify residential proxies for reliable, large-scale runs.
- Some very old reviews may have less structured data (missing travel type, sub-ratings, etc.).
- Review text may be partially truncated if TripAdvisor returns a "Read more" version. The full-text container is extracted when available.
- TripAdvisor's page structure changes periodically. The 4-layer extraction strategy provides resilience, but occasional updates may be needed.
- Maximum 50,000 reviews per place (safety cap at 500 pages).
FAQ
Q: Why am I getting blocked? A: TripAdvisor has aggressive bot detection. Always use Apify residential proxies for production runs. The actor includes UA rotation and request jitter, but proxies are essential.
Q: Can I scrape attractions too? A: The actor focuses on hotels and restaurants. Attraction page support is basic -- if you provide an Attraction_Review URL, it will attempt extraction but results may vary.
Q: How fast is it? A: Approximately 15 pages per minute (150 reviews/minute) with proxies. A 500-review run takes about 5-7 minutes.
Q: What's the difference between this and the regular TripAdvisor scraper? A: This actor is specifically designed for deep review extraction with travel type, stay dates, sub-ratings, management responses, and helpful votes. The regular scraper focuses on listing data (hotel/restaurant info) rather than individual reviews.
Support
Built by Sovereign AI. For issues, feature requests, or custom scraping needs:
- Email: ricardo.yudi@gmail.com
- GitHub: https://github.com/ryudi84
Integration — Python
from apify_client import ApifyClientclient = ApifyClient("YOUR_API_TOKEN")run = client.actor("sovereigntaylor/tripadvisor-reviews-scraper").call(run_input={"searchTerm": "tripadvisor reviews","maxResults": 50})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(f"{item.get('title', item.get('name', 'N/A'))}")
Integration — JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });const run = await client.actor('sovereigntaylor/tripadvisor-reviews-scraper').call({searchTerm: 'tripadvisor reviews',maxResults: 50});const { items } = await client.dataset(run.defaultDatasetId).listItems();items.forEach(item => console.log(item.title || item.name || 'N/A'));