TripAdvisor Reviews avatar

TripAdvisor Reviews

Pricing

from $0.35 / 1,000 review scrapeds

Go to Apify Store
TripAdvisor Reviews

TripAdvisor Reviews

One flat row per TripAdvisor review for restaurants and attractions: rating, title, full text, trip type, stay date, reviewer and the owner reply.

Pricing

from $0.35 / 1,000 review scrapeds

Rating

0.0

(0)

Developer

Superslow Sloth

Superslow Sloth

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Share

One flat row per review, for TripAdvisor restaurants and attractions.

Give it place URLs or TripAdvisor location ids and it returns the reviews as a table: rating, title, the full review text, the trip type, the month of the visit, who wrote it and where they are from, how many people found it helpful, and the owner's public reply when there is one. Every row also carries the place's id, name and URL, so several places can go into one dataset and still be told apart.

Hotels do not work, and here is the measurement

Hotel properties are refused. Restaurants and attractions are served normally; asking for a hotel returns HTTP 403 from TripAdvisor's anti-bot layer, on every configuration tried.

Measured on the Apify platform on 2026-08-25, all through the residential proxy, against d93589 (The Michelangelo New York) and d302346:

VariedValues triedResult
TLS fingerprintchrome, chrome124, chrome131, chrome133a, safari18_0, firefox133403 on all six
Exit address10 residential addresses per profile, rotated on each refusal403 on all
URL path prefixHotel_Review, Restaurant_Review, Attraction_Review for the same hotel id403 on all three
Language filterwith and without ?filterLang=403 both ways
Session warm-upwith and without a prior request to establish cookies403 both ways

The refusal follows the location id, not the URL shape: requesting a hotel's id under the Restaurant_Review prefix - which works fine for actual restaurants - is still refused. In the same runs, restaurant and attraction ids returned full review payloads. That is what rules out the fingerprint, the address pool and the URL builder as the cause, and points at TripAdvisor gating hotel inventory specifically.

Hotel URLs are still accepted as input rather than rejected, so that the day this changes the actor simply starts working. A run that is refused says so in the log and in failures, and no review events are charged for it.

Input

FieldWhat it does
startUrlsPlace pages to scrape. Paste the URL as it appears in your browser.
locationIdsTripAdvisor location ids - the digits after -d in a place URL, e.g. 93589. Use instead of or alongside the URLs.
maxReviewsReviews to collect per place, not per run. Three hotels at 100 means up to 300 rows. Default 100.
languageTwo-letter code (en, fr, de, ja, th, …) to take only reviews in one language. Empty means every language.
proxyConfigurationMust be Apify Proxy with the RESIDENTIAL group. See below.
{
"startUrls": [
{ "url": "https://www.tripadvisor.com/Hotel_Review-g60763-d93589-Reviews-The_Michelangelo_New_York-New_York_City_New_York.html" }
],
"maxReviews": 100,
"language": "en",
"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
}

TripAdvisor identifies a place by the -d number and rewrites the rest of the URL itself, so a link to a place that has since been renamed still resolves, and a bare location id is enough on its own.

Output

One row per review:

FieldNotes
place_id, place_name, place_url, place_typeThe place. place_type is TripAdvisor's own classification, e.g. EATERY, ACCOMMODATION.
review_id, review_urlStable identifiers for the review itself.
title, textThe headline and the full prose, newlines intact.
rating1-5.
published_date, created_dateISO dates. They differ when a review sat in moderation.
stay_dateWhen the reviewer says they visited - not when they wrote it.
trip_typeFAMILY, COUPLES, BUSINESS, FRIENDS, SOLO, or null.
languageThe language the review was written in.
reviewer_id, reviewer_name, reviewer_location, reviewer_contributionsWho wrote it. reviewer_location is the free-text home town they set.
helpful_votesHow many readers marked it helpful.
owner_response_text, owner_response_dateThe business's public reply.

Nulls mean "not stated", never zero

A field is null when TripAdvisor did not supply it, and it is never defaulted to 0 or "" to fill the column. helpful_votes is the one worth being careful with: 0 means TripAdvisor reported zero votes, while null means the field was absent. Writing a zero for an absent value would read as a measurement, which is the one thing it is not.

Reviewers frequently leave reviewer_location unset and TripAdvisor often has no trip_type for attraction reviews, so expect nulls in both.

The residential proxy is required, not optional

TripAdvisor is fronted by DataDome, which scores the exit address as well as the TLS fingerprint of the client. Measured on 2026-08-25: a plain HTTP client and a fingerprint-matched one - impersonating twelve different Chrome, Safari, Firefox and Edge builds - were all answered with HTTP 403 and a challenge page from an ordinary address. Datacenter proxies are refused the same way.

The default input uses RESIDENTIAL, which is the configuration this actor is built and priced around. Running it without a proxy produces a run that charges the start fee and returns nothing, so the actor logs a warning when it finds no proxy configured.

When a page is refused, the run treats it as temporary, takes a new exit address and tries again, rather than giving up on the place.

Occasionally a whole run is refused

TripAdvisor's anti-bot layer scores the exit address, and the residential pool contains addresses it has already scored. Usually one of the first couple of addresses is accepted; sometimes every address a run draws is refused and the run returns nothing.

Measured over seven consecutive identical runs on 2026-08-25: six returned the full 60 rows on the first or second address, one exhausted all ten attempts on each of its three places and returned zero.

What that means for a buyer:

  • You are not charged per review for reviews you did not get. A refused run charges the actor-start event and nothing else, and it says why in the log.
  • Re-running is the fix, and it usually succeeds immediately, because the addresses are drawn afresh.
  • Each place gets ten attempts with a fresh exit address and a backoff between them, so a run that is going to fail takes a couple of minutes to say so.

Pricing

Pay per event: a small charge when a run starts, then one charge per review row. A run that legitimately finds nothing still covers its fixed cost; a run that finds 400 reviews is billed for 400 rows.

Limits worth knowing before you buy

  • maxReviews rounds up to a whole page, because TripAdvisor serves reviews 10 to 15 at a time.
  • A place's review count in the output can be smaller than the number TripAdvisor advertises when a language filter is set - the filter is applied by TripAdvisor, not by us.
  • Reviews are read from the data TripAdvisor's own page is built from rather than from the rendered markup, which is more stable than scraping the visible HTML but is still a private detail of their site. If the actor starts returning nothing, that is the thing that changed.