Tripadvisor Scraper | Places, Reviews & Contacts avatar

Tripadvisor Scraper | Places, Reviews & Contacts

Pricing

from $0.50 / 1,000 tripadvisor results

Go to Apify Store
Tripadvisor Scraper | Places, Reviews & Contacts

Tripadvisor Scraper | Places, Reviews & Contacts

Scrape Tripadvisor hotels, restaurants and attractions in two modes: fast bulk search or full listing extraction. Get ratings, reviews, owner replies, contacts, addresses, photos, rankings and source URLs. Results stream to the dataset as soon as each place is ready.

Pricing

from $0.50 / 1,000 tripadvisor results

Rating

0.0

(0)

Developer

Kelopr_bk

Kelopr_bk

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

11 days ago

Last modified

Share

Tripadvisor Scraper — Fast Search & Full Place Data

Turn a city search or a Tripadvisor listing URL into clean, connected place and review data. Use Fast Search for bulk discovery, or Full Details for rich profiles, contacts, photos and reviews — without a Tripadvisor login or API key.

Unofficial tool: this Actor is not affiliated with, endorsed by, or sponsored by Tripadvisor.

✨ What this Actor does

  • 🔎 Finds places from natural searches such as Paris restaurants or London attractions
  • 🏨 Extracts hotel, restaurant and attraction profiles
  • ⭐ Collects review titles, full text, ratings, dates and traveler type
  • 💬 Keeps owner responses connected to the original review
  • 📍 Returns addresses, coordinates, rankings, price range and opening status when available
  • ☎️ Extracts public phone numbers, emails, websites and social profiles when exposed
  • 🖼️ Saves place photos and the number of photos attached to a review when Tripadvisor provides them
  • ⚡ Offers a lightweight bulk-search mode that does not open every listing page
  • 🧹 Ends normally with a clear diagnostic row when the input needs attention

Missing source values are left empty. The Actor does not invent contacts, ratings or review content.

🚀 Start in six steps

  1. Open the Actor and select the Input tab.
  2. Under Collection mode, choose Fast Search for bulk discovery or Full Details for complete listing pages and reviews.
  3. In Search query or city, enter something like Rome hotels, Paris restaurants, or London attractions. If you already know the exact listing, paste it into Direct Tripadvisor URLs instead.
  4. Set Max places per search and Reviews per place. For a first run, use 1 place and 1–5 reviews.
  5. Optional: select review ratings, traveler types, a recent-day limit, a required phrase, or public contact enrichment.
  6. Click Start. When the run finishes, open Output and choose the Results, Places, Reviews, Contacts, Photos, Changes, or Errors view.

For an exact business, use its direct Tripadvisor URL. For discovery, use a city/category search. You may combine searches and direct URLs in one run; duplicate listings are saved once.

Fastest first run

Paste this in the JSON input editor, or enter the same values in the form:

{
"collectionMode": "fast",
"searchQueries": ["Paris restaurants"],
"maxPlacesPerQuery": 10
}

🎯 Modes

ModeUse it forWhat it collects
fastBulk discovery, directories and quick market scansSearch-level name, category, rating, review count, description, photo and source URL
fullResearch, contacts, photos and review analysisComplete place rows followed by their review rows

Fast Search begins saving rows as soon as each search response arrives. Full Details also streams each completed listing instead of waiting for every URL in the run.

Under pay-per-event pricing, every default Dataset row uses the base result event. Rows produced by Full Details additionally trigger full-detail-result, allowing Fast Search and rich extraction to have separate prices while keeping the user's maximum run charge enforceable.

📥 Ready-to-run inputs

{
"collectionMode": "fast",
"searchQueries": ["Paris restaurants", "London hotels"],
"category": "all",
"maxPlacesPerQuery": 25
}
{
"collectionMode": "full",
"searchQueries": ["Paris restaurants"],
"category": "restaurants",
"maxPlacesPerQuery": 5,
"maxReviewsPerPlace": 10
}

Exact listings, with public contact enrichment

{
"collectionMode": "full",
"startUrls": [
{
"url": "https://www.tripadvisor.com/Hotel_Review-g00000-d00000-Reviews-Example_Hotel-Example_City.html"
}
],
"enrichContacts": true,
"maxContactPages": 2,
"maxReviewsPerPlace": 0
}

When enabled, contact enrichment checks the public website exposed by the listing and a small number of its contact/about pages. It may add public email addresses and social profiles. It cannot recover data that neither Tripadvisor nor the business website publishes.

Filtered reviews

{
"collectionMode": "full",
"startUrls": [
{
"url": "https://www.tripadvisor.com/Restaurant_Review-g00000-d00000-Reviews-Example_Bistro-Example_City.html"
}
],
"maxReviewsPerPlace": 50,
"reviewRatings": ["1", "2"],
"tripTypes": ["family", "couples"],
"reviewKeyword": "service",
"recentDays": 90
}

The Actor scans additional review pages when filters remove early results, up to a safe scan budget, so maxReviewsPerPlace means matching reviews whenever Tripadvisor exposes enough of them.

Existing monitoring integrations

{
"scrapeMode": "monitor",
"startUrls": [
{
"url": "https://www.tripadvisor.com/Hotel_Review-g00000-d00000-Reviews-Example_Hotel-Example_City.html"
}
],
"maxReviewsPerPlace": 25,
"monitorKey": "example-hotel",
"emitUnchanged": true
}

The legacy scrapeMode: monitor API remains supported so existing schedules do not break. The first run creates a baseline; that is expected and is not an error. Later runs using the same monitorKey can emit:

  • newReview
  • ownerResponseAdded
  • placeFieldChanged
  • newPlace
  • noChanges when emitUnchanged is enabled

Create an Apify Schedule for this input to run it daily or weekly. Keep the same monitorKey for the same watch list.

🧰 Input reference

FieldMeaningDefault
collectionModefast for lightweight search or full for complete listing pagesfast
searchQueriesSearches such as New York City hotels[]
startUrlsExact public Tripadvisor listing URLs[]
categoryall, hotels, restaurants, or attractionsall
maxPlacesPerQueryMaximum places saved from each search, subject to available matching results5
maxReviewsPerPlaceMaximum matching reviews saved per place; 0 disables reviews10
reviewRatingsKeep selected 1–5 star ratingsall
reviewKeywordRequired phrase in the review title or textempty
tripTypesBusiness, couples, family, friends, or soloall
recentDaysKeep reviews from the last N days; 0 disables this filter0
enrichContactsCheck the published business website for public contactsfalse
maxContactPagesWebsite pages checked per place, from 1 to 52
monitorKeyStable name for a monitored watch listderived automatically
emitUnchangedSave a noChanges row when the snapshot is unchangedtrue
localeLocale requested from Tripadvisoren-US
maxConcurrencyParallel Tripadvisor searches and place pages20
requestDelayMsDelay between requests in milliseconds100

Legacy workflow, connection and retry fields remain available for existing API integrations. The defaults are suitable for ordinary runs. Results stream into the Apify Dataset as soon as each place is ready, so large runs never leave the user staring at an empty table. Fast Search avoids detail pages entirely; Full Details keeps all existing fields and uses the default Apify datacenter proxy without residential traffic charges. Custom proxy settings remain available in Advanced.

📤 Output views

ViewContents
ResultsClean first look at the selected mode
PlacesProfiles, ratings, rankings, locations and contact fields
ReviewsReview text, author metadata, dates and owner responses
ContactsPhone, email, website, social links and address
PhotosPlace image URLs and review photo counts
ChangesMonitoring events
ErrorsActionable diagnostic rows; empty on a clean run
Run summaryStatus, counters, runtime and dataset information

🧩 Output schema

default dataset
├── place
│ ├── identity: name, category, locationId, url
│ ├── reputation: rating, reviewCount, rankingPosition, rankingString
│ ├── business: priceRange, openingStatus, amenities, hasMenu
│ ├── location: address, city, region, postalCode, country, latitude, longitude
│ ├── contacts: phone, phoneE164, phoneRaw, phones, email, emails, website, socialLinks
│ └── media: imageUrl, images
├── review
│ ├── identity: reviewId, reviewUrl, placeName, placeUrl, locationId
│ ├── content: title, text, rating, helpfulVotes, photoCount
│ ├── timing: publishedDate, publishedDateText, dateOfStay
│ ├── traveler: tripType, reviewerName, reviewerLocation, reviewerContributions
│ └── response: ownerResponseText, ownerResponseDateText, ownerResponseAuthor
├── change
│ ├── changeType, field, oldValue, newValue
│ └── sourceUrl, scrapedAt
└── error
├── kind, error, actionNeeded
└── sourceUrl, scrapedAt

Example place row

All values below are illustrative.

{
"recordType": "place",
"name": "Example Bistro",
"category": "restaurant",
"locationId": 12345678,
"rating": 4.7,
"reviewCount": 842,
"rankingPosition": 12,
"rankingString": "#12 of 1,234 restaurants in Example City",
"phone": "+33 1 00 00 00 00",
"phoneE164": "+33100000000",
"phoneRaw": "011 33 1 00 00 00 00",
"email": "hello@example.org",
"address": "10 Example Street, Example City, 75000, FR",
"latitude": 48.8501,
"longitude": 2.3501,
"url": "https://www.tripadvisor.com/Restaurant_Review-g00000-d00000-Reviews-Example_Bistro-Example_City.html"
}

Example review row

All names and text below are illustrative.

{
"recordType": "review",
"reviewId": "1000000001",
"placeName": "Example Bistro",
"rating": 5,
"title": "A lovely evening",
"text": "Friendly service and a great dinner.",
"publishedDate": "2026-08-20",
"tripType": "Couples",
"reviewerName": "Example Traveler",
"ownerResponseText": "Thank you for visiting us.",
"reviewUrl": "https://www.tripadvisor.com/ShowUserReviews-g00000-d00000-r1000000001-Example.html"
}

✅ Understanding run status

  • SUCCEEDED: results were collected without diagnostics.
  • PARTIAL: usable results were collected, but one or more pages could not be fetched.
  • INPUT_NEEDS_ATTENTION: the run ended normally, but the input was empty, unsupported, or produced no usable places.

For an empty input, an unsupported listing URL, or a query with no usable matches, the Actor does not crash. It finishes with exit code 0 and writes a diagnostic to the Errors view. Each diagnostic includes actionNeeded, so users and API clients know what to change.

💡 Practical tips

  • Use Fast Search for large keyword lists and Full Details for direct URLs or rich records.
  • Direct Tripadvisor URLs automatically use Full Details because lightweight search data does not exist for an unopened URL.
  • Start with 3–5 places and 5–10 reviews, verify the shape, then scale up.
  • Rare review filters may require more page requests than an unfiltered run.
  • Enable contact enrichment only when you need extra lead data; it performs additional website requests.
  • Keep the same monitorKey across scheduled monitoring runs.
  • Empty fields mean the public source did not expose that value.
  • phone is normalized for people, phoneE164 is ready for APIs, and phoneRaw preserves Tripadvisor's original display value.

❓ FAQ

Does it support hotels, restaurants and attractions?

Yes. You can mix direct listing URLs in one run or select a category for search queries.

Does it need a Tripadvisor account or API key?

No.

Why is an email, website or owner reply missing?

Not every listing or review publishes those fields. Optional contact enrichment can inspect the public business website, but it still returns only genuinely exposed data.

What happens if I paste a bad URL or leave the input empty?

The Actor finishes normally and writes a diagnostic explaining what needs to be corrected.

Can I export the results?

Yes. Apify datasets can be downloaded as JSON, CSV, Excel, XML, RSS and other supported formats, or consumed through the Apify API.

🛟 Support

For the fastest investigation, include the run ID, input JSON, one example URL or query, and the field that looked incorrect or missing.