TripAdvisor Scraper 💰$0.45/1k | Hotels Restaurants Reviews avatar

TripAdvisor Scraper 💰$0.45/1k | Hotels Restaurants Reviews

Pricing

from $0.45 / 1,000 results

Go to Apify Store
TripAdvisor Scraper 💰$0.45/1k | Hotels Restaurants Reviews

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

Muhamed Didovic

Maintained by Community

Actor stats

0

Bookmarked

119

Total users

29

Monthly active users

7.2 hours

Issues response

9 hours ago

Last modified

Features

Limited permissions

Share

TripAdvisor Scraper

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.

TripAdvisor Scraper card

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 isMachineTranslated and originalLanguage, 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 208453 or d208453 and 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: true and 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 a reviews[] array inside.

Supported Inputs

URL types

URL typePatternExample
Hotel placeHotel_Review-g{geo}-d{id}-Reviews-{slug}.htmlhttps://www.tripadvisor.com/Hotel_Review-g60763-d208453-Reviews-Hilton_New_York_Times_Square-New_York_City_New_York.html
Restaurant placeRestaurant_Review-g{geo}-d{id}-Reviews-{slug}.htmlhttps://www.tripadvisor.com/Restaurant_Review-g60763-d25324283-Reviews-Allora_Fifth_Ave-New_York_City_New_York.html
Attraction placeAttraction_Review-g{geo}-d{id}-Reviews-{slug}.htmlhttps://www.tripadvisor.com/Attraction_Review-g60763-d105123-Reviews-Statue_of_Liberty-New_York_City_New_York.html
Tour / activityAttractionProductReview-g{geo}-d{id}-{slug}.htmlhttps://www.tripadvisor.com/AttractionProductReview-g60763-d11451132-Statue_of_Liberty_Ellis_Island_Tour_with_Reserved_Ferry_Entry-New_York_City_New_Yor.html
Single reviewShowUserReviews-g{geo}-d{id}-r{review}-{slug}.htmlhttps://www.tripadvisor.com/ShowUserReviews-g60763-d208453-r1083675907-Hilton_New_York_Times_Square-New_York_City_New_York.html
Cruise shipCruise_Review-d{id}-Reviews-{ship}https://www.tripadvisor.com/Cruise_Review-d15611482-Reviews-Oasis_of_the_Seas
Cruise listingCruises-g{geo}-{region}-Cruiseshttps://www.tripadvisor.com/Cruises-g147237-Caribbean-Cruises (81 ships, from every cruise line it lists)
Vacation rentalsVacationRentals-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 hubRestaurants-g{geo}-…{City}.htmlhttps://www.tripadvisor.com/Restaurants-g35805-Chicago_Illinois.html
Hotels GEO hubHotels-g{geo}-…-Hotels.htmlhttps://www.tripadvisor.com/Hotels-g60763-New_York_City_New_York-Hotels.html
Attractions GEO hubAttractions-g{geo}-Activities-…htmlhttps://www.tripadvisor.com/Attractions-g60763-Activities-New_York_City_New_York.html
Restaurant finderFindRestaurants?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

AudienceUse case
Hotel & restaurant opsDaily review monitoring and owner-response SLA tracking
Reputation managersMulti-property dashboards with rating-histogram drift over time
Market analystsCompetitive benchmarks across cities or chains using placeInfo.rating + numberOfReviews
Content / NLP teamsMultilingual review corpora for sentiment and topic models, filtered by language and rating, with machine translations left out
Guest experience leadsComplaint mining: 1- and 2-star reviews from the last quarter, broken down by subratings (cleanliness, service, value…)
Owner-response auditsWhich negative reviews never got a reply (ownerResponse: null), per property or per chain
Seasonality analysisReviews by month of visit (months) and traveler type (tripTypes) to see who comes when and what they think
ResearchersOne-shot dataset exports for BI, lake, or warehouse ingestion
AgenciesClient-ready TripAdvisor datasets without writing or maintaining a scraper

How It Works

How TripAdvisor Reviews Scraper works

  1. Input — provide one or more TripAdvisor URLs, location IDs, or a free-text searchQuery (a city name).
  2. Resolve — a searchQuery becomes a geoId, then expands into hotels, restaurants, attractions, and tours per the include* toggles. Listing/hub URLs expand into place URLs. Location IDs are looked up to their place. Plain place URLs are used directly.
  3. Place data — read each place's public data into placeInfo (rating, review count, address, geo, ranking, and more).
  4. 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.
  5. Optional enrichment — attach reviewer profiles (scrapeReviewerInfo) and contact emails (enrichEmails).
  6. 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-failures dataset.

Input Configuration

FieldTypeDefaultNotes
searchQuerystring—Free-text location (e.g. "Chicago"). Resolved to a geoId, then expanded by the include* toggles. Use with or instead of startUrls.
startUrlsarray of { url }[]Place URLs and/or listing/hub URLs. Listing URLs expand to venues; place URLs are scraped directly.
locationIdsarray[]TripAdvisor location IDs (208453 or d208453) for any place type. Each is looked up to its place URL.
maxPlacesPerSearchinteger300How many places one listing URL or searchQuery category expands to. 0 = up to 3,000.
maxItemsinteger50Max reviews per place / per URL. 0 = as many as TripAdvisor serves.
scrapeReviewsbooleantruetrue → fetch reviews. false → emit one place-only snapshot row per place (no reviews).
scrapeReviewerInfobooleantruePopulate each review's user object (username, hometown, contributions, avatar, profile link). false → user: null.
includeReviewTagsbooleantrueInclude placeInfo.reviewTags (theme phrases + counts) when TripAdvisor embeds them.
includeHotelsbooleantrueWith searchQuery, include hotels for the resolved geo.
includeRestaurantsbooleantrueWith searchQuery, include restaurants for the resolved geo.
includeThingsToDobooleantrueWith searchQuery, include attractions for the resolved geo.
includeToursbooleanfalseWith searchQuery, also include the city's tours and activities (boat tours, museum passes, food tours…).
includeNearbybooleanfalseAfter each place, add up to 5 nearby venues as place-only snapshot rows (isNearbyResult: true). Depth capped at 1.
outputShapeenum flat / nestedflatflat = one row per review. nested = one row per place with reviews[]. No effect when scrapeReviews: false.
checkInDatestringa week from todayCheck-in date for hotel prices (YYYY-MM-DD).
checkOutDatestringone night laterCheck-out date for hotel prices. With several nights, prices are the average per night.
currencystringUSD3-letter code for hotel and tour prices: EUR, GBP, CHF, JPY, …
hotelClassarray[]City searches and Hotels-g… listings: only hotels with these stars, "2"–"5".
hotelTypesarray[]Same listings: only these property types, such as hotel, bed_and_breakfast, condo, villa, hostel, resort.
hotelMinRatingstring—Same listings: minimum traveler rating, "5", "4", "3" or "2" (and up).
hotelPriceMin / hotelPriceMaxinteger—Same listings: nightly price range in currency, for the dates above.
includeMarkdownbooleanfalseAdd markdownContent to every row: the review, or the whole place, as Markdown for LLM prompts and RAG. No extra charge.
lastReviewDatestring—Skip reviews before this date. Absolute YYYY-MM-DD or relative 22 days / 3 weeks / 6 months / 1 year.
reviewsUntilDatestring—Skip reviews after this date (the day itself counts). Same formats. With lastReviewDate it gives a date range.
reviewRatingsarray["ALL_REVIEW_RATINGS"]Filter by star rating: "1"–"5" or ALL_REVIEW_RATINGS.
reviewsLanguagesarray["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.
excludeMachineTranslatedbooleanfalseKeep only reviews whose text is what the reviewer wrote.
sortByenumdefaultReview order: default, most_recent, oldest, detailed, insightful.
includeOriginalTextbooleanfalseAdd originalTitle and originalText to machine-translated reviews. $0.001 per review that gets its original text. Slower.
includeQuestionAnswersbooleanfalseAdd 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.
maxQuestionsPerPlaceinteger10With includeQuestionAnswers: questions per place. 0 saves all of them.
includeHotelClassAndRoomsbooleanfalseAdd hotelClass, hotelClassAttribution and numberOfRooms to every hotel. $0.001 per hotel where TripAdvisor shows them. Slower.
tripTypesarray[]Keep reviews from these traveler types: Families, Couples, Solo, Business, Friends.
monthsarray[]Keep reviews from these months of visit (1–12).
searchKeywordarray[]Keep reviews that mention these words.
onlyNewReviewsbooleanfalseMonitoring: return only reviews published since the previous run, per place. Remembered in the tripadvisor-seen-reviews key-value store in your account.
newReviewsStateKeystring—Optional name that gives a task its own monitoring memory when several tasks watch the same place.
sourceDatasetIdstring—Dataset of a finished listing or search run; every place URL in it is added to startUrls.
proxyobjectApify ResidentialProxy configuration. Residential is strongly recommended.
enrichEmailsbooleanfalseFind 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 — user object (username, hometown, contributions, avatar, profile link) when scrapeReviewerInfo: 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, helpfulVotes
  • language (the language the text is in), originalLanguage (the language the reviewer wrote in), isMachineTranslated, and with includeOriginalText originalTitle and originalText on 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, plus answers[] with includeQuestionAnswers), nearestMetroStations[], nearbyAirports[], roomTips[], nearbyLocations[], isClaimed
  • Hotels: amenities[], languagesSpoken[], hotelClass ("4.0", when the listing was filtered by stars or with includeHotelClassAndRooms), numberOfRooms (with includeHotelClassAndRooms), priceRange, checkInDate, checkOutDate, and offers[] with vendor, pricePerNight (before taxes), tax, priceWithTaxes, priceText (as TripAdvisor shows it), currency, priceBeforeSale, details (e.g. free cancellation). Review rows carry priceRange and the dates only. Restaurants: cuisines[], mealTypes[], priceLevel, menuWebUrl, hours[], openNowText. Attractions and tours: suggestedDuration; tours also priceFrom

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

CapabilityCategory leader (two-actor funnel)This actor
Price per 1,000 results~$1.90/1k at entry tier$0.45/1k (~4x cheaper)
Places + reviewsSeparate "find places" actor feeding a separate "reviews" actorOne actor does both
Hotels / restaurants / attractionsSplit across actorsAll three, one input
Review + place metadata in one rowUsually separate outputsYes — placeInfo on every review
Search-query → geo expansionVariesBuilt in (searchQuery)
Rating / language / date filtersPartialYes, pushed server-side
Reviewer profilesAdd-onOptional (scrapeReviewerInfo)
Contact-email enrichmentNoOptional (enrichEmails, pay-on-hit)
Only new reviews on a scheduleRe-scrape and dedupe yourselfBuilt in (onlyNewReviews)
Trip type, month, keyword, sort filtersPartialYes
From/to date rangeUsually "since" onlyYes (lastReviewDate + reviewsUntilDate)
Original vs machine-translated reviewsNot flaggedFlagged on every row, optional filter
TripAdvisor location IDs as inputVariesYes (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:

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:0 means 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 in reviewsLanguages share maxItems.
  • startUrls, locationIds, and searchQuery can be combined; searchQuery expands via includeHotels / includeRestaurants / includeThingsToDo / includeTours, up to maxPlacesPerSearch places per category.
  • lastReviewDate + reviewsUntilDate select a date range; excludeMachineTranslated:true drops reviews TripAdvisor translated.
  • includeMarkdown:true adds markdownContent (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 with reviews[]; scrapeReviews:false returns place-only snapshots.
  • onlyNewReviews:true returns 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). enrichEmails is billed only when an email is found.
  • Tour pages (AttractionProductReview-…) work like any place; includeTours:true adds a city's tours to a searchQuery run.
  • A single review link (ShowUserReviews-…-r{id}-…) in startUrls returns that one review as a normal review row.
  • Hotels carry placeInfo.offers[] (one per booking site: vendor, pricePerNight before taxes, tax, priceWithTaxes, currency) and priceRange, per night for 2 adults, for checkInDate..checkOutDate (default: one night a week ahead) in currency (default USD).
  • City searches and Hotels-g… listings take hotelClass (["4","5"]), hotelMinRating ("4" = 4 and up) and hotelPriceMin / hotelPriceMax (per night, in currency).
  • sortBy:"oldest" starts from a place's first reviews. includeOriginalText:true adds originalTitle / originalText to translated reviews. includeQuestionAnswers:true adds the visitor questions with their answers (maxQuestionsPerPlace, default 10) and includeHotelClassAndRooms:true the 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, with placeInfo.type CRUISE.
  • 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

⌂ 换网址