TripAdvisor Scraper 💰$0.45/1k | Hotels Restaurants Reviews
Pricing
from $0.45 / 1,000 results
TripAdvisor Scraper 💰$0.45/1k | Hotels Restaurants Reviews
TripAdvisor reviews, place data & hotel prices at $0.45/1k, 4x below the leader. Hotels, restaurants, attractions, tours & cruises: search a city or paste URLs or IDs. Filter reviews by rating, language & date, hotels by stars & price. Original text, Q&A, only new reviews. JSON, CSV.
Pricing
from $0.45 / 1,000 results
Rating
5.0
(2)
Developer
Muhamed Didovic
Maintained by CommunityActor stats
0
Bookmarked
119
Total users
29
Monthly active users
7.2 hours
Issues response
9 hours ago
Last modified
Categories
Features
Share
TripAdvisor Scraper: Hotels, Restaurants, Attractions & Reviews
Scrape TripAdvisor reviews and place data at $0.45 per 1,000 results, about 4x below the category leader's entry price, from one actor. Paste any hotel, restaurant, attraction, or tour URL, a bare TripAdvisor location ID, a city's listing page, or just a city name. Get review rows that already carry the place's metadata (rating, address, geo, ranking, rating histogram), or one rich row per place with amenities, category scores, hours, and nearby venues. Filter by star rating, language, date range, trip type, month, and keyword, keep only reviews in their original language, schedule it to collect only new reviews, and export JSON, CSV, or Excel.
Why Use This Scraper?
- ✅ Cheapest serious option — $0.45/1,000 results. The category leader charges around $1.90/1,000 at its entry tier. Same review data, a fraction of the bill.
- ✅ One actor, not two. Reviews and place snapshots come from the same run — no separate "find places" actor feeding a separate "reviews" actor.
- ✅ Hotels, restaurants, attractions, tours, and cruise ships — every place type, all through one input.
- ✅ Review + place metadata in every row. Each review already carries
placeInfo(rating, address, lat/lng, ranking, histogram). No follow-up enrichment step. - ✅ Review filters for star rating, language, trip type, month of visit, keyword in the text, and sort order, plus a from/to date range (absolute or relative).
- ✅ Original text or translation, your call. TripAdvisor shows many reviews as machine translations. Every row says so in
isMachineTranslatedandoriginalLanguage, and one switch keeps only reviews in the words the reviewer wrote. - ✅ Hotel prices from booking sites. Every hotel comes with nightly prices from Booking.com, Expedia, Hotels.com, the hotel's own site and others, for your dates and in your currency, before and with taxes. Narrow a city's hotels down by stars, traveler rating and nightly price.
- ✅ URLs or location IDs. Already have TripAdvisor IDs in a spreadsheet? Paste
208453ord208453and the actor finds the place, whatever its type. - ✅ Search-query → geo expansion. Type
"Chicago"and let the actor discover hotels, restaurants, and attractions for that location. - ✅ Optional reviewer profiles and contact-email enrichment.
- ✅ Flat, nested, or place-only output for whatever your pipeline expects, plus an optional Markdown version of every row (
markdownContent) ready for an LLM or a RAG index. - ✅ Monitoring mode. Schedule it with
onlyNewReviews: trueand every run returns only the reviews published since the previous one, so you never pay twice for the same review. - ✅ Any TripAdvisor country site. Links from tripadvisor.co.uk, .de, .fr, .it, .es, .com.au and the rest are accepted as they are.
Overview
The TripAdvisor Scraper is built for reputation teams, market analysts, researchers, and agencies who need structured review data from TripAdvisor without stitching together multiple tools.
By default the output is review-shaped: one dataset row per review, each carrying a compact placeInfo block for the parent hotel/restaurant/attraction. That means even if you start from a listing URL (a city's restaurants hub) or a search query, the run still resolves down to a stream of review rows — not separate "listing" rows.
Two other shapes are available when you need them:
- Place-only snapshots (
scrapeReviews: false) — one rich row per place (ranking, amenities, category scores, nearby venues) and no reviews. Fast and low-cost for competitor monitoring. - Nested (
outputShape: "nested") — one row per place with areviews[]array inside.
Supported Inputs
URL types
| URL type | Pattern | Example |
|---|---|---|
| Hotel place | Hotel_Review-g{geo}-d{id}-Reviews-{slug}.html | https://www.tripadvisor.com/Hotel_Review-g60763-d208453-Reviews-Hilton_New_York_Times_Square-New_York_City_New_York.html |
| Restaurant place | Restaurant_Review-g{geo}-d{id}-Reviews-{slug}.html | https://www.tripadvisor.com/Restaurant_Review-g60763-d25324283-Reviews-Allora_Fifth_Ave-New_York_City_New_York.html |
| Attraction place | Attraction_Review-g{geo}-d{id}-Reviews-{slug}.html | https://www.tripadvisor.com/Attraction_Review-g60763-d105123-Reviews-Statue_of_Liberty-New_York_City_New_York.html |
| Tour / activity | AttractionProductReview-g{geo}-d{id}-{slug}.html | https://www.tripadvisor.com/AttractionProductReview-g60763-d11451132-Statue_of_Liberty_Ellis_Island_Tour_with_Reserved_Ferry_Entry-New_York_City_New_Yor.html |
| Single review | ShowUserReviews-g{geo}-d{id}-r{review}-{slug}.html | https://www.tripadvisor.com/ShowUserReviews-g60763-d208453-r1083675907-Hilton_New_York_Times_Square-New_York_City_New_York.html |
| Cruise ship | Cruise_Review-d{id}-Reviews-{ship} | https://www.tripadvisor.com/Cruise_Review-d15611482-Reviews-Oasis_of_the_Seas |
| Cruise listing | Cruises-g{geo}-{region}-Cruises | https://www.tripadvisor.com/Cruises-g147237-Caribbean-Cruises (81 ships, from every cruise line it lists) |
| Vacation rentals | VacationRentals-g{geo}-… | https://www.tripadvisor.com/VacationRentals-g60763-Reviews-New_York_City_New_York-Vacation_Rentals.html (read as the city's apartments and villas) |
| Restaurants GEO hub | Restaurants-g{geo}-…{City}.html | https://www.tripadvisor.com/Restaurants-g35805-Chicago_Illinois.html |
| Hotels GEO hub | Hotels-g{geo}-…-Hotels.html | https://www.tripadvisor.com/Hotels-g60763-New_York_City_New_York-Hotels.html |
| Attractions GEO hub | Attractions-g{geo}-Activities-…html | https://www.tripadvisor.com/Attractions-g60763-Activities-New_York_City_New_York.html |
| Restaurant finder | FindRestaurants?geo=…&establishmentTypes=… | https://www.tripadvisor.com/FindRestaurants?geo=188673&establishmentTypes=10591&broadened=false |
Listing/hub URLs expand into individual place URLs (up to maxPlacesPerSearch venues each, 300 by default), then each is scraped like a standalone place. maxItems applies per resolved place.
Links from TripAdvisor's country sites (tripadvisor.co.uk, tripadvisor.de, tripadvisor.com.au, …) work the same way as www.tripadvisor.com links.
Copy-pasteable startUrls
{"startUrls": [{ "url": "https://www.tripadvisor.com/Hotel_Review-g60763-d208453-Reviews-Hilton_New_York_Times_Square-New_York_City_New_York.html" },{ "url": "https://www.tripadvisor.com/Restaurant_Review-g60763-d25324283-Reviews-Allora_Fifth_Ave-New_York_City_New_York.html" },{ "url": "https://www.tripadvisor.com/Restaurants-g35805-Chicago_Illinois.html" }]}
Location IDs
The number after -d in a place URL is its location ID. Hotels, restaurants, attractions, and tours all work, with or without the d:
{"locationIds": ["208453", "d25324283", "11451132"],"maxItems": 20}
IDs pasted into startUrls are picked up too. An ID that matches no place is named in the run log and skipped.
Search / keyword mode
{"searchQuery": "Chicago","includeHotels": true,"includeRestaurants": true,"includeThingsToDo": true,"maxItems": 20}
Unsupported inputs
- ❌ Flights. TripAdvisor lists apartments and villas among its hotels, so get them with
hotelTypes(condo,villa). - ❌ Non-TripAdvisor hosts and login-gated content.
Use Cases
| Audience | Use case |
|---|---|
| Hotel & restaurant ops | Daily review monitoring and owner-response SLA tracking |
| Reputation managers | Multi-property dashboards with rating-histogram drift over time |
| Market analysts | Competitive benchmarks across cities or chains using placeInfo.rating + numberOfReviews |
| Content / NLP teams | Multilingual review corpora for sentiment and topic models, filtered by language and rating, with machine translations left out |
| Guest experience leads | Complaint mining: 1- and 2-star reviews from the last quarter, broken down by subratings (cleanliness, service, value…) |
| Owner-response audits | Which negative reviews never got a reply (ownerResponse: null), per property or per chain |
| Seasonality analysis | Reviews by month of visit (months) and traveler type (tripTypes) to see who comes when and what they think |
| Researchers | One-shot dataset exports for BI, lake, or warehouse ingestion |
| Agencies | Client-ready TripAdvisor datasets without writing or maintaining a scraper |
How It Works

- Input — provide one or more TripAdvisor URLs, location IDs, or a free-text
searchQuery(a city name). - Resolve — a
searchQuerybecomes a geoId, then expands into hotels, restaurants, attractions, and tours per theinclude*toggles. Listing/hub URLs expand into place URLs. Location IDs are looked up to their place. Plain place URLs are used directly. - Place data — read each place's public data into
placeInfo(rating, review count, address, geo, ranking, and more). - Reviews — collect reviews page by page, with your rating, language, trip-type, month, and keyword filters applied by TripAdvisor; the date range and original-language filter are applied as pages arrive, and paging stops once reviews fall before
lastReviewDate. - Optional enrichment — attach reviewer profiles (
scrapeReviewerInfo) and contact emails (enrichEmails). - Output — emit flat review rows (default), nested place rows, or place-only snapshots. Locations that yield 0 reviews or fail land in a side
tripadvisor-failuresdataset.
Input Configuration
| Field | Type | Default | Notes |
|---|---|---|---|
searchQuery | string | — | Free-text location (e.g. "Chicago"). Resolved to a geoId, then expanded by the include* toggles. Use with or instead of startUrls. |
startUrls | array of { url } | [] | Place URLs and/or listing/hub URLs. Listing URLs expand to venues; place URLs are scraped directly. |
locationIds | array | [] | TripAdvisor location IDs (208453 or d208453) for any place type. Each is looked up to its place URL. |
maxPlacesPerSearch | integer | 300 | How many places one listing URL or searchQuery category expands to. 0 = up to 3,000. |
maxItems | integer | 50 | Max reviews per place / per URL. 0 = as many as TripAdvisor serves. |
scrapeReviews | boolean | true | true → fetch reviews. false → emit one place-only snapshot row per place (no reviews). |
scrapeReviewerInfo | boolean | true | Populate each review's user object (username, hometown, contributions, avatar, profile link). false → user: null. |
includeReviewTags | boolean | true | Include placeInfo.reviewTags (theme phrases + counts) when TripAdvisor embeds them. |
includeHotels | boolean | true | With searchQuery, include hotels for the resolved geo. |
includeRestaurants | boolean | true | With searchQuery, include restaurants for the resolved geo. |
includeThingsToDo | boolean | true | With searchQuery, include attractions for the resolved geo. |
includeTours | boolean | false | With searchQuery, also include the city's tours and activities (boat tours, museum passes, food tours…). |
includeNearby | boolean | false | After each place, add up to 5 nearby venues as place-only snapshot rows (isNearbyResult: true). Depth capped at 1. |
outputShape | enum flat / nested | flat | flat = one row per review. nested = one row per place with reviews[]. No effect when scrapeReviews: false. |
checkInDate | string | a week from today | Check-in date for hotel prices (YYYY-MM-DD). |
checkOutDate | string | one night later | Check-out date for hotel prices. With several nights, prices are the average per night. |
currency | string | USD | 3-letter code for hotel and tour prices: EUR, GBP, CHF, JPY, … |
hotelClass | array | [] | City searches and Hotels-g… listings: only hotels with these stars, "2"–"5". |
hotelTypes | array | [] | Same listings: only these property types, such as hotel, bed_and_breakfast, condo, villa, hostel, resort. |
hotelMinRating | string | — | Same listings: minimum traveler rating, "5", "4", "3" or "2" (and up). |
hotelPriceMin / hotelPriceMax | integer | — | Same listings: nightly price range in currency, for the dates above. |
includeMarkdown | boolean | false | Add markdownContent to every row: the review, or the whole place, as Markdown for LLM prompts and RAG. No extra charge. |
lastReviewDate | string | — | Skip reviews before this date. Absolute YYYY-MM-DD or relative 22 days / 3 weeks / 6 months / 1 year. |
reviewsUntilDate | string | — | Skip reviews after this date (the day itself counts). Same formats. With lastReviewDate it gives a date range. |
reviewRatings | array | ["ALL_REVIEW_RATINGS"] | Filter by star rating: "1"–"5" or ALL_REVIEW_RATINGS. |
reviewsLanguages | array | ["ALL_REVIEW_LANGUAGES"] | Filter by ISO 639-1 language codes, or ALL_REVIEW_LANGUAGES. Several languages are read one after another and share maxItems. TripAdvisor also returns reviews machine-translated into each language. It filters by 29 languages (en, it, es, fr, de, pt, nl, ru, ja, zh, ko and more); a language it cannot filter by is skipped with a note in the log. |
excludeMachineTranslated | boolean | false | Keep only reviews whose text is what the reviewer wrote. |
sortBy | enum | default | Review order: default, most_recent, oldest, detailed, insightful. |
includeOriginalText | boolean | false | Add originalTitle and originalText to machine-translated reviews. $0.001 per review that gets its original text. Slower. |
includeQuestionAnswers | boolean | false | Add the place's visitor questions, newest first, each with every answer, on place-only and nested rows. $0.001 per question saved with its answers. Slower. |
maxQuestionsPerPlace | integer | 10 | With includeQuestionAnswers: questions per place. 0 saves all of them. |
includeHotelClassAndRooms | boolean | false | Add hotelClass, hotelClassAttribution and numberOfRooms to every hotel. $0.001 per hotel where TripAdvisor shows them. Slower. |
tripTypes | array | [] | Keep reviews from these traveler types: Families, Couples, Solo, Business, Friends. |
months | array | [] | Keep reviews from these months of visit (1–12). |
searchKeyword | array | [] | Keep reviews that mention these words. |
onlyNewReviews | boolean | false | Monitoring: return only reviews published since the previous run, per place. Remembered in the tripadvisor-seen-reviews key-value store in your account. |
newReviewsStateKey | string | — | Optional name that gives a task its own monitoring memory when several tasks watch the same place. |
sourceDatasetId | string | — | Dataset of a finished listing or search run; every place URL in it is added to startUrls. |
proxy | object | Apify Residential | Proxy configuration. Residential is strongly recommended. |
enrichEmails | boolean | false | Find a contact email per place (from its website or by discovery). Adds contactEmail, contactWebsite, and an emailEnrichment object. Billed only when an email is found. |
Common scenarios
1. All reviews for a single hotel, with reviewer info
{"startUrls": [{ "url": "https://www.tripadvisor.com/Hotel_Review-g60763-d208453-Reviews-Hilton_New_York_Times_Square-New_York_City_New_York.html" }],"maxItems": 0,"scrapeReviewerInfo": true}
2. Recent 5-star English reviews across a city's restaurants
{"startUrls": [{ "url": "https://www.tripadvisor.com/Restaurants-g35805-Chicago_Illinois.html" }],"reviewRatings": ["5"],"reviewsLanguages": ["en"],"lastReviewDate": "6 months","maxItems": 30}
3. Place-only competitor snapshots (no reviews)
{"searchQuery": "Brooklyn","includeHotels": true,"includeRestaurants": true,"includeThingsToDo": false,"scrapeReviews": false}
4. Daily monitoring of new reviews (run it on a schedule)
{"startUrls": [{ "url": "https://www.tripadvisor.com/Hotel_Review-g60763-d208453-Reviews-Hilton_New_York_Times_Square-New_York_City_New_York.html" }],"onlyNewReviews": true,"maxItems": 200}
The first run returns the latest reviews. Every later run returns only reviews published after them, and a run with nothing new ends successfully with "No new reviews since the last run" and no charge for results.
5. Complaints from one quarter, in the reviewers' own words
{"startUrls": [{ "url": "https://www.tripadvisor.com/Hotel_Review-g60763-d208453-Reviews-Hilton_New_York_Times_Square-New_York_City_New_York.html" }],"reviewRatings": ["1", "2"],"lastReviewDate": "2026-07-01","reviewsUntilDate": "2026-09-30","excludeMachineTranslated": true,"maxItems": 0}
6. 4- and 5-star hotels under €300 a night, with prices for your dates
{"searchQuery": "Paris","includeHotels": true,"includeRestaurants": false,"includeThingsToDo": false,"scrapeReviews": false,"checkInDate": "2026-12-07","checkOutDate": "2026-12-09","currency": "EUR","hotelClass": ["4", "5"],"hotelPriceMax": 300,"maxPlacesPerSearch": 50}
Each hotel row lists every booking site's nightly price (offers[]) and the spread (priceRange, e.g. €329 - €333). When fewer hotels match than maxPlacesPerSearch, you get only the ones that match.
7. A list of location IDs from a spreadsheet, place data only
{"locationIds": ["208453", "25324283", "103887"],"scrapeReviews": false}
Output Overview
Each dataset item is, by default, one review row containing:
- Core —
id,url,title,text,rating,publishedDate,travelDate,tripType,lang,originalLanguage,isMachineTranslated - Reviewer —
userobject (username, hometown, contributions, avatar, profile link) whenscrapeReviewerInfo: true - Owner response —
ownerResponse(text + date) when the property replied - Extras —
subratings[],photos[],helpfulVotes - Parent place —
placeInfo(name, type, rating, web URL, and more)
When scrapeReviews: false, rows are { placeDetailOnly: true, placeInfo: {…} } with a much richer placeInfo (ranking, amenities, category scores, awards, opening hours, AI review summary, visitor questions, nearby venues and transport, histogram).
Output Samples
Flat review row (default)
{"rating": 5,"title": "Was wonderful bravo to Kayla","text": "Kayla was amazing and gave us great service","publishedDate": "2026-04-26","travelDate": "2026-04","tripType": "COUPLES","helpfulVotes": 0,"subratings": [],"photos": [],"ownerResponse": null,"user": {"name": "Dubi Shoshan","username": "OnAir02493636276","userLocation": { "name": "Yehud, Israel" },"contributions": { "totalContributions": 1 },"link": "www.tripadvisor.com/Profile/OnAir02493636276"},"lang": "en","publishedPlatform": "MOBILE","url": "https://www.tripadvisor.com/ShowUserReviews-g60763-d208453-r1058000050-Hilton_New_York_Times_Square-New_York_City_New_York.html","id": "1058000050","placeInfo": {"id": "208453","name": "Hilton New York Times Square","locationString": "New York City New York","type": "HOTEL","webUrl": "https://www.tripadvisor.com/Hotel_Review-g60763-d208453-Reviews.html"}}
Place-only snapshot (scrapeReviews: false)
{"placeDetailOnly": true,"placeInfo": {"type": "HOTEL","name": "LondonHouse Chicago, Curio Collection by Hilton","rating": 4.7,"numberOfReviews": 4941,"rankingString": "#4 of 215 hotels in Chicago","address": "85 E Wacker Drive, Chicago, IL 60601","latitude": 41.887833,"longitude": -87.62543,"ratingHistogram": { "count1": 62, "count2": 62, "count3": 150, "count4": 502, "count5": 4166 },"categoryReviewScores": [{ "categoryName": "Cleanliness", "roundedScore": 4.8 },{ "categoryName": "Location", "roundedScore": 4.9 }],"amenities": ["Valet parking", "Free High Speed Internet (WiFi)", "Rooftop bar", "Spa"],"id": "9145578","webUrl": "https://www.tripadvisor.com/Hotel_Review-g35805-d9145578-Reviews.html"}}
Key Output Fields
Review core
id,url,title,text,rating,lang,helpfulVoteslanguage(the language the text is in),originalLanguage(the language the reviewer wrote in),isMachineTranslated, and withincludeOriginalTextoriginalTitleandoriginalTexton translated reviews
Dates & trip
publishedDate,publishedPlatform,travelDate,stayDate,tripType
Reviewer (scrapeReviewerInfo: true)
user.name,user.username,user.isVerified,user.userLocation.name,user.contributions.totalContributions,user.avatar.image,user.link
Owner response & extras
ownerResponse.text,ownerResponse.publishedDate,subratings[],photos[]
Parent place (placeInfo)
placeInfo.name,placeInfo.type(HOTEL/EATERY/ATTRACTION/ACTIVITY/CRUISE),placeInfo.rating,placeInfo.webUrl,placeInfo.geoId- Place-only and nested rows add:
numberOfReviews,rankingString,locationString,ancestorLocations[](city, region or state, country),address,latitude,longitude,phone,website,ratingHistogram,categoryReviewScores[],photos[],awards[],aiReviewsSummary,questions[](visitor Q&A with answer counts, plusanswers[]withincludeQuestionAnswers),nearestMetroStations[],nearbyAirports[],roomTips[],nearbyLocations[],isClaimed - Hotels:
amenities[],languagesSpoken[],hotelClass("4.0", when the listing was filtered by stars or withincludeHotelClassAndRooms),numberOfRooms(withincludeHotelClassAndRooms),priceRange,checkInDate,checkOutDate, andoffers[]withvendor,pricePerNight(before taxes),tax,priceWithTaxes,priceText(as TripAdvisor shows it),currency,priceBeforeSale,details(e.g. free cancellation). Review rows carrypriceRangeand the dates only. Restaurants:cuisines[],mealTypes[],priceLevel,menuWebUrl,hours[],openNowText. Attractions and tours:suggestedDuration; tours alsopriceFrom
Markdown for AI (includeMarkdown: true)
markdownContent: a review row becomes title, rating, dates, reviewer, text, sub-ratings, owner response, and the place it belongs to. A place row becomes a document with ratings, category scores, the AI review summary, amenities, hours, awards, transport, visitor questions, and traveler tips. A nested row is the place document followed by its reviews.
Email enrichment (enrichEmails: true)
contactEmail,contactWebsite,emailEnrichment
How This Compares
| Capability | Category leader (two-actor funnel) | This actor |
|---|---|---|
| Price per 1,000 results | ~$1.90/1k at entry tier | $0.45/1k (~4x cheaper) |
| Places + reviews | Separate "find places" actor feeding a separate "reviews" actor | One actor does both |
| Hotels / restaurants / attractions | Split across actors | All three, one input |
| Review + place metadata in one row | Usually separate outputs | Yes — placeInfo on every review |
| Search-query → geo expansion | Varies | Built in (searchQuery) |
| Rating / language / date filters | Partial | Yes, pushed server-side |
| Reviewer profiles | Add-on | Optional (scrapeReviewerInfo) |
| Contact-email enrichment | No | Optional (enrichEmails, pay-on-hit) |
| Only new reviews on a schedule | Re-scrape and dedupe yourself | Built in (onlyNewReviews) |
| Trip type, month, keyword, sort filters | Partial | Yes |
| From/to date range | Usually "since" only | Yes (lastReviewDate + reviewsUntilDate) |
| Original vs machine-translated reviews | Not flagged | Flagged on every row, optional filter |
| TripAdvisor location IDs as input | Varies | Yes (locationIds) |
Honest scope: this actor does not cover flights. If you need those, it isn't the right tool.
FAQ
Which TripAdvisor URLs are supported?
Hotel, restaurant, and attraction place pages (…-g{geo}-d{id}-Reviews-…), tour and activity pages (AttractionProductReview-…), plus GEO listing hubs (Restaurants-g…, Hotels-g…, Attractions-g…) and the FindRestaurants?geo=… finder. Listing URLs expand to individual venues. Links from country sites such as tripadvisor.co.uk or tripadvisor.de work too. A single review link (ShowUserReviews-…) returns just that review.
Do I get review rows or place rows?
Review rows by default — one per review, each carrying a compact placeInfo. Set scrapeReviews: false for one place-only snapshot per place, or outputShape: "nested" for one place row with reviews[] nested.
How does maxItems work?
It caps reviews per place, applied independently to each URL and each venue discovered from a listing. Use 0 for as many as TripAdvisor serves.
Can I get every review of a huge place?
On most places, yes. On a few of TripAdvisor's largest places (the Colosseum, with over 150,000 reviews) the full list ends after about 9,000 reviews. The actor then carries on one language at a time from the date where the full list stopped: English first, then the other languages with the reviews written in them. Each review is saved once. Pages that fail to load are read again at the end of each list, so a passing error does not cost you reviews. A full run of the Colosseum saved 146,901 of its 151,328 reviews (97%), back to 2004, and took about 27 hours. Give such a run a long timeout (Console: Run options, Timeout), or set maxItems to what you need. The run log says how many were saved of the total. sortBy: "oldest" works the same way: it merges the language lists by date, so the Colosseum starts from its 2004 reviews.
Can I filter by rating, language, or date?
Yes. Star rating, language, trip type, month of visit, keyword, and sort order are applied by TripAdvisor itself, so you only pay for matching reviews. lastReviewDate and reviewsUntilDate (absolute or relative) give a date range; paging stops once reviews get older than lastReviewDate.
Are hotel prices per night? Do they include taxes?
Per night, for 2 adults in one room. With a stay of several nights it is the average night. pricePerNight is before taxes and fees, tax is the taxes and fees, and priceWithTaxes is the two together. priceText is the price as TripAdvisor shows it, which for some sites includes taxes and for others does not, so compare offers on the numbers. Leave the dates empty for one night a week from today.
Can I get only certain hotels from a city?
Yes. With a city searchQuery or a Hotels-g… listing URL, hotelClass keeps hotels with the given stars, hotelTypes keeps property types such as condos and villas, hotelMinRating sets a minimum traveler rating, and hotelPriceMin / hotelPriceMax set a nightly price range in currency for your dates. TripAdvisor applies them, so you only pay for hotels that match. They do not apply to single hotel URLs or location IDs.
Why do some reviews read like translations?
Because they are. TripAdvisor shows reviews written in other languages as machine translations, and a language filter brings in reviews translated into that language as well. Each row carries isMachineTranslated and originalLanguage. Turn on includeOriginalText to get the reviewer's own words next to the translation (originalTitle, originalText), or excludeMachineTranslated to keep only reviews that were not translated; add a language filter to keep one language.
Can I use TripAdvisor location IDs instead of URLs?
Yes. Put them in locationIds (208453 or d208453), or paste them into startUrls. The actor works out whether each one is a hotel, restaurant, attraction, or tour.
Doesn't TripAdvisor have an official API for this?
TripAdvisor's Content API is aimed at partners, needs an API key, and returns only a handful of the most recent reviews per location. This actor reads a place's public review list, with filters, and needs no key.
Are reviewer profiles and emails always present?
user is populated when scrapeReviewerInfo: true (the default). Contact emails require enrichEmails: true and only appear when one is actually found — you are never charged for a miss.
What isn't supported?
Flights. This actor covers hotels (with booking-site prices), restaurants, attractions, tours, and cruise ships: their reviews and place data. TripAdvisor lists apartments and villas among its hotels: a VacationRentals-g… link reads them, and hotelTypes picks them on any hotel listing.
Can I scrape private or login-gated content?
No. The actor only reads publicly available TripAdvisor pages.
What about blocks and rate limits?
Failed pages are retried automatically, and a place that could not be read is listed in the tripadvisor-failures dataset instead of being dropped. If TripAdvisor changes how its reviews load, the run fails with a clear message instead of finishing empty, so a scheduled pipeline notices.
How do I collect only new reviews on a schedule?
Set onlyNewReviews: true and run the actor (or a saved task) on an Apify schedule. Each run remembers the newest review per place and returns only reviews published after it. Keep maxItems above the number of reviews a place gets between runs, because reviews past the cap in one run are not picked up later.
Support
Found a bug or need a new feature? Open an issue on the Issues tab or email muhamed.didovic@gmail.com.
Additional Services
Need a custom output shape, a new URL type, extra fields, or scheduled monitoring? I build tailored scrapers and data pipelines — email muhamed.didovic@gmail.com.
Explore More Scrapers
If you found this useful, you might also like:
- Capterra Scraper — software listings + reviews
- TrustRadius Scraper — B2B product reviews
- Google Maps Reviews — local business reviews and place data
Full list at apify.com/memo23.
🤖 For AI Agents & LLM Apps
Compact reference for AI agents calling this actor via the Apify MCP server or the Apify API (actor: memo23/tripadvisor-scraper).
Purpose: Scrape TripAdvisor hotel, restaurant, and attraction reviews (plus place snapshots) from any place/listing URL or a city search query — every review row carries parent-place metadata.
Minimal input:
{"startUrls": [{ "url": "https://www.tripadvisor.com/Hotel_Review-g60763-d208453-Reviews-Hilton_New_York_Times_Square-New_York_City_New_York.html" }],"maxItems": 10}
Output: one dataset row per review — id, title, text, rating, lang, originalLanguage, isMachineTranslated, publishedDate, travelDate, tripType, helpfulVotes, user {name, username, isVerified, userLocation, contributions, link}, ownerResponse, subratings[], photos[], placeInfo {id, name, type, rating, webUrl, geoId}. With scrapeReviews:false, rows are {placeDetailOnly:true, placeInfo{…}}.
Behaviors an agent should know:
- Always set
maxItems(it caps reviews per place);maxItems:0means as many as TripAdvisor serves and can be very large. On its very largest places the full list ends after about 9,000 reviews, and the actor carries on one language at a time from there. Several languages inreviewsLanguagessharemaxItems. startUrls,locationIds, andsearchQuerycan be combined;searchQueryexpands viaincludeHotels/includeRestaurants/includeThingsToDo/includeTours, up tomaxPlacesPerSearchplaces per category.lastReviewDate+reviewsUntilDateselect a date range;excludeMachineTranslated:truedrops reviews TripAdvisor translated.includeMarkdown:trueaddsmarkdownContent(the row as Markdown) to every row, so the text can go into a prompt or a vector store without a formatter. It costs nothing extra.outputShape:"nested"returns one row per place withreviews[];scrapeReviews:falsereturns place-only snapshots.onlyNewReviews:truereturns only reviews newer than the previous run per place; a run with nothing new succeeds with 0 rows.- Billing: $0.45 / 1,000 results, where a result is one review (flat rows) or one place snapshot. A nested row bills each review it holds at the same rate. Plus $0.007 actor start (per GB of memory).
enrichEmailsis billed only when an email is found. - Tour pages (
AttractionProductReview-…) work like any place;includeTours:trueadds a city's tours to asearchQueryrun. - A single review link (
ShowUserReviews-…-r{id}-…) instartUrlsreturns that one review as a normal review row. - Hotels carry
placeInfo.offers[](one per booking site:vendor,pricePerNightbefore taxes,tax,priceWithTaxes,currency) andpriceRange, per night for 2 adults, forcheckInDate..checkOutDate(default: one night a week ahead) incurrency(default USD). - City searches and
Hotels-g…listings takehotelClass(["4","5"]),hotelMinRating("4"= 4 and up) andhotelPriceMin/hotelPriceMax(per night, incurrency). sortBy:"oldest"starts from a place's first reviews.includeOriginalText:trueaddsoriginalTitle/originalTextto translated reviews.includeQuestionAnswers:trueadds the visitor questions with their answers (maxQuestionsPerPlace, default 10) andincludeHotelClassAndRooms:truethe hotel class and room count. Each costs $0.001 per item found (review, question, hotel), nothing when nothing is found, and makes runs slower.- Cruise ships (
Cruise_Review-…) and listings (Cruises-g…) work like any place, withplaceInfo.typeCRUISE. - Not supported: flights.
⚠️ Disclaimer
This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Tripadvisor LLC or any of its subsidiaries. All trademarks mentioned are the property of their respective owners.
The scraper accesses only publicly available TripAdvisor pages — no authenticated endpoints, paid features, or content behind the tripadvisor.com login wall. Users are responsible for ensuring their use complies with TripAdvisor's Terms of Service, applicable data-protection law (GDPR, CCPA, etc.), and any contractual obligations of their own organization.
SEO Keywords
tripadvisor scraper, tripadvisor reviews scraper, tripadvisor hotel prices scraper, 5 star hotels scraper, tripadvisor location id scraper, tripadvisor reviews by date range, tripadvisor reviews for llm, tripadvisor rag dataset, tripadvisor hotels scraper, tripadvisor restaurants scraper, tripadvisor attractions scraper, tripadvisor review monitoring, new tripadvisor reviews, scrape tripadvisor, tripadvisor api, tripadvisor.com scraper, Apify tripadvisor, hotel reviews scraper, restaurant reviews scraper, attraction reviews scraper, tripadvisor hotel data, tripadvisor restaurant data, reviewer profile scraper, review sentiment data, reputation monitoring data, hospitality market research, travel reviews export, tripadvisor json export, tripadvisor csv export, competitive review intelligence, place metadata scraper