Tripadvisor Scraper
Pricing
from $3.50 / 1,000 item scrapeds
Tripadvisor Scraper
π₯ Up to 30% OFF! Scrape TripAdvisor β no login. Hotels, restaurants & attractions: rating, reviews count, ranking, price level, address, coordinates, photos, sub-ratings + reviews. Fast & reliable, pay per item.
Pricing
from $3.50 / 1,000 item scrapeds
Rating
0.0
(0)
Developer
Bruno
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
13 days ago
Last modified
Categories
Share
π₯ TripAdvisor Scraper (Real Browser)
Gets real hotels, restaurants and attractions (plus their reviews) from TripAdvisor by driving an actual headless browser (Playwright/Chromium) through an Apify residential proxy β the same way a person would browse the site. A plain HTTP request to TripAdvisor gets a 403/challenge page; this Actor renders the real page, waits for content to actually appear, and reads it off the live DOM plus TripAdvisor's own public structured data (schema.org JSON-LD + Open Graph tags).
Public data only, no login. Honesty first: if TripAdvisor shows a CAPTCHA/"access denied" challenge, or simply doesn't render the expected cards/detail page in time, this Actor reports exactly what it saw (with a raw page-text snippet) instead of guessing or inventing data. It never fabricates a rating, a review or a place that isn't really on the page.
What you get per place
- Identity & location: name, category, type(s), TripAdvisor
locationId&geoId, canonical URL. - Scores: overall rating, review count, aggregate rating (from JSON-LD), ranking parsed into
position / total / category (e.g.
#12of419Hotels in Rome), and a rating distribution (Excellent / Very good / Average / Poor / Terrible counts) when shown. - Contact: phone, alternate phone, website, full street address plus a structured
addressDetails(street / city / region / postalCode / country) and GPS latitude/longitude. - Commercial: price range, price level, hotel class (stars), cuisines (restaurants), amenities, opening hours.
- Media: main image + a gallery of canonical photo URLs (and card thumbnails on listings).
- Reviews: title, rating, sub-ratings, text, date, date of stay, trip type, author + profile URL, review permalink, contribution & helpful-vote counts.
Input
{"searchQuery": "hotels in Rome","category": "hotels","urls": [],"maxItems": 30,"maxReviews": 0,"maxReviewPages": 0,"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] },"timeoutSecs": 60}
searchQueryβ free-text TripAdvisor search, e.g."hotels in Rome","restaurants in Lisbon","things to do in Paris". Optional, but you must supply this and/orurls.categoryβhotels/restaurants/attractions. Controls which TripAdvisor URL pattern is searched/scraped forsearchQuery(and for anyurlsthat are listing pages). Defaulthotels.urlsβ TripAdvisor URLs to scrape directly instead of / in addition to searching:- Detail pages (a
Hotel_Review-,Restaurant_Review-orAttraction_Review-URL) are always opened for full details (+ reviews ifmaxReviews> 0), regardless ofcategory. - Listing pages (a
Hotels-g...,Restaurants-g...orAttractions-g...URL) are scraped like a search result page β their cards are extracted the same way.
- Detail pages (a
maxItemsβ max places returned, default30, max300.maxReviewsβ reviews per place (title, rating, sub-ratings, text, date, date of stay, trip type, author, permalink). Default0, max500. When0, places found viasearchQuery/listing pages are returned with just their card data (name, rating, review count, price, location, thumbnail, detail URL) β the individual detail page isn't opened, to keep the run fast and cheap. Explicit detail URLs inurlsare always opened regardless, just without reviews ifmaxReviewsis0. WhenmaxReviewsis larger than one page, the Actor automatically walks TripAdvisor's review pagination (-or10-,-or20-, β¦) to collect that many.maxReviewPagesβ optional hard cap on extra review pages opened per place.0= automatic.proxyConfigurationβ defaults to Apify RESIDENTIAL proxy, strongly recommended: TripAdvisor blocks datacenter IPs hard.timeoutSecsβ how long to wait for a page to render before giving up, default60.
Output
One item per place. From a search/listing page with maxReviews: 0:
{"category": "hotels","name": "Hotel Artemide","rating": 4.5,"reviewCount": 3120,"priceRange": "$180 - $260","priceLevel": null,"location": "Rome, Italy","detailUrl": "https://www.tripadvisor.com/Hotel_Review-g187791-d229722-Reviews-...html","listPosition": 1,"locationId": "229722","geoId": "187791","thumbnail": "https://dynamic-media-cdn.tripadvisor.com/.../photo.jpg","rawText": "Hotel Artemide 4.5 ... 3,120 reviews $180 - $260 ...","scrapedAt": "2026-10-05T12:00:00.000Z"}
From a detail page (explicit urls, or maxReviews > 0):
{"category": "hotels","name": "Hotel Artemide","rating": 4.5,"reviewCount": 3120,"ranking": "#12 of 419 Hotels in Rome","rankingPosition": 12,"rankingTotal": 419,"rankingCategory": "Hotels in Rome","priceRange": "$180 - $260","priceRangeDetail": "$$$","priceLevel": null,"hotelClass": 4,"location": "Rome, Italy","address": "Via Nazionale, 22, 00184 Rome Italy","addressDetails": { "street": "Via Nazionale, 22", "city": "Rome", "region": "Lazio", "postalCode": "00184", "country": "Italy" },"latitude": 41.9015,"longitude": 12.4953,"phone": "+39 06 489911","website": "https://www.hotelartemide.it/","cuisines": null,"amenities": ["Free Wifi", "Pool", "Restaurant", "..."],"openingHours": null,"aggregateRating": 4.5,"aggregateReviewCount": 3120,"ratingDistribution": { "excellent": 2500, "veryGood": 450, "average": 120, "poor": 30, "terrible": 20 },"mainImage": "https://.../photo.jpg","images": ["https://.../1.jpg", "https://.../2.jpg"],"types": ["Hotel"],"description": "Set in the heart of Rome...","locationId": "229722","geoId": "187791","canonicalUrl": "https://www.tripadvisor.com/Hotel_Review-...html","detailUrl": "https://www.tripadvisor.com/Hotel_Review-...html","reviewsCount": 25,"reviews": [{"title": "Wonderful stay","rating": 5,"author": "janedoe123","date": "August 2026","dateOfStay": "August 2026","tripType": "Couples","subRatings": [5, 5, 4, 5],"contributions": 42,"helpfulVotes": 3,"profileUrl": "https://www.tripadvisor.com/Profile/janedoe123","reviewUrl": "https://www.tripadvisor.com/ShowUserReviews-...html","text": "..."}],"scrapedAt": "2026-10-05T12:00:00.000Z","bodyTextSnippet": "...first 1500 chars of the rendered page text, as a verification backstop..."}
rawText / bodyTextSnippet are kept so you can verify or re-parse anything the regex-based field
extraction missed β nothing is hidden. Some heuristic fields (location on cards, title/author
on reviews, ratingDistribution) can come back null if TripAdvisor's current markup doesn't
expose them β the structured JSON-LD fields and the raw text are always there as fallbacks.
If a page couldn't be read, you get a single honest item instead, e.g.:
{ "error": "BLOCKED: TripAdvisor served an anti-bot/challenge page instead of content at ...", "url": "..." }
Other possible error values: NO_ITEMS_MATCHED / NO_ITEMS_PARSED (TripAdvisor changed its
markup or showed an unrelated page), TIMEOUT (nothing rendered in time), NAVIGATION_FAILED
(after retries), or a plain input-validation message.
How it works
- Launches real Chromium (Playwright) through Apify's RESIDENTIAL proxy with realistic headers and viewport, rotating browser/proxy sessions so one soured IP can't poison a whole run.
- For
searchQuery, openshttps://www.tripadvisor.com/Search?q=...; forurls, opens each URL directly, classified as a detail page or a listing page by TripAdvisor's own stable URL patterns. - Dismisses TripAdvisor's cookie-consent (OneTrust) banner and common interstitials.
- Detects an anti-bot/CAPTCHA challenge page by its text and retries with a fresh proxy
session (up to 4 attempts) before giving up and reporting
BLOCKED. - On a search/listing page: scrolls to trigger lazy loading, waits for real category result links to render, then extracts each card (name, rating, review count, price, location, thumbnail, position) anchored on those links β de-duplicated by TripAdvisor's own numeric place id. If no cards render, it follows the category's "see all" listing-page link once before giving up honestly.
- On a detail page: waits for the
<h1>, then mines both the rendered DOM and TripAdvisor's schema.org JSON-LD + Open Graph tags for name, rating, review count, ranking, structured address, GPS coordinates, phone, website, price, cuisines, hotel class, amenities, hours and photos β and, ifmaxReviews> 0, walks review pagination to collect enriched reviews.
Notes
- TripAdvisor's markup is obfuscated/React-rendered and changes over time; extraction combines
stable URL-pattern anchors, schema.org JSON-LD and regex/heuristics over rendered text and
aria-labels.rawText/bodyTextSnippetare always included as a source-of-truth backstop. - Residential proxy IPs and TripAdvisor's own bot defenses mean an occasional run may still hit a challenge page after retries β when that happens the Actor says so plainly rather than pretending to have data.
- Setting
maxReviews: 0for a search/listing run is the cheap/fast mode (one page load covers up tomaxItemsplaces). SettingmaxReviews> 0 opens one extra page load per place (plus review pagination pages for deep review pulls).
β Enjoying this Actor?
A quick rating/review helps others find it. Found a query pattern TripAdvisor didn't render right? Open a ticket on the Issues tab.