Tripadvisor Review Scraper : Business Contact Finder avatar

Tripadvisor Review Scraper : Business Contact Finder

Pricing

from $3.99 / 1,000 results

Go to Apify Store
Tripadvisor Review Scraper : Business Contact Finder

Tripadvisor Review Scraper : Business Contact Finder

Extract Tripadvisor reviews at scale. This actor captures comments, ratings, dates, reviewer info, and property details. Great for trend analysis, performance monitoring, and building customer sentiment datasets.

Pricing

from $3.99 / 1,000 results

Rating

0.0

(0)

Developer

Scrapio

Scrapio

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Tripadvisor Review Scraper — Extract Reviews, Contacts & Manager Names

Tripadvisor Review Scraper : Business Contact Finder extracts every guest review for a Tripadvisor hotel — text, star rating, subratings, reviewer profile, and the property's owner response — then adds a Property Contact block (telephone, official website, address, and the responding manager's name and profile link) plus an optional domain-trust-verified contact email lookup on the property's own website. Unlike scraping frameworks that return raw HTML, it returns typed JSON — ready for your model, your CRM, or your pipeline without any parsing. Below is a full breakdown of every input, every output field, and how hospitality and lead-generation teams put it to work.


🧭 What Does Tripadvisor Review Scraper : Business Contact Finder Do?

It's a Tripadvisor hotel review scraper with lead-generation built in. Point it at one or more Tripadvisor Hotel_Review URLs (or a hotel name/keyword), and it returns every review for that property alongside a ready-to-use business contact record for the property itself. No Tripadvisor account or login is required — it fetches public hotel review pages and Tripadvisor's own GraphQL endpoint directly.

  • 📝 Full guest reviews — text, title, rating, subratings, travel date, trip type
  • 👤 Reviewer profile data — name, username, home location, avatar, contribution count (optional, toggle-able)
  • 💬 Owner/management responses, including the responding manager's real display name and profile link
  • 📇 A Property Contact block — telephone, official website, address, and geo-coordinates
  • 📧 A domain-trust-verified contact email recovered from the property's own website (optional)
  • 🏨 Property metadata — aggregate rating, review count, per-star rating histogram
  • 📸 Review photos — id, URL, caption, album ID

⚡ Features & Capabilities

The Actor combines a full review-collection engine with two features unique to this variant: zero-extra-request property contact extraction and one-extra-fetch email enrichment.

Core features

  • 🚀 Auto-paginating review collection — no manual "Next Page" clicks, up to maxComments reviews per property
  • 📇 Property Contact block on every row (propertyContact.telephone, propertyContact.website, propertyContact.address, propertyContact.addressObj) — parsed from data the hotel page already carries, at no extra request cost
  • 📧 Domain-trust-scoped email enrichment (propertyContact.email, propertyContact.emailSource) — one extra fetch of the property's own official website; an address is only ever reported if its domain matches the property's own domain or a recognized personal-email provider
  • 💬 Manager/GM identity recovery — ownerResponse.responder, ownerResponse.responderProfileUrl, and ownerResponse.responderAvatar pulled from the same response payload a plain review scrape would discard
  • ⭐ Filter by star rating (reviewRatings) and review language (reviewsLanguages) before rows are even pushed
  • 👤 Toggle-able reviewer profile scraping (scrapeReviewerInfo) — set to false for privacy-lean runs; user becomes null
  • 💾 Real-time dataset push — rows land in the Output table as they're collected, not batched at the end
  • 🛡️ Residential-proxy default with a sticky session per property, built specifically to survive Tripadvisor's DataDome bot defenses

How this scraper compares to other Tripadvisor review scrapers

FeatureThis ActorTypical review-only Tripadvisor scraper
Output formatTyped JSON, stable field namesTypically JSON, but review-fields only
Property Contact block (phone/website/address)✅ On every row, no extra request❌ Not included
Manager/responder identity + profile link✅ Included❌ Usually dropped
Domain-trust-verified contact email✅ Optional, one extra fetch❌ Not offered
Reviewer profile togglescrapeReviewerInfo on/offVaries
Restaurant / attraction coverage❌ Hotels onlyVaries

If your use case is feeding structured hotel data to an LLM or a CRM, the Property Contact row above is the decision-maker — re-deriving a manager's name and a verified email from raw review HTML inside an agent loop is a reliability failure mode, not a feature. This Actor does not claim to be faster or cheaper than any other scraper — no such figures are published for either side.

When another tool might suit you better

This variant scrapes hotels only (Hotel_Review URLs) and is purpose-built around property contact and lead enrichment, not multi-category coverage or sentiment scoring. If you need Tripadvisor restaurant or attraction reviews, deep sentiment/analytics scoring on review text, or a photo-and-visual-content-focused extraction, look for a Tripadvisor review scraper built around that specific angle instead — this one will return null contact fields for any URL it can't resolve to a hotel page, and it does not attempt restaurant or attraction pages at all.

Tripadvisor Review Scraper : Business Contact Finder within the Scrapio data stack

This Actor is currently the only Tripadvisor scraper in Scrapio's catalog — it covers hotel reviews and property contact details in a single run. For the same lead-enrichment angle on a different travel platform, see Scrapio's Airbnb Rooms URLs Scraper — Host Email and Phone Finder, which applies the same domain-trust-scoped contact philosophy to Airbnb host contact details.


Why do developers and data teams scrape Tripadvisor?

🏢 Hospitality sales and business development teams

Sales teams targeting independent hotels and small chains use startUrls to queue a list of target properties and get back propertyContact.telephone, propertyContact.website, and propertyContact.email for each — a ready-to-dial, ready-to-email outreach list, plus ownerResponse.responder so the first email can be addressed to the actual GM or manager who responds to guests, not "Dear Sir/Madam."

📊 AI training data and RAG indexing

The text field on every review row is high-information, unstructured guest feedback — ideal for RAG enrichment of a hospitality knowledgebase (e.g., "what do guests say about the breakfast at this hotel") or for training a sentiment/topic model, since every field returns as a typed primitive requiring no HTML parsing before it reaches a model's context window. subratings (Value, Location, Service, etc.) gives a consistent structured signal alongside the free text for training data that needs both dimensions.

📱 Competitive and market intelligence

Track rating, placeInfo.numberOfReviews, and placeInfo.ratingHistogram for a set of competing properties in a market over repeated runs to watch review volume and rating-distribution shifts, and track ownerResponse presence/absence to see which competitors are actively managing their online reputation.

🔬 Research and academic use

text, rating, tripType, and travelDate support hospitality and tourism research datasets built entirely from publicly available review content — no login or paywalled data is involved.

🎥 Product and SaaS development

Build a hotel-contact directory, a review-monitoring dashboard, or a lead-enrichment API on top of the dataset this Actor produces — propertyContact and placeInfo together already carry the structured fields most directory or enrichment products need per property.


🍚 Input Parameters

All seven parameters below are read directly from .actor/actor.json; names, types, defaults, and enum values match the schema exactly.

ParameterRequiredTypeDescriptionExample Value
startUrlsYesarray (editor: stringList)Direct Tripadvisor Hotel_Review URLs, hotel names, or keywords. Names/keywords are auto-resolved via Google Search.["https://www.tripadvisor.com/Hotel_Review-g60763-d208453-Reviews-Hilton_New_York_Times_Square-New_York_City_New_York.html"]
maxCommentsNointegerMaximum reviews to extract per property. Default 10, minimum 1, maximum 10000.100
sortOrderNostring (enum)Review fetch order: newest (default), oldest, relevant, rating."newest"
reviewsLanguagesNostring (enum)Review language filter. Default "English". Full enum: ALL_REVIEW_LANGUAGES, English, Spanish, French, German, Italian, Portuguese, Dutch, Russian, Japanese, Korean, Chinese (Simplified), Chinese (Traditional), Arabic, Turkish, Hebrew, Swedish, Norwegian, Danish, Finnish, Polish, Czech, Hungarian, Romanian, Greek, Thai, Vietnamese, Indonesian, Malay, Hindi."English"
reviewRatingsNostring (enum)Star rating filter. Default "ALL_REVIEW_RATINGS". Other values: POSITIVE (4–5★), NEGATIVE (1–2★), AVERAGE (3★), or a literal "5""1"."ALL_REVIEW_RATINGS"
scrapeReviewerInfoNobooleanInclude the full reviewer profile object on each row. Default true; set false to omit reviewer PII (user becomes null).true
findWebsiteEmailNobooleanMake one extra fetch of the property's own official website to look for a domain-trusted contact email. Default true.true
proxyConfigurationNoobject (editor: proxy)Apify Proxy configuration. Defaults to Residential proxy group if left blank.{"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"]}

Two undocumented-but-working details from the source, worth knowing:

  • maxComments also accepts the alias key maxItemsPerQuery — the Actor reads whichever is present, matching the base Tripadvisor scraper's input shape.
  • If a run's input JSON omits maxComments entirely (bypassing the schema's own default of 10, e.g. a raw API call with {}), the code's own fallback is 100, not 10. Normal Console runs and the Apify API apply the schema default automatically, so this only matters for hand-built input payloads.

📥 Example JSON input

{
"startUrls": [
"https://www.tripadvisor.com/Hotel_Review-g60763-d208453-Reviews-Hilton_New_York_Times_Square-New_York_City_New_York.html"
],
"maxComments": 100,
"sortOrder": "newest",
"reviewsLanguages": "English",
"reviewRatings": "ALL_REVIEW_RATINGS",
"scrapeReviewerInfo": true,
"findWebsiteEmail": true,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"]
}
}

Supported URL types and input formats

startUrls accepts a mixed list — the Actor sorts each entry by shape:

  • Direct hotel URL — fastest and most reliable. Must contain both tripadvisor.com and Hotel_Review in the path, e.g. https://www.tripadvisor.com/Hotel_Review-g60763-d208453-Reviews-Hilton_New_York_Times_Square-New_York_City_New_York.html. Any Tripadvisor URL that isn't a Hotel_Review page (e.g. a restaurant or attraction URL) is skipped with a logged warning, not silently mis-scraped.
  • Hotel name — e.g. "Hilton New York Times Square". Resolved to a hotel URL via a Google Search request (Tripadvisor's own on-site search is heavily bot-protected).
  • Free-text keyword — e.g. "luxury hotel New York". Same Google-resolution path; may match the most relevant hotel rather than a specific one, so results are less deterministic than a direct URL.

📦 Output Format

Every run pushes typed JSON rows to the default Apify dataset — one row per review, each carrying its own copy of the property's contact block. Export as JSON, CSV, Excel, or any format the Apify dataset UI offers. Pricing note: this Actor bills on Apify's pay-per-event model with a single charged event, row_result — one charge fires for every review row actually pushed to the dataset, and the code does not push any separate uncharged log or error row, so the dataset's row count always matches billed usage for the run.

Output for a review

Every key below is written by transform_review() in src/main.py — this is the complete row shape, not the dataset view's subset:

{
"id": "1040504451",
"url": "https://www.tripadvisor.com/ShowUserReviews-g60763-d208453-r1040504451-Hilton_New_York_Times_Square-New_York_City_New_York.html",
"title": "Perfect Holidays at Hilton Times Square !!!!!",
"lang": "en",
"locationId": "208453",
"publishedDate": "2025-11-27",
"publishedPlatform": "OTHER",
"rating": 5,
"helpfulVotes": 0,
"text": "We were for 2 weeks holidays in New York!! Hilton Times Square was the perfect choice...",
"roomTip": null,
"travelDate": "2025-11",
"tripType": "FAMILY",
"user": {
"userId": "4381D233A5C57ADAF67693B272BEFE70",
"name": "Dimitris T",
"contributions": { "totalContributions": 2, "helpfulVotes": null },
"username": "margaretmN8866NJ",
"userLocation": "Thessaloniki, Greece",
"avatar": "https://dynamic-media-cdn.tripadvisor.com/media/photo-o/1a/f6/de/5a/default-avatar-2020-36.jpg?w=100&h=100&s=1",
"link": "www.tripadvisor.com/Profile/margaretmN8866NJ"
},
"ownerResponse": {
"id": "98212345",
"text": "Thank you so much for your kind words, we hope to welcome you back soon!",
"lang": "en",
"publishedDate": "2025-11-28",
"responder": "Marianne D, General Manager",
"connectionToSubject": "MANAGEMENT",
"responderProfileUrl": "www.tripadvisor.com/Profile/mariannedGM",
"responderAvatar": "https://dynamic-media-cdn.tripadvisor.com/media/photo-o/aa/bb/cc/dd/manager-avatar.jpg?w=100&h=100&s=1"
},
"subratings": [
{ "name": "Value", "value": 5 },
{ "name": "Location", "value": 5 },
{ "name": "Service", "value": 5 }
],
"photos": [],
"placeInfo": {
"id": "208453",
"name": "Hilton New York Times Square",
"rating": 4.3,
"numberOfReviews": 7879,
"locationString": "New York City, New York",
"latitude": 40.75665,
"longitude": -73.988815,
"webUrl": "https://www.tripadvisor.com/Hotel_Review-g60763-d208453-Reviews-Hilton_New_York_Times_Square-New_York_City_New_York.html",
"website": "https://www.hilton.com/en/hotels/nyctshh-hilton-times-square/",
"address": "234 West 42nd Street, New York City, NY 10036",
"addressObj": {
"street1": "234 West 42nd Street", "street2": "", "city": "New York City",
"state": "NY", "country": "United States", "postalcode": "10036"
},
"ratingHistogram": { "count1": 267, "count2": 290, "count3": 704, "count4": 2568, "count5": 5064 }
},
"propertyContact": {
"telephone": "00 1 855-605-0316",
"website": "https://www.hilton.com/en/hotels/nyctshh-hilton-times-square/",
"address": "234 West 42nd Street, New York City, NY 10036",
"addressObj": {
"street1": "234 West 42nd Street", "street2": "", "city": "New York City",
"state": "NY", "country": "United States", "postalcode": "10036"
},
"email": "reservations.nyctshh@hilton.com",
"emailSource": "https://www.hilton.com/en/hotels/nyctshh-hilton-times-square/contact"
},
"scrapedAt": "2026-08-02T14:03:11Z"
}

Notes read from the source, not guessed: user.contributions.helpfulVotes is always null — there is no per-user "helpful votes received" field on this GraphQL surface, so the code returns an honest null instead of a fabricated 0. roomTip is null whenever the review carries no room tip. If scrapeReviewerInfo is false, the whole user object is null.

Output for the Property Contact block

propertyContact is the variant's signature addition — the same object appears on every review row for a given property, built by build_property_contact():

{
"telephone": "00 1 855-605-0316",
"website": "https://www.hilton.com/en/hotels/nyctshh-hilton-times-square/",
"address": "234 West 42nd Street, New York City, NY 10036",
"addressObj": {
"street1": "234 West 42nd Street",
"street2": "",
"city": "New York City",
"state": "NY",
"country": "United States",
"postalcode": "10036"
},
"email": "reservations.nyctshh@hilton.com",
"emailSource": "https://www.hilton.com/en/hotels/nyctshh-hilton-times-square/contact"
}

telephone, website, and address/addressObj come from the hotel page's own LodgingBusiness JSON-LD — zero extra HTTP requests. email and emailSource come from the one optional extra fetch of the property's own website (toggle: findWebsiteEmail); both stay null together whenever no domain-trusted address was found — never a guessed or misattributed one.

Output for the manager/owner-response contact

ownerResponse carries the manager identity recovered from the review's own management-response payload:

{
"id": "98212345",
"text": "Thank you so much for your kind words, we hope to welcome you back soon!",
"lang": "en",
"publishedDate": "2025-11-28",
"responder": "Marianne D, General Manager",
"connectionToSubject": "MANAGEMENT",
"responderProfileUrl": "www.tripadvisor.com/Profile/mariannedGM",
"responderAvatar": "https://dynamic-media-cdn.tripadvisor.com/media/photo-o/aa/bb/cc/dd/manager-avatar.jpg?w=100&h=100&s=1"
}

ownerResponse is null on any review the property hasn't responded to — it does not appear as an empty object.

Schema stability and export options

Field names are hand-mapped from Tripadvisor's own GraphQL response and JSON-LD, not passed through unchanged — so when Tripadvisor reshuffles its front-end bundle (which the source code explicitly works around; see the Strategy Guide and FAQ below), the output field names stay the same across runs. The dataset supports Apify's standard export formats (JSON, CSV, Excel, and the other formats listed in the Apify Console's Export button) and the standard Apify API for programmatic retrieval.


💡 Tripadvisor Review Scraper : Business Contact Finder Strategy Guide

🎯 Strategy 1: Real-time enrichment pipeline

Trigger a run per new lead (e.g., a hotel added to your CRM) with that property's Tripadvisor URL in startUrls and a small maxComments (enough to catch a recent owner response). Read back propertyContact.telephone, propertyContact.email, and ownerResponse.responder from the pushed rows, and write those three fields straight into the CRM record for that lead — the dataset rows land in the Output table in real time as they're collected, so a short run is enough for the contact block alone.

🎯 Strategy 2: Scheduled monitoring and alerting

Use an Apify Schedule to re-run the same startUrls list weekly with sortOrder: "newest". Diff the new run's placeInfo.rating, placeInfo.numberOfReviews, and ownerResponse presence against the previous run on the same locationId, and alert when the rating histogram shifts or when a property that previously had no owner responses starts responding — a signal that management just changed or got proactive about reputation.

🎯 Strategy 3: Bulk dataset build

Queue every target property URL as a separate entry in startUrls in one run — the Actor loops through them sequentially, pushing rows for each before moving to the next — then export the full dataset as CSV for a research or lead-list build. No concurrency or rate limit figures are published for this Actor, so size each run to the number of properties you actually need rather than assuming a specific throughput.

Strategy comparison at a glance

StrategyBest forRun patternOutput format
Real-time enrichmentNew-lead contact lookupOn-demand, single-property runJSON row → CRM field
Scheduled monitoringReputation/rating trackingWeekly Apify Schedule, same URLsDiffed JSON across runs
Bulk dataset buildOutreach list / research datasetOne run, many startUrlsCSV / Excel export

ScraperWhat it extracts
Airbnb Rooms URLs Scraper — Host Email and Phone Finder (Scrapio)Airbnb host contact details using the same domain-trust-verified email approach
Facebook Events Scraper — Organizer and Contact Details (Scrapio)Event organizer names and contact details for Facebook Events

Scrapio does not currently publish a second Tripadvisor scraper alongside this one — this Actor is the account's single entry point for both hotel reviews and property contact data on Tripadvisor. The two Actors above apply the same lead-enrichment approach to other platforms, for teams building a multi-platform contact list rather than a single-platform one.


How to integrate Tripadvisor Review Scraper : Business Contact Finder with your stack

Tripadvisor Review Scraper : Business Contact Finder works with any language or tool that can make an HTTP request, through the Apify API or the official Apify client SDKs.

Python

from apify_client import ApifyClient
import csv
client = ApifyClient("<YOUR_APIFY_TOKEN>")
hotel_urls = [
"https://www.tripadvisor.com/Hotel_Review-g60763-d208453-Reviews-Hilton_New_York_Times_Square-New_York_City_New_York.html",
]
run_input = {
"startUrls": hotel_urls,
"maxComments": 50,
"sortOrder": "newest",
"findWebsiteEmail": True,
}
run = client.actor("<YOUR_USERNAME>/tripadvisor-review-scraper-business-contact-finder").call(run_input=run_input)
rows = list(client.dataset(run["defaultDatasetId"]).iterate_items())
with open("hotel_contacts.csv", "w", newline="", encoding="utf-8") as f:
writer = csv.writer(f)
writer.writerow(["reviewId", "propertyName", "telephone", "website", "email", "manager"])
for row in rows:
contact = row.get("propertyContact") or {}
owner = row.get("ownerResponse") or {}
place = row.get("placeInfo") or {}
writer.writerow([
row.get("id"), place.get("name"),
contact.get("telephone"), contact.get("website"),
contact.get("email"), owner.get("responder"),
])
print(f"Saved {len(rows)} rows to hotel_contacts.csv")

Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('<YOUR_USERNAME>/tripadvisor-review-scraper-business-contact-finder').call({
startUrls: [
'https://www.tripadvisor.com/Hotel_Review-g60763-d208453-Reviews-Hilton_New_York_Times_Square-New_York_City_New_York.html',
],
maxComments: 50,
findWebsiteEmail: true,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const row of items) {
console.log(row.placeInfo?.name, row.propertyContact?.email, row.ownerResponse?.responder);
}

Async and scheduled pipelines

For fire-and-forget large jobs, start the run via client.actor(...).start() instead of .call() and poll the run status, or set up an Apify Schedule in the Console to re-run the same input on a recurring basis. Apify Webhooks can be attached to the run to notify an external endpoint when the run finishes, so a downstream pipeline doesn't need to poll at all.


🎯 Who Needs Tripadvisor Review Scraper : Business Contact Finder? (Use Cases & Industries)

🏢 Hospitality sales and outreach teams

Build a dial-and-email-ready list of hotels with propertyContact.telephone and propertyContact.email filled in, plus ownerResponse.responder to address the actual GM instead of a generic contact form.

📊 Revenue managers and market analysts

Pull rating, placeInfo.ratingHistogram, and placeInfo.numberOfReviews across a competitive set of properties to track rating distribution and review velocity over time.

📱 Marketing and PR agencies

Monitor ownerResponse across a client's property (and its named competitors) to benchmark how actively each one manages guest feedback, and flag negative reviews (rating ≤ 2) that haven't received a response yet.

🔬 Researchers

Use text, rating, tripType, and travelDate for hospitality and tourism studies built entirely on public review content — no login-gated data is involved.

🎥 Lead-generation and directory product builders

Feed propertyContact and placeInfo directly into a hotel-contact directory or CRM-enrichment API — both objects already carry the structured fields most such products need per property, with no extra normalization step.


Scraping publicly accessible web data is generally lawful in the United States — in hiQ Labs, Inc. v. LinkedIn Corp. (9th Cir. 2019), the court held that scraping data a website makes publicly available does not violate the Computer Fraud and Abuse Act. That precedent concerns public-data access, not Tripadvisor's own Terms of Service, which is a separate, contractual matter: violating a platform's ToS can create civil liability between the scraper and the platform, but it is not itself a crime.

This Actor also returns personal data in two places: reviewer profiles (user, disable via scrapeReviewerInfo) and the responding manager's name (ownerResponse.responder). Where that data relates to an identifiable person in the EU or California, GDPR and CCPA obligations attach to whoever collects, stores, and uses it — this Actor does not determine your lawful basis for that. propertyContact's telephone, website, and address, by contrast, are business records the property itself publishes.

Tripadvisor Review Scraper : Business Contact Finder returns only publicly accessible data. What you do with that data is your responsibility — consult legal counsel for commercial applications involving personal data.


❓ Frequently asked questions

Does Tripadvisor Review Scraper : Business Contact Finder work without a Tripadvisor account?

Yes. The Actor fetches public hotel review pages and Tripadvisor's GraphQL endpoint directly — no Tripadvisor login or account is required for any input type.

How does it handle Tripadvisor's anti-scraping measures?

Tripadvisor fronts every request with DataDome bot protection, which fingerprints the TLS handshake. The Actor opens sessions with curl_cffi's safari17_0 TLS impersonation (Chrome impersonation profiles get a 403 challenge from DataDome), keeps a sticky proxy session per property so cookies stay valid across every step, and retries failed GraphQL requests up to three times with a short delay before giving up on a page.

Can I run it at scale without getting blocked?

Datacenter proxy IPs get blocked within seconds according to the Actor's own default behavior; a residential proxy (the default when proxyConfiguration is left blank) is what keeps runs working. No uptime or block-rate figure is published — the Actor logs a clear error and stops a property's collection if it detects a block on the first page, rather than returning silent empty results.

How fresh is the data it returns?

Every run performs a live fetch against Tripadvisor at the time you start it — there is no caching layer. What you get reflects the reviews and property page content visible at run time.

Which fields work best for AI training and RAG indexing?

For RAG, text (the review body) is the high-information field. For training data, rating, subratings, and tripType are the most consistently structured fields across every row. All fields return as typed primitives — strings, numbers, booleans, or nested objects — with no HTML to strip before passing them into an LLM context window.

Does the Actor collect personal data, and how do I limit it?

It can: user (the reviewer's profile) and ownerResponse.responder (the manager's name) are personal data when tied to an identifiable person. Set scrapeReviewerInfo to false to drop the reviewer profile entirely; ownerResponse cannot be suppressed independently, since the manager's name is part of the review's own management-response record.

Does it work with Claude, ChatGPT, and other AI agent tools?

There is no dedicated MCP server for this Actor. It is callable as a standard Apify Actor run through the Apify API from any agent framework capable of making an HTTP request — every response is typed JSON, so no HTML parsing step is needed before passing results into an LLM's context.

Is the "relevant" sort order actually different from "newest"?

No — and the Actor documents this rather than hiding it. Tripadvisor's GraphQL endpoint for reviews does not expose a distinct relevance ranking; sortOrder: "relevant" sends the exact same SERVER_DETERMINED parameters as "newest" and returns the identical order.

What happens if Tripadvisor rejects the requested sort order mid-run?

The Actor's own logs show this happening: oldest (DATE_OF_STAY ascending) is occasionally rejected by Tripadvisor's GraphQL with a $sortBy/$sortType validation error on some deploys. When that happens, the run automatically falls back to the default order and keeps collecting reviews instead of failing outright — worth knowing if you specifically need oldest-first data and the run logs show the fallback firing.

Is there a limit on how many reviews I can pull per property?

Yes, two real ones from the source: maxComments caps at 10,000 in the input schema, and independently the pagination loop enforces a hard safety cap at an offset of 10,000 reviews, logging "Reached safety cap of 10,000 reviews." and stopping even if maxComments was set higher. Tripadvisor's own GraphQL page size is fixed at 10 reviews per request regardless of what you ask for — the Actor just paginates through it automatically.


ℹ️ Disclaimer

Tripadvisor Review Scraper : Business Contact Finder extracts only publicly available data from Tripadvisor. This tool is intended for lawful use cases only. Users are responsible for complying with Tripadvisor's terms of service and applicable data protection laws in their jurisdiction.