TripAdvisor Scraper – Hotels, Restaurants & Reviews avatar

TripAdvisor Scraper – Hotels, Restaurants & Reviews

Pricing

from $3.00 / 1,000 listing scrapeds

Go to Apify Store
TripAdvisor Scraper – Hotels, Restaurants & Reviews

TripAdvisor Scraper – Hotels, Restaurants & Reviews

Extract hotels, restaurants, and attractions from TripAdvisor — including ratings, contact info, amenities, and reviews — from search queries or direct URLs. MCP/API-ready.

Pricing

from $3.00 / 1,000 listing scrapeds

Rating

0.0

(0)

Developer

Khadin Akbar

Khadin Akbar

Maintained by Community

Actor stats

0

Bookmarked

8

Total users

2

Monthly active users

a day ago

Last modified

Share

TripAdvisor Scraper is an Apify Actor for travel, lead generation, and MCP workflows that accepts either search queries or direct TripAdvisor URLs. It returns one dataset record per scraped listing or review, so each item represents one hotel, restaurant, attraction, or review entry. Listing records can include name, category, address, city, country, phone, website, rating, review count, price range, ranking, amenities, cuisines, awards, coordinates, and TripAdvisor URLs. Review records can include the linked listing name and URL, review title, text, date of stay, travel type, reviewer details, helpful votes, owner response, published date, and source URL.

Best fit and connected workflows

Use this Actor when you want TripAdvisor data in a structured dataset that is ready for analysis, enrichment, or automation.

It fits well when you want to:

  • turn a destination search like "hotels in Miami" into a set of listing URLs and scraped records
  • start from a known TripAdvisor Hotel_Review, Restaurant_Review, or Attraction_Review URL and extract listing data
  • collect review records for a specific property from provided TripAdvisor listing URLs
  • feed structured travel data into CRM, enrichment, monitoring, or agent workflows
  • use an Apify Actor through Apify MCP, with a consistent record shape that is easy to interpret

Focused standalone workflow

This Actor is designed as a focused standalone workflow.

One practical scenario

A travel analyst opens Apify with the starting query "restaurants in Paris 1st arrondissement". They run the Actor in listings_and_reviews mode with a small result cap. The returned dataset includes restaurant names, ratings, review counts, price ranges, and TripAdvisor URLs. For restaurants with reviews enabled, the analyst also sees review title, text, travel type, reviewer name, and published date. Based on those fields, the analyst decides which venues to shortlist for deeper review analysis, then exports the dataset to compare reputation and contact details across the target area.

Input fields

FieldTypePurposeDefault
searchQueriesarray of stringsSearch terms such as "hotels in Miami" or "restaurants in Paris"[]
startUrlsarray of request objectsDirect TripAdvisor listing URLs, including Hotel_Review, Restaurant_Review, and Attraction_Review pages[]
scrapeModestringlistings_and_reviews, listings_only, or reviews_onlylistings_and_reviews
maxResultsintegerMaximum number of listing pages to scrape10
maxReviewsPerListingintegerMaximum reviews collected per listing when reviews are included20
proxyConfigurationobjectApify Proxy configurationResidential proxy preset

Focused input example

{
"searchQueries": ["hotels in New York City"],
"scrapeMode": "listings_and_reviews",
"maxResults": 5,
"maxReviewsPerListing": 10,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"]
}
}

Output fields

TripAdvisor Scraper writes records to the default dataset. Use record_type to separate listing and review items.

FieldTypeMeaning
record_typestringlisting or review
namestring or nullName of the hotel, restaurant, or attraction
categorystring or nullTripAdvisor top-level category
subcategorystring or nullMore specific type within the category
addressstring or nullFull street address
citystring or nullCity
countrystring or nullCountry
phonestring or nullListed phone number
websitestring or nullExternal website URL
ratingnumber or nullTripAdvisor rating
review_countinteger or nullTotal review count
price_rangestring or null$, $$, $$$, or $$$$
price_levelinteger or nullNumeric price level
rankingstring or nullRanking text
ranking_positioninteger or nullNumeric ranking position
ranking_totalinteger or nullTotal in the category and location
descriptionstring or nullTripAdvisor description
amenitiesarrayListing amenities
cuisinesarrayRestaurant cuisine types
awardsarrayTripAdvisor awards
latitudenumber or nullLatitude coordinate
longitudenumber or nullLongitude coordinate
photos_countinteger or nullTotal photos on the listing
tripadvisor_idstring or nullLocation ID from the URL d parameter
tripadvisor_urlstringDirect TripAdvisor listing URL
listing_namestring or nullProperty name on review records
listing_urlstring or nullTripAdvisor URL for the reviewed property
titlestring or nullReview title
textstring or nullReview text
date_of_staystring or nullDate of stay
travel_typestring or nullTravel party type
reviewer_namestring or nullReviewer username
reviewer_locationstring or nullReviewer home location
helpful_votesinteger or nullHelpful vote count
owner_responsestring or nullManagement response
published_datestring or nullReview publish date
scraped_atstringISO 8601 scrape timestamp
source_urlstringExact URL used for the scrape

Focused output example

{
"record_type": "listing",
"name": "The Setai Miami Beach",
"category": "Hotel",
"subcategory": "Luxury Hotel",
"city": "Miami Beach",
"country": "United States",
"rating": 4.5,
"review_count": 2341,
"price_range": "$$$$",
"ranking": "#3 of 233 Hotels in Miami Beach",
"phone": "+1-305-520-6000",
"website": "https://www.thesetaihotel.com",
"tripadvisor_url": "https://www.tripadvisor.com/Hotel_Review-g294471-d234567-Reviews-The_Setai-Miami_Beach.html",
"scraped_at": "2026-04-09T10:00:00.000Z",
"source_url": "https://www.tripadvisor.com/Hotel_Review-g294471-d234567-Reviews-The_Setai-Miami_Beach.html"
}

How it works

The Actor accepts either search queries or direct TripAdvisor listing URLs.

  • searchQueries is used for destination or topic searches, such as "hotels in Miami" or "restaurants in Paris"
  • startUrls is used for direct listing pages, including Hotel_Review, Restaurant_Review, and Attraction_Review URLs
  • scrapeMode controls whether the execution collects listings, reviews, or both
  • maxResults sets the maximum number of listing pages to process
  • maxReviewsPerListing controls how many reviews are collected from each listing when reviews are included
  • proxyConfiguration uses Apify Proxy, with a residential preset in the input schema

The browser path uses bounded DataDome retries. Small listings-only probes use a SerpAPI public-index path first so automated tests do not spend five minutes on one blocked residential tunnel; richer jobs keep the browser as primary. The public-index path accepts only genuine TripAdvisor Hotel_Review, Restaurant_Review, and Attraction_Review pages. It returns their indexed listing metadata and rejects browse pages, third-party URLs, and synthetic diagnostic rows.

Evergreen pricing

This Actor uses Pay per event pricing plus standard Apify platform usage. The live Pricing tab shows the current pricing details.

Charged events:

  • Listing Scraped: $0.003 per hotel, restaurant, or attraction listing scraped
  • Review Scraped: $0.001 per review scraped
  • Actor Start: $0.00005 per start event, charged according to the Actor memory allocation, with one event per GB and a minimum of one event

For an example, 10 listings anda bounded number of reviews create 35 pay-per-event records, plus the Actor Start event for the run. For current usage details and any platform-level costs, check the live Pricing tab in Apify.

Use with AI agents (MCP)

This Actor is usable through Apify MCP as a structured tool for retrieving TripAdvisor listings and reviews.

Tool description: retrieve TripAdvisor listing and review records in a predictable schema, with separate handling for destination searches, direct listing URLs, and review collection depth.

Actor identity: khadinakbar/tripadvisor-scraper

Find TripAdvisor hotels in Lisbon, then return the listing records with rating, review count, price range, ranking, phone, website, and TripAdvisor URL. If reviews are included, summarize the review records separately by listing name and published date.

How to interpret the output:

  • record_type = listing means the record describes a hotel, restaurant, attraction, or vacation rental
  • record_type = review means the record describes one TripAdvisor review tied to a listing
  • tripadvisor_url and source_url provide provenance for the scraped record
  • listing_name and listing_url connect review records back to the parent listing
  • scraped_at shows when the record was collected

Scope, pagination, and cost guidance:

  • use searchQueries for topic or destination discovery
  • use startUrls for known TripAdvisor pages
  • set maxResults to keep discovery runs focused
  • set maxReviewsPerListing to control review volume
  • review records are charged per item, so review depth directly affects event count
  • Apify platform usage still applies alongside Pay per event pricing

Apify API example

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({
token: process.env.APIFY_TOKEN,
});
const run = await client.actor('khadinakbar/tripadvisor-scraper').call({
searchQueries: ['restaurants in Rome'],
scrapeMode: 'listings_and_reviews',
maxResults: 5,
maxReviewsPerListing: 10,
});
const datasetItems = await client.dataset(run.defaultDatasetId).listItems();
const listings = datasetItems.items.filter((item) => item.record_type === 'listing');
const reviews = datasetItems.items.filter((item) => item.record_type === 'review');
console.log(`Listings: ${listings.length}`);
console.log(`Reviews: ${reviews.length}`);
console.log(`Dataset ID: ${run.defaultDatasetId}`);

Best results and outcome guidance

  • Use search queries when you want TripAdvisor to surface relevant listing URLs for a city or topic.
  • Use direct URLs when you already have a specific hotel, restaurant, or attraction page.
  • Use listings_only when you want listing metadata without review text.
  • Use reviews_only when the source URLs already point to the listings you want to analyze.
  • Start with a small maxResults value, then expand once the query shape looks right.
  • Set maxReviewsPerListing to match the depth you actually need for analysis or enrichment.
  • Filter the dataset by record_type before transforming records into downstream tables or agent prompts.

Design note

I found that the dataset schema uses a single record_type discriminator with two values, listing and review, which makes it straightforward to separate venue data from individual review data in downstream processing.

FAQ

When should I use searchQueries instead of startUrls?

Use searchQueries for destination-based requests like "hotels in Barcelona". Use startUrls when you already have a specific TripAdvisor Hotel_Review, Restaurant_Review, or Attraction_Review page.

What kind of records does this Actor return?

It returns listing records, review records, or both, depending on scrapeMode. Each record is one dataset item.

How do I connect reviews back to a listing?

Review records include listing_name and listing_url, which point back to the parent property.

Can I use this Actor for hotels, restaurants, and attractions?

Yes. The actor title and dataset schema cover those TripAdvisor categories, and the input is built for both search-driven and URL-driven workflows.

Is this Actor usable through Apify MCP?

Yes. It is an Apify Actor with MCP-ready structured output, and the actor identity is khadinakbar/tripadvisor-scraper.

How is pricing calculated?

Pricing follows Pay per event. Listing records, review records, and Actor Start events each have their own event type. Check the live Pricing tab for the current platform and usage details.

Responsible use

Use this Actor for lawful, policy-compliant collection of publicly available TripAdvisor data. Make sure your use of the output fits your internal privacy, access, and data-handling requirements, and review TripAdvisor's terms and any applicable regulations before building production workflows around the results.