TripAdvisor Reviews Scraper — Search & Monitor avatar

TripAdvisor Reviews Scraper — Search & Monitor

Pricing

from $0.40 / 1,000 tripadvisor reviews

Go to Apify Store
TripAdvisor Reviews Scraper — Search & Monitor

TripAdvisor Reviews Scraper — Search & Monitor

TripAdvisor reviews scraper for hotels, restaurants, attractions, activities, airlines and cruises. Discover places by search or location ID, filter by rating, language, date, traveler type, keyword, helpful votes and owner replies, export summaries, use proxy fallback and monitor only new reviews.

Pricing

from $0.40 / 1,000 tripadvisor reviews

Rating

0.0

(0)

Developer

Rosario Vitale

Rosario Vitale

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Share

Why use this Actor?

TripAdvisor reviews scraper for hotels, restaurants, attractions, activities, airlines and cruises. Discover places by search or location ID, filter by rating, language, date, traveler type, keyword, helpful votes and owner replies, export summaries, use proxy fallback and monitor only new reviews.

Features

  • TripAdvisor place URLs — Direct TripAdvisor Hotel, Restaurant, Attraction/Activity, Airline or Cruise review URLs. Leave empty when using locationIds or searchQueries.
  • Maximum reviews per place — Maximum matching paid review rows emitted for each unique TripAdvisor place.
  • Maximum total reviews — Hard result cap across all places for predictable runtime and spend.
  • Ratings — Optional 1-5 rating filter. Empty means all ratings.
  • Review languages — Optional language codes such as en, it, de, fr or zh-TW. Only reviews written in these languages are returned, in their original text; each language is fetched separately for better coverage.
  • Translate reviews into English — On (default, as on tripadvisor.com): reviews written in other languages are returned machine-translated into English; originalLanguage keeps the language they were written in and isMachineTranslated is true. Off: every review keeps its original text, and language is the language it was written in. Useful for multilingual NLP and sentiment analysis.
  • Published after — Optional inclusive lower boundary: YYYY-MM-DD (e.g. 2026-01-31), ISO 8601, or a relative period such as 7 days, 2 weeks or 3 months, counted back from the run start (ideal for scheduled runs). Paging stops early once TripAdvisor's pages are well past this date, so date-limited runs finish faster.
  • Published before — Optional inclusive upper boundary: YYYY-MM-DD, ISO 8601, or a relative period such as 7 days, 2 weeks or 3 months, counted back from the run start.
  • Review text contains — Optional case-insensitive keyword across title and review text. Filtered rows are not billed.
  • Traveler types — Optional TripAdvisor traveler types such as COUPLES, FAMILY, FRIENDS, SOLO, BUSINESS.
  • Minimum helpful votes — Only emit reviews with at least this many helpful votes.
  • Owner/management reply — Return any reviews, only reviews with a management reply, or only reviews without one.

Use cases

  • Travel reputation monitoring.
  • Hotel and restaurant research.
  • Destination intelligence.
  • Review datasets.

Example input

{
"maxReviewsPerPlace": 500,
"maxTotalReviews": 5000,
"machineTranslation": true,
"minHelpfulVotes": 0,
"ownerReply": "any",
"sortOutput": "source"
}

Pricing & cost control

The primary event costs $0.000500 per TripAdvisor review (about $0.50 per 1,000 successful primary events). Only successful primary events are intentionally billed by this Actor; summary/status rows add context without adding primary-event charges.

Use the bounded input limits and filters to keep both event charges and platform usage predictable.

FAQ

What is this Actor for?
It is designed for travel reputation monitoring, hotel and restaurant research, destination intelligence.

Can I run it on a schedule?
Yes. You can schedule Actor runs on Apify and send the resulting dataset into automations, webhooks, storage, or downstream APIs.

How do I control cost and run size?
Use the input limits and filters shown in the Actor input form. The Actor applies bounded defaults and hard caps so large jobs remain predictable.

Pricing at a glance

Price per 1,000 TripAdvisor reviews
This Actor$0.50
Median of 8 comparable Apify Store Actors (October 2026)$0.50

The per-result price is in line with the typical Apify Store alternative, with the reliability and data features described below.

Subscriber discounts: on a paid Apify plan you pay even less per result — Bronze −10%, Silver −15%, Gold and higher −20% ($0.40 per 1,000 TripAdvisor reviews on Gold).

Apify platform usage (compute, storage, data transfer) is included — you pay only the result price plus a small run start fee ($0.0001 per GB of run memory). No surprise compute bill, even on long runs.

Use the run's maximum charge setting to cap spending — the Actor stops cleanly when the limit is reached.

Use it from AI agents (MCP) and code

AI agents — Claude, ChatGPT, Cursor, VS Code, n8n AI agents and any MCP client can run this Actor through the official Apify MCP server: add https://mcp.apify.com?tools=zenomastro/tripadvisor-reviews-reliable to your client. Then just ask, for example:

"Collect recent TripAdvisor reviews for this restaurant and list the most mentioned dishes and complaints."

The agent fills the input from the field descriptions and receives clean JSON it can reason over.

API — one HTTP call runs the Actor and returns the results directly:

curl -X POST "https://api.apify.com/v2/acts/zenomastro~tripadvisor-reviews-reliable/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"searchQueries": ["W Barcelona"], "maxDiscoveredPlaces": 1, "maxReviewsPerPlace": 1, "maxTotalReviews": 1, "maxPagesPerPlace": 2, "retries": 1, "autoProxyFallback": true}'

The same works from the Apify Python/JavaScript clients, Make, n8n, Zapier, LangChain and LlamaIndex integrations, or on a schedule.

Tip: paste TripAdvisor place URLs (or numeric location IDs) for the fastest and most reliable runs. Search by name is resolved through public web search, because TripAdvisor blocks automated search on its own site, so it is best effort.

What this TripAdvisor reviews scraper does

It collects public TripAdvisor reviews of hotels, restaurants, attractions and activities, airlines and cruises, and returns one clean row per review: rating, title, full text (original or English machine translation), publication date and time, month of the stay or visit, traveler type, sub-ratings (Service, Value, Rooms, ...), photos and photo count, reviewer tips, the owner's reply with the replier's name and role, and reviewer details.

It reads TripAdvisor's own public review data directly instead of rendering pages in a browser, so runs are fast and inexpensive. Every place also gets free summary rows: the exact 1-5 rating distribution and average rating of all its reviews, and insights over the reviews you collected.

Who it is for

  • Hotels, restaurants, attractions and agencies monitoring their reputation and answering new reviews quickly.
  • Market researchers and destination marketers comparing competitors, seasons and traveler types.
  • Data and AI teams building sentiment analysis, topic modelling or LLM pipelines (every review also comes as ready-to-use Markdown).
  • Developers and AI agents that need TripAdvisor reviews through an API, on a schedule or from an MCP client.

How to use it

  1. Paste one or more TripAdvisor place URLs into TripAdvisor place URLs (the form is prefilled with an example hotel).
  2. Set Maximum reviews per place and, if you like, filters such as ratings, dates, languages, traveler types or months of the visit.
  3. Click Start, then download the results as JSON, CSV, Excel or HTML from the Output tab, or read them through the API.

For a recurring report, save the input as a task, add a Review monitor name, turn on Emit only new reviews and schedule the task: every run then returns only reviews you have not received yet.

Input example

{
"placeUrls": [
"https://www.tripadvisor.com/Hotel_Review-g188107-d231860-Reviews-Beau_Rivage_Palace-Lausanne_Canton_of_Vaud.html"
],
"maxReviewsPerPlace": 200,
"ratings": ["1", "2"],
"reviewedAfter": "6 months",
"languageCodes": ["en", "fr"],
"visitMonths": ["6", "7", "8"],
"ownerReply": "no",
"includeReviewerInfo": false
}

This returns up to 200 one- and two-star reviews of the place, published in the last six months, written in English or French, about summer stays, that the owner has not answered yet, without the reviewers' personal data.

Output example

A review row (abridged, texts shortened), produced from a real TripAdvisor answer (reviewer identity replaced):

{
"recordType": "review",
"placeType": "HOTEL",
"locationId": 231860,
"locationName": "Beau-Rivage Palace",
"reviewId": "1078211116",
"reviewUrl": "https://www.tripadvisor.com/ShowUserReviews-g188107-d231860-r1078211116-Beau_Rivage_Palace-Lausanne_Canton_of_Vaud.html",
"rating": 5,
"title": "Luxury yes… but REAL LUXURY…",
"text": "In my opinion, this is the best address in Switzerland…",
"language": "en",
"originalLanguage": "fr",
"isMachineTranslated": true,
"publishedDate": "2026-09-17",
"publishedAt": "2026-09-17T22:08:13.282Z",
"stayDate": "2026-09-30",
"stayMonth": "2026-09",
"tripType": "COUPLES",
"helpfulVotes": 0,
"subratings": { "Value": 5, "Rooms": 5, "Location": 5, "Cleanliness": 5, "Service": 5, "Sleep Quality": 5 },
"photoCount": 4,
"photoUrls": ["https://dynamic-media-cdn.tripadvisor.com/media/v2/photo-o/34/a1/b3/c0/image.jpg?w=1200&h=1200&s=1"],
"reviewTips": [],
"hasOwnerReply": true,
"ownerReplyText": "Chère Madame, Cher Monsieur, Nous vous remercions…",
"ownerReplyDate": "2026-09-19",
"ownerReplyAuthor": "Sandoz Foundati... H",
"ownerReplyRole": "Directeur général",
"reviewerName": "Reviewer 5",
"reviewerContributions": 575,
"reviewerHometown": "Switzerland",
"isNew": null
}

Review rows also contain the reviewer's username, profile and avatar URLs and verification flag, additionalRatings, the full managementResponse, photos, markdownContent, createdDate, translationType, scan metadata and, with start URLs, your customData. stayDate is the last day of the month of the stay, as TripAdvisor has always reported it; stayMonth is that month. In this example TripAdvisor counts four photos and lists three of them.

The review_insights row computed over the six reviews of that same answer:

{
"recordType": "review_insights",
"reviewCount": 6,
"averageScore": 5,
"replyRatePercent": 83.33,
"scoreDistribution": { "5": 6 },
"subratingAverages": { "Value": 4.17, "Rooms": 5, "Location": 5, "Cleanliness": 5, "Service": 4.67, "Sleep Quality": 5 },
"tripTypeDistribution": { "COUPLES": 4 },
"languageDistribution": { "en": 2, "fr": 3, "de": 1 },
"withPhotosPercent": 16.67
}

Supported TripAdvisor URLs

  • Hotel, restaurant, attraction, activity (AttractionProductReview), airline and cruise review pages
  • a link to a single review (ShowUserReviews-...-d231860-r...): the reviews of its place are collected
  • any TripAdvisor domain, such as .com, .it, .co.uk or .de
  • numeric location IDs (the d-number in a place URL) in TripAdvisor location IDs

Filters

Filtering happens before any review is billed, so filtered-out reviews are free. You can combine:

  • Ratings (1-5 stars) - applied by TripAdvisor itself, so even rare ratings such as 1-star reviews of a large attraction need few requests
  • Published after / before - YYYY-MM-DD, ISO 8601 or a relative period such as 7 days, 2 weeks or 3 months counted back from the run start
  • Review languages - each language is read separately and only reviews written in it are returned, in their original text
  • Traveler types - COUPLES, FAMILY, FRIENDS, SOLO, BUSINESS (applied by TripAdvisor)
  • Months of the stay or visit - for example June to August for the summer season, across years
  • Review text contains - a case-insensitive word or phrase in the title or text
  • Minimum helpful votes and owner reply (any, with reply, without reply)

When fewer reviews than requested match, a free status row says how many reviews were scanned and how to search deeper.

Free place summary and review insights

With Include place summary (on by default) every place gets one place_summary row with its name, type and TripAdvisor's total review count, plus the exact rating distribution of all its reviews, for example "ratingCounts": {"1": 12, "2": 9, "3": 40, "4": 210, "5": 900}, and the mean of all those ratings as averageRating. The distribution comes from TripAdvisor's own counts (five tiny extra requests per place); airline pages get the total count only.

With Include review insights (on by default) every place also gets one review_insights row over the reviews returned for it: average rating, owner reply rate, rating distribution, average sub-ratings, traveler-type and language distributions, and the share of reviews with photos. Both rows are free.

Monitoring new reviews

Set Review monitor name (for example lausanne-hotels-weekly) on a scheduled task. Every review row then gets isNew, and with Emit only new reviews a run returns, and bills, only reviews that earlier runs of the same monitor did not deliver. Only reviews actually written to your dataset are remembered, so reviews skipped because of a spending limit come in the next run.

Your own IDs with start URLs

Start URLs with your own IDs accepts the same place URLs plus your own data per URL (userData, under Advanced in the editor). It comes back unchanged as customData on every row of that place, which makes it easy to join the results with a CRM, a sheet or another dataset:

{
"startUrls": [
{ "url": "https://www.tripadvisor.com/Restaurant_Review-g187265-d11827759-Reviews-La_Terrasse-Lyon_Rhone_Auvergne_Rhone_Alpes.html", "userData": { "crmId": "R-7" } }
]
}

Through the API you can also pass rows of another TripAdvisor dataset: any object with a url or webUrl field works.

Switching from another TripAdvisor reviews scraper

Field names used by other popular TripAdvisor review scrapers are accepted in the run input, so an existing API payload usually works unchanged:

Field in your payloadUsed as
startUrls with { "url": ... } objectsstartUrls (userData comes back as customData)
maxItemsPerQuery, maxReviews, reviewsPerPlacemaxReviewsPerPlace
lastReviewDate, sincereviewedAfter (also 7 days, 2 weeks, 3 months)
disableMachineTranslations: truemachineTranslation: false
scrapeReviewerInfo: falseincludeReviewerInfo: false

If you also set this Actor's own field to a value other than its default, your value wins over the alias.

Reviews without personal data

Turn off Include reviewer details to collect reviews without the reviewers' name, username, profile link, avatar, hometown and ID (the fields stay, empty). The review text, ratings, dates, photos and owner replies are kept. This helps with data minimisation, for example under the GDPR.

Reliability design

  • One bad place never fails the run. Invalid URLs, unavailable places and blocked requests get a free error row with a clear message; every other place is still scraped. Input mistakes end the run cleanly with one free error row that says what to change.
  • Direct first, proxy when needed. Requests go out directly (fastest); a place TripAdvisor blocks is retried through the Apify datacenter proxy, which is included in the price.
  • Bounded retries and timeouts with growing pauses after network errors, rate limits and temporary server errors.
  • Ends before the run timeout. The Actor watches the run timeout and stops shortly before it: everything collected so far is delivered, a free status row with stopReason: "runTimeout" says how far it got, and the run ends as succeeded.
  • Restart-safe. When the Apify platform migrates a run to another server, or when you resurrect a stopped run, it continues where it stopped: finished places are skipped and no review is delivered or charged twice. Progress is kept in the run's key-value store (record RUN_STATE).
  • Batched delivery. Reviews are written and charged in batches of 50, which keeps large runs fast.
  • Deep pages and source changes. When TripAdvisor stops serving a place part-way (seen around 10,000 reviews deep), the reviews collected so far are delivered and the summary says so (scanTruncated). If TripAdvisor retires the review query this Actor uses, the affected places get a clear error row and nothing is charged for them.
  • No duplicates. The same place given as URL, location ID, start URL or search result is scraped once, and a review is delivered at most once per run.
  • Spending limit respected. The run stops cleanly at the maximum charge you set.

Output row types

recordTypeBilledWhat it is
reviewyesOne TripAdvisor review.
place_summaryfreePlace name, type, total reviews, rating distribution and average rating.
review_insightsfreeStatistics over the reviews returned for a place.
place_discoveryfreeA place found by a search query.
statusfreeWhy a place returned no reviews, or that the run stopped before its timeout.
error, discovery_errorfreeAn invalid input, a place or search that failed, and what to change.

Pricing

$0.0005 per successfully emitted review (about $0.50 per 1,000 TripAdvisor reviews) plus a small start fee of $0.0001 per GB of run memory. Apify platform usage is included in the price. Subscribers on paid Apify plans pay less per review (Bronze −10%, Silver −15%, Gold and higher −20%).

Only successful review rows trigger the paid review event. Summary rows, insights rows, status rows, errors, retries, duplicates, and filtered-out reviews are free.

Spend controls

Use maxReviewsPerPlace, maxTotalReviews, maxPagesPerPlace, and Apify's maximum-total-charge setting to bound runtime and spend.

Limits and source behavior

  • TripAdvisor controls which public reviews and fields it serves. Some reviews have no photos, owner reply, traveler type, hometown or sub-ratings; missing data is returned empty rather than invented.
  • TripAdvisor stops serving reviews around 10,000 deep for a place (or a language list), so the most recent reviews of very large places are the ones available.
  • TripAdvisor records only the month of a stay or visit, and since October 2026 a single review date (createdDate equals publishedDate). accommodationCategory and publishPlatform are no longer provided (null; the fields are kept so existing integrations do not break).
  • Output order only reorders the reviews collected in a run; TripAdvisor itself returns reviews newest first.
  • Search by name is best effort (see the tip above). The rating distribution is not available for airline pages.

More questions

Can I get reviews in their original language? Yes. Turn off Translate reviews into English, or select review languages: reviews then keep the text and language they were written in.

Will a review ever be charged twice? No. Within a run, and across a platform migration or a resurrected run, every review is delivered and charged at most once. With a monitor name, later runs can also skip reviews delivered earlier.

My run stopped with "Stopped shortly before the run timeout". What now? Everything in the dataset is complete. Resurrect the run to continue with the remaining places; you can give the resurrected run a longer timeout. It does not repeat or re-charge any review. Or start a new run with a longer timeout or fewer places.

Why did I get fewer reviews than requested? Selective filters can use up the scan window before enough reviews match. The free status row tells you how many reviews were scanned; raise Maximum source pages per place or relax the filters.

Responsible use

This Actor reads public review/profile information. Use reviewer names, text, travel details, photos, and responses in accordance with applicable privacy, copyright, data-protection requirements, and TripAdvisor's applicable terms. Do not use the output to harass, deanonymize, or build sensitive profiles of reviewers. If you do not need reviewer details, turn off Include reviewer details.

Support

For a reproducible issue, provide the public TripAdvisor URL, relevant filters, proxy mode, and Apify run ID. Never include API tokens, proxy passwords, or private credentials.

Extended capabilities

  • Target places with TripAdvisor review URLs, numeric location IDs, or public typeahead searches for a place, brand, or destination.
  • Cover hotels, restaurants, attractions/activities, airlines, and cruises with rating, language, date, text, trip-type, helpfulness, and owner-response filters.
  • Preserve reviewer/place metadata, sub-ratings, photos, owner replies, free summaries and insights, persistent new-review monitoring, and LLM-ready Markdown.
  • Use direct-first review collection with bounded retries plus optional automatic Apify Proxy fallback.