TripAdvisor Hotels & Reviews Scraper | $3.50 / 1k
Pricing
from $3.50 / 1,000 results
TripAdvisor Hotels & Reviews Scraper | $3.50 / 1k
Scrape TripAdvisor hotels, restaurants, things to do, and reviews in one Actor. Get prices, star ratings, GPS, amenities, hours, photos, awards, and full review threads. Input by URL, search keyword, or city name. $3.50 / 1k places, $0.50 / 1k reviews.
Pricing
from $3.50 / 1,000 results
Rating
0.0
(0)
Developer
Raven
Actor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
TripAdvisor Scraper — Hotels, Restaurants, Attractions and Reviews in One Actor
Scrape TripAdvisor hotels, restaurants, things to do, and customer reviews — all from a single Actor. Three input modes: paste any TripAdvisor URL, type a free-text keyword, or pass a city name. Get pricing, star ratings, GPS coordinates, amenities, opening hours, photos, awards, and full review threads.
Pricing
Pay per result. No subscription, no minimum.
| Event | Price | Per 1,000 |
|---|---|---|
| Result (one place — hotel, restaurant or attraction) | $0.0035 | $3.50 |
| Review (one TripAdvisor review, embedded in its parent place) | $0.0005 | $0.50 |
You only pay for what lands in the dataset. Listing pagination, typeahead, retries, and DataDome rotations are absorbed by the Actor — never charged to you. Set maxItems and maxReviewsPerPoi to cap the run, plus Maximum cost per run (default $20) as a hard budget.
Key Features
- Three input modes — paste TripAdvisor URLs, type free-text search terms, or list cities by name (or numeric geo ID). Each mode has its own dedicated input field.
- All four place types — hotels, restaurants, things to do, and a single review parser that handles all of them
- Reviews embedded inline — each place record carries a
reviews: [...]array, so one row in the dataset = one place with everything about it - City listing crawler — paginates
Hotels-g{id}-…html,Restaurants-g{id}-…html,Attractions-g{id}-Activities-…htmlto discover all POIs in a destination - Typeahead resolver — turn
"Paris","Dubai","New York City"into the right TripAdvisor geo ID at runtime via TripAdvisor's official autocomplete GraphQL - DataDome bypass — TLS fingerprint impersonation (
tls_clientChrome 133, no headers overridden) auto-rotates the proxy session on every 403 / captcha hit, up to 5 retries per request, each with a fresh IP - Parallel scraping — up to 10 concurrent worker pool (configurable), each with its own IP and cookie jar; a dedicated thread pool keeps
tls_client's sync API from queueing on Python's tiny default executor - Two-layout review parser — TripAdvisor uses different DOM for hotels vs attractions; the Actor detects both (
data-test-target="HR_CC_CARD"and legacydata-automation="reviewCard") automatically - Hard budget cap —
Maximum cost per runstops the run cleanly the moment your $X budget is hit, exit code 0, no partial double-charge - Apify Residential US proxy — hardcoded; users never see proxy settings or IP rotation logic
What Data You Get
Every dataset row is a single place record (hotel, restaurant or attraction). When Include reviews is on, reviews come embedded inside that record as an array.
Hotel record
| Field | Description |
|---|---|
__type | "hotel" |
locationId | TripAdvisor numeric POI id |
parentGeoId | Numeric city id |
url | Canonical TripAdvisor URL |
name | Hotel name |
description | "About this hotel" text |
starRating | Official hotel class (1.0–5.0 stars) |
priceRange | TripAdvisor price band ($$) |
priceFrom | Lowest deal price across booking partners |
finalPrice | Headline price shown in the booking module |
dealsCount | How many booking partners have a deal |
awards | Travelers' Choice / Best of the Best / etc. |
phone, officialWebsite | Contact details |
rating, reviewCount, ranking | Aggregate rating, total reviews, "#3 of 1,882 hotels" |
address, city, postalCode, country, region | Full address |
latitude, longitude | GPS coordinates |
amenities | Flat list of all amenities |
amenityGroups | Same amenities split by property / room_amenities / room_types |
languagesSpoken | When TripAdvisor lists them |
images | Up to 30 photo URLs |
breadcrumbs | Full geo hierarchy (Europe > France > Ile-de-France > Paris > …) |
Restaurant record
| Field | Description |
|---|---|
__type | "restaurant" |
locationId, parentGeoId, url, name | Identity |
description | About this restaurant |
phone, image | Contact + cover photo |
rating, reviewCount, ranking | Aggregate rating, total reviews, "#24 of 14,022 Restaurants" |
priceLevel | $, $$, $$ - $$$, etc. |
cuisines | ["Japanese", "Sushi", "Asian"] |
mealTypes | ["Lunch", "Dinner", "Brunch"] |
specialDiets | ["Vegetarian friendly", "Gluten Free", "Vegan options"] |
features | ["Reservations", "Outdoor Seating", "Takeout", "Delivery"] |
awards | Travelers' Choice / Michelin / etc. |
openingHours | Hours per day of week |
latitude, longitude | GPS coordinates |
city, country, region | Geo |
images | Up to 30 photo URLs |
breadcrumbs | Full geo hierarchy |
Attraction record
| Field | Description |
|---|---|
__type | "attraction" |
locationId, parentGeoId, url, name | Identity |
description | About this attraction |
phone, officialWebsite, image | Contact + cover photo |
rating, reviewCount, ranking, bestRating | Ratings + "#11 of 4,244 things to do" |
openingHours | e.g. "Mo-Su 09:30-23:00" |
duration | Suggested visit length, e.g. "1-2 hours" |
ticketPriceFrom | Cheapest ticket / tour price ("$54") |
categories | List of attraction categories (Architectural Buildings, Monuments, etc.) |
awards | Travelers' Choice / Best of the Best / etc. |
address, city, postalCode, country | Full address |
latitude, longitude | GPS coordinates |
images | Up to 30 photo URLs |
breadcrumbs | Full geo hierarchy |
Embedded review (when Include reviews = true)
Reviews live inside their parent place record under reviews: [...]. Each review carries:
| Field | Description |
|---|---|
reviewId | TripAdvisor review id |
url | Permalink to the single-review page |
title | Review title |
rating | 1.0–5.0 (parsed from "X of 5 bubbles") |
text | Full review body |
language | BCP-47 language code (when tagged) |
travelDate | When the user stayed/visited (e.g. "April 2026") |
tripType | "Traveled with family" / "Couples" / "Solo" / etc. |
writtenDate | When the review was posted |
helpfulVotes | Helpful-vote count |
reviewer | {name, profileUrl, contributions, location} |
ownerResponse | Owner reply if present |
Plus reviewsScraped: N on the parent place — handy when you set maxReviewsPerPoi and want to know how many actually came back.
Use Cases
- Hotel competitive analysis — pull every hotel in a city with prices, ratings, amenities, ranking, and photos for benchmarking against your own property
- Restaurant market research — scrape restaurants by cuisine and price band; compare ratings, awards, and customer sentiment from review text
- Tourism analytics — top attractions per city with visit duration, ticket prices, and rating breakdowns for tour operators and travel agencies
- Review sentiment mining — bulk-extract review text, ratings, dates, and trip types for sentiment analysis, brand monitoring, and reputation management
- Pricing intelligence — track
priceFromanddealsCountacross hotels to spot pricing trends and OTA partner availability - OTA / aggregator data feed — power your own travel site or app with TripAdvisor's place data: GPS, amenities, hours, photos
- Hospitality SEO research — what cuisines / categories rank top in a city, which Travelers' Choice winners exist, what features customers ask about
- Lead generation for travel suppliers — extract hotel and restaurant contact info (phone, website, email when listed) for outreach
- Travel content creation — auto-generate destination guides with curated lists of top-rated places, photos, and review quotes
How It Works
- Pick an Input Mode at the top of the form —
Start URLs,Search terms, orCities - Fill the matching field — paste TripAdvisor URLs, type keywords like
"Eiffel Tower", or list cities like"Paris","Dubai","187147" - Pick a Category —
All/Hotels/Restaurants/Attractions(ignored when you pass a direct detail URL) - Toggle
Include reviews— embeds reviews inside each place record (charged separately) - Set caps —
Max items total(hard cap on dataset rows),Max reviews per POI,Max POIs per listing,Maximum cost per run - Run — actor pulls TripAdvisor pages through Apify Residential US proxy, parses JSON-LD + DOM, pushes flat rows to the dataset
- Download — JSON, CSV, or Excel from the Apify dataset; the table view is preconfigured to show name, rating, price, ranking, city
Input Parameters
| Field | Type | Default | Description |
|---|---|---|---|
mode | string | locations | startUrls, searchTerms, or locations |
startUrls | URL list | — | TripAdvisor pages: Hotel_Review-, Restaurant_Review-, Attraction_Review-, Hotels-, Restaurants-, Attractions- |
searchTerms | string list | — | Free-text keywords (resolved via TripAdvisor typeahead) |
locations | string list | — | City names ("Paris", "New York City") or numeric geo IDs ("187147") |
category | enum | all | all, hotels, restaurants, attractions |
includeReviews | boolean | false (UI prefill: true) | Fetch reviews and embed them inside each place record |
maxReviewsPerPoi | integer | 10 | Cap on reviews per place. Each review = $0.50 / 1,000 |
maxPois | integer | 50 | Cap on POIs per listing in searchTerms / locations modes |
maxItems | integer | 10 | Hard cap on total dataset rows. 0 = unlimited |
locale | string | en-US | BCP-47 — used for typeahead and Accept-Language |
maxRetries | integer | 5 | Retries per request before giving up; each retry uses a new IP |
maxConcurrency | integer | 10 | Parallel workers (each with its own IP) |
Example: scrape Paris and Dubai with 10 hotels each + 5 reviews per hotel
{"mode": "locations","locations": ["Paris", "Dubai"],"category": "hotels","includeReviews": true,"maxReviewsPerPoi": 5,"maxPois": 10,"maxItems": 0}
Example: pull a specific hotel with 50 reviews
{"mode": "startUrls","startUrls": [{ "url": "https://www.tripadvisor.com/Hotel_Review-g187147-d229968-Reviews-Hotel_Astra_Opera_Astotel-Paris_Ile_de_France.html" }],"includeReviews": true,"maxReviewsPerPoi": 50}
Example: keyword search across types
{"mode": "searchTerms","searchTerms": ["Eiffel Tower", "Le Bernardin"],"category": "all","includeReviews": false}
Output Example
Hotel with embedded reviews
{"__type": "hotel","locationId": 250927,"parentGeoId": 187147,"url": "https://www.tripadvisor.com/Hotel_Review-g187147-d250927-Reviews-Hotel_Europe_Saint_Severin-Paris_Ile_de_France.html","name": "Hotel Europe Saint Severin","description": "Friendly and comfortable property located in the heart of the Latin quarter…","starRating": 3.0,"priceRange": "$$ (Based on Average Nightly Rates for a Standard Room from our Partners)","priceFrom": "$160","finalPrice": "$221","dealsCount": 11,"awards": ["Travelers' Choice"],"rating": 4.5,"reviewCount": 3256,"ranking": "#383 of 1,882 hotels","address": "38-40 Rue Saint Severin","city": "Paris","postalCode": "75005","country": "FR","latitude": 48.852753,"longitude": 2.344314,"amenityGroups": {"property": ["Free WiFi", "24-hour front desk", "Concierge", "..."],"room_amenities": ["Air conditioning", "Bathrobes", "..."],"room_types": ["Non-smoking rooms", "Family rooms"]},"images": ["https://dynamic-media-cdn.tripadvisor.com/..."],"reviews": [{"reviewId": 1057616466,"title": "Perfect hotel for a family","rating": 5.0,"text": "I can only recommend this hotel! We stayed here as a family of three…","travelDate": "April 2026","tripType": "Traveled with family","writtenDate": "Apr 26","helpfulVotes": 1,"reviewer": {"name": "Erdal A","profileUrl": "https://www.tripadvisor.com/Profile/erdala957","contributions": null,"location": null}}],"reviewsScraped": 5}
Restaurant
{"__type": "restaurant","locationId": 425227,"parentGeoId": 60827,"name": "Geido Restaurant","description": null,"rating": 4.4,"reviewCount": 287,"ranking": "#42 of 5,341 Restaurants in Brooklyn","priceLevel": "$$ - $$$","cuisines": ["Japanese", "Sushi", "Asian"],"specialDiets": ["Vegetarian friendly"],"features": ["Delivery"],"awards": ["Travelers' Choice"],"openingHours": {"Sunday": ["12:00-22:00"],"Monday": ["12:00-22:00"]},"latitude": 40.677,"longitude": -73.969}
Attraction
{"__type": "attraction","locationId": 188151,"parentGeoId": 187147,"name": "Eiffel Tower","rating": 4.6,"reviewCount": 143855,"ranking": "#11 of 4,244 things to do","openingHours": "Mo-Su 09:30-23:00","duration": "1-2 hours","ticketPriceFrom": "$54","categories": ["Architectural Buildings in Paris", "Monuments & Statues in Paris", "..."],"awards": ["Travelers' Choice", "Best of the Best"],"officialWebsite": "https://www.toureiffel.paris/","phone": "+33 892 70 12 39","latitude": 48.858353,"longitude": 2.294464}
Proxy Requirements
Apify Residential US proxy is hardcoded — you never configure it. TripAdvisor uses DataDome bot management; only residential IPs from the right pool consistently pass. No SOCKS5, no datacenter — Apify Residential is required.
The Actor rotates the proxy session (= new IP) on every 403 / captcha / connection error, up to 5 times per request. With 10 parallel workers, each runs on its own IP — even bursty fan-outs to 50 hotels at once stay under DataDome's per-IP rate.
Limitations
- Reviews behind DataDome lite-mode — on some Apify residential IPs TripAdvisor returns a stripped detail page (JSON-LD intact, but review markup omitted). The Actor falls back to the dedicated
-or10-review-pagination URL automatically. If both fail, the review array is empty for that place — the place itself is still pushed - Listing depth — city listings paginate at 30 POIs per page; default cap is 50 POIs per listing (set
maxPoishigher to scrape more, up to 5,000) - Reviews per POI cap — server-side TripAdvisor allows hundreds of pages; default cap is 10 reviews to keep runs cheap, set
maxReviewsPerPoihigher (up to 50,000) - Persisted GraphQL queries rotate — TripAdvisor's typeahead uses a persisted query id (
58aa2507ecd677afat the time of writing). When TripAdvisor deploys, this id changes andsearchTerms/locationsmodes (the ones that go through typeahead) start failing.Start URLsmode keeps working unaffected. Re-deploy of the Actor will pick up the new id - Two-layout review markup — TripAdvisor uses different DOM for hotels vs attractions reviews. The Actor detects and parses both. If TripAdvisor adds a third layout, expect a few hours of zero-review runs before a hotfix
- Geo coverage — TripAdvisor's data is global; this Actor specifically scrapes the
tripadvisor.comdomain (English / US locale by default). Non-English locales work via thelocaleparameter
FAQ
What kinds of TripAdvisor data does this Actor scrape? Hotels, restaurants, things to do (attractions), and customer reviews. Reviews come embedded inside each place record.
How are reviews formatted?
Reviews live inside their parent place under reviews: [...]. Each review has reviewId, title, rating, text, travelDate, tripType, helpfulVotes, reviewer, and more. Set Include reviews = true to fetch them.
How do I scrape every hotel in a city?
Use the Cities mode, type "Paris" (or paste the geo ID "187147"), set category = hotels, maxPois = 5000, and maxItems = 0 for unlimited.
Can I scrape a specific hotel page?
Yes — switch to Start URLs and paste the Hotel_Review- URL. Same for restaurants (Restaurant_Review-) and attractions (Attraction_Review-).
How do I cap the cost per run?
The default Maximum cost per run is $20. Lower it in the Run options panel, or set maxItems to hard-cap dataset rows.
Why are some review fields null?
TripAdvisor doesn't always show every field per review (e.g. reviewer location, contributions count, owner response). When the page doesn't surface it, the field is null.
Why does my run return zero reviews on some hotels?
DataDome occasionally serves a stripped HTML to Apify residential IPs that omits review-card markup. The Actor falls back to a fresh fetch of the -or10- review-pagination URL — usually that returns full content. If both fail, the place is still pushed; only reviews ends up empty. Retrying the run typically gets the reviews on a fresh proxy session.
How fast is it?
With maxConcurrency = 10, four hotel detail fetches complete in ~1.7 seconds locally. On Apify Residential, expect ~3–8 seconds per place depending on review depth.
Can I export to CSV / Excel?
Yes. Apify dataset supports JSON, CSV, Excel, XML, RSS, HTML. Embedded reviews: [...] arrays flatten in CSV via dot-notation; if you need one-row-per-review for spreadsheet analysis, run with includeReviews = false then a second run on the same startUrls with includeReviews = true and post-process.
Does the price include the proxy cost? Yes. The $3.50 / 1,000 results and $0.50 / 1,000 reviews are all-in. You don't pay for proxy bandwidth, retries, or DataDome rotations.
Having issues? Help me fix them faster
If you experience any problems, please share your run data with me so I can debug and improve the Actor:
- Go to Apify Security Settings
- Find "Share run data with developers"
- In the "Manage list of Actors" section, check this Actor (or All Actors)
- Save
This data is used only for debugging and helps me resolve issues much faster. Thank you!
Support
Questions, bug reports, or feature requests: afrcanec@gmail.com
🏷️ Tags
TripAdvisor Scraper, TripAdvisor API, TripAdvisor Hotels Scraper, TripAdvisor Restaurants Scraper, TripAdvisor Attractions Scraper, TripAdvisor Reviews Scraper, TripAdvisor Data Extractor, Hotel Reviews Scraper, Restaurant Reviews Scraper, Hotel Price Scraper, Hotels Data Mining, Travel Data Scraper, Hospitality Data, Tourism Scraper, City Listings Scraper, Hotel Ratings Extractor, Restaurant Ratings, Things To Do Scraper, Tourist Attractions API, Hotel Amenities Scraper, Hotel Booking Data, Travel Reviews Mining, Sentiment Analysis Travel, Hotel Competitor Analysis, Restaurant Competitor Analysis, OTA Data Scraping, Hotel Star Rating Scraper, Travelers Choice Awards Tracker, Hotel Photo Scraper, How to Scrape TripAdvisor, Extract TripAdvisor Reviews, Travel Market Research, Hospitality Market Research, Tourism Analytics, Hotel Aggregator, Review Aggregator, Restaurant Discovery, Tourist Reviews Database, Travel Industry Data, Vacation Rentals Scraper, Hotel Pricing API, Customer Review Mining