Tripadvisor Scraper: Places, Reviews, Hotel Prices avatar

Tripadvisor Scraper: Places, Reviews, Hotel Prices

Pricing

from $1.89 / 1,000 reviews

Go to Apify Store
Tripadvisor Scraper: Places, Reviews, Hotel Prices

Tripadvisor Scraper: Places, Reviews, Hotel Prices

Get Tripadvisor hotels, restaurants, attractions and reviews from a search or link. Compare places in a city and study guest feedback. No login or API key.

Pricing

from $1.89 / 1,000 reviews

Rating

0.0

(0)

Developer

Cliqto Media

Cliqto Media

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 days ago

Last modified

Categories

Features

Limited permissions

Share

Tripadvisor Scraper turns a search, a place link or a place ID into rows of hotels, restaurants, attractions and reviews from public Tripadvisor pages, with no login. Use the rows to compare places in a city or to study guest feedback. A first run with 10 places takes about 20 to 35 seconds and costs about $0.03.

Tripadvisor Scraper: a search for Pattaya restaurants returns places with rank and rating, plus reviews and hotel offers

Table of contents

What it does

This Actor reads public Tripadvisor pages and saves clean rows in an Apify dataset. It has three modes:

  • Search for places finds hotels, restaurants and attractions from a search like Pattaya restaurants.
  • Place details reads one place or a list of places.
  • Reviews collects reviews of the places you choose, with filters.

A place row can hold the rating, review count, rank, address, phone, website, coordinates, opening hours, awards and hotel offers. A review row can hold the text, rating, dates, trip type, language, helpful votes and the owner's reply.

Good fit

  • You compare restaurants, hotels or attractions in one city.
  • You read what guests say about your place or a competitor.
  • You check hotel prices for your stay dates.
  • You feed fresh place data to a spreadsheet, a database or an AI agent.

πŸ‘‰ Try it now: open the input form

How it works

  1. You give a search, links, place IDs or a dataset with links.
  2. The Actor opens the public pages and reads up to one page per second. It applies your place types and review filters.
  3. It saves place rows or review rows in the dataset. It also saves a run summary with the counts and the reason the run stopped.

If an input finds nothing, you get a free status row that explains why. You never get a silent empty result.

πŸ‘‰ Try it now: open the input form

Quick start

Input form with What to collect, Search query and Maximum places marked

  1. Open the Input tab and keep What to collect on Search for places (box 1).

  2. Keep Pattaya restaurants in Search query or place ID, or type your own city and place type (box 2).

  3. Keep Maximum places at 10 (box 3).

  4. Click Start at the bottom of the page (below the form, not in the picture).

  5. When the run ends, open the Output tab and keep the Places view (box 5).

    Output table with place name, type, rating, review count and ranking marked

  6. Check name, type, rating and reviewsCount (box 6).

  7. Check ranking to see the place's position in its city (box 7).

Expected result: 10 place rows in about 20 to 35 seconds, for about $0.03.

πŸ‘‰ Try it now: open the input form

Use cases

Buyer jobInput pathOutput entityKey fieldsNext integration
Compare restaurants in a citymode: search, queryPlacename, rating, reviewsCount, ranking, priceLevelCSV or Excel export
Study guest feedbackmode: reviews, placeUrlsReviewrating, title, text, publishedDate, tripTypeSpreadsheet or AI agent
Check hotel prices for your datesmode: place, placeUrls, checkInDate, checkOutDatePlacename, offers, priceRange, roomCountAPI
Find top attractions for a trip planmode: search, query, placeTypesPlacename, ranking, tags, openingHours, awardsSlack or Notion summary
Watch new reviews of your placemode: reviews, placeUrls, recentDaysReviewpublishedDate, rating, text, ownerResponseApify schedule

πŸ‘‰ Try it now: open the input form

Input

Input fields

You must give at least one of query, placeUrls, startUrls or sourceDatasetId. Empty lists mean "no filter". Repeated places are read once.

FieldPlain nameTypeRequiredDefault / prefillAllowed valuesEffectExampleRecommendation
modeWhat to collectstringnodefault searchsearch, place, reviewsPicks place rows or review rowsreviewsStart with search
querySearch query or place IDstringone input neededprefill Pattaya restaurantsCity, business name, numeric ID or URL, up to 300 charactersFinds placesLyon hotelsAdd the place type to the city
placeUrlsPlace or listing URLsarrayone input neededemptyUp to 100 place, city list or public trip links, or numeric IDs. Each is up to 2,048 charactersReads these pages["186338"]Use for known places
startUrlsStart URLsarrayone input neededemptyUp to 100 Tripadvisor links, each up to 2,048 charactersSame as placeUrlsa place linkUse when you move from another scraper
sourceDatasetIdSource datasetstringone input neededemptyA dataset you can read, up to 100 rowsReads place links from its rowsa dataset IDUse to chain runs
maxItemsMaximum placesintegernodefault and prefill 101 to 1,000,000Stops after this many unique place checks50Keep low on a first run
maxReviewsMaximum reviews per placeintegernodefault 1001 to 1,000,000Limits reviews from each place300Controls the cost
maxResultsMaximum reviews in totalintegernodefault 10001 to 1,000,000Limits reviews across all places5000Raise it for big jobs
placeTypesPlace typesarraynoall three typesrestaurants, hotels, attractionsLimits a city search["hotels"]Pick one for a clean list
reviewLanguagesReview languagesarraynoemptyUp to 10 language codesKeeps these original languages["en","fr"]Leave empty for all
reviewRatingsReview ratingsarraynoempty"1" to "5"Keeps these ratings["1","2"]Use to read complaints
travelerTypesTraveler typesarraynoemptyFAMILIES, COUPLES, SOLO, BUSINESS, FRIENDSKeeps these groups["FAMILIES"]Leave empty for all
monthsOfVisitMonths of visitarraynoempty"1" to "12"Keeps these visit months["7"]Use for season checks
keywordReview keywordstringnoemptyAn English word or phrase, up to 200 charactersSearches inside reviewsbreakfastUse one short word
sinceReviews sincestringnoemptyYYYY-MM-DDKeeps reviews from this date2026-01-01Use for a fixed period
untilReviews untilstringnoemptyYYYY-MM-DDKeeps reviews up to this date2026-06-30Use with since
recentDaysRecent daysintegernodefault 0 (off)0 to 36,500Keeps reviews from the last days30Use on a schedule
sortByReview orderstringnodefault mostRecentmostRecent, mostHelpful, detailedSets the review ordermostHelpfulKeep the default
scrapeReviewerInfoInclude reviewer informationbooleannodefault truetrue, falseAdds public reviewer datafalseTurn off if you do not need names
includeAiReviewsSummaryInclude AI review summarybooleannodefault falsetrue, falseAdds the summary shown on the pagetrueNot all places have one
includeNearbyResultsInclude nearby placesbooleannodefault falsetrue, falseAdds nearby placestrueUse for area checks
includeTagsInclude tagsbooleannodefault truetrue, falseAdds cuisine, amenity and type tagsfalseKeep on
maxPhotosPerPlaceMaximum place photosintegernodefault 0 (off)0 to 100Adds photo links5Keep low
photosTypePhoto contributorsstringnodefault fromEveryonefromEveryone, fromTravelers, fromManagementPicks whose photos to addfromTravelersUse with photos on
checkInDateHotel check-in datestringnoemptyYYYY-MM-DDAsks for offers on these dates2026-12-10Set both dates
checkOutDateHotel check-out datestringnoemptyYYYY-MM-DD, after check-inAsks for offers on these dates2026-12-12Set both dates
currencyCurrencystringnodefault USDCurrency codeSets the offer currencyEURUse with hotel dates
languageLanguagestringnodefault enLanguage codeSets review labelsfrKeep the default
localeSite localestringnodefault en-USSite localeSets labels and review responsesfr-FRKeep the default
outputShapeReview outputstringnodefault flatflat, nestedOne row per review, or reviews inside a place row. A place with more than about 2,500 reviews takes several rowsnestedKeep flat for tables
deliveryConnectorSend results to (optional)stringnoemptyYour MCP connector, up to 200 charactersPosts a short summaryyour Slack connectorOptional
deliveryTargetNotion page or channel (optional)stringnoemptyNotion page link or Slack channel ID, up to 2,048 charactersSets where it postsa channel IDOptional
maxPagesMaximum pages per listing or placeintegernodefault 500001 to 1,000,000Stops a long scan100Keep the default
proxyModeConnection routestringnodefault autoauto, direct, datacenterPicks the connectiondirectKeep auto
proxyGroupsDatacenter proxy groupsarraynoemptyUp to 5 datacenter group namesPicks proxy groups["SHADER"]Leave empty

Interacting settings

WhenInput AInput BEffective behaviorExampleCost/result effect
Both are setplaceUrlsqueryLinks win, and the search is ignoredA link plus a cityOnly the links are charged
Both are setsincerecentDayssince winsA date plus 30 daysFewer or more reviews
A date filter is setsince or untilsortByReviews run from most recent firstmostHelpful plus a dateOrder changes
Reviews modemaxReviewsmaxResultsThe first limit reached stops the run100 per place, 1,000 in totalCaps review charges
Only one date is setcheckInDatecheckOutDateThe run stops before work with a clear messageCheck-in onlyStart fee only
Nested outputoutputShapemaxReviewsOne place row holds its reviews3 reviews inside 1 rowEach review is still charged
Search with a cityqueryplaceTypesOnly chosen types are readLyon, hotels onlyFewer place checks

Input examples

Search for places

{
"mode": "search",
"query": "Pattaya restaurants",
"maxItems": 10
}

Expected behavior: the Actor opens the restaurant list for Pattaya and reads 10 place pages. Expected output: 10 place rows with name, rating, reviewsCount, ranking and phone. Limit or cost note: about 20 to 35 seconds and about $0.03.

Reviews with filters

{
"mode": "reviews",
"placeUrls": ["https://www.tripadvisor.com/Hotel_Review-g187147-d207742-Reviews-Intercontinental_Paris_Le_Grand_By_IHG-Paris_Ile_de_France.html"],
"maxReviews": 300,
"reviewRatings": ["1", "2"],
"maxResults": 300
}

Expected behavior: the Actor reads the review pages of this hotel and keeps only 1 and 2 star reviews. Expected output: up to 300 review rows with rating, title, text and publishedDate. Limit or cost note: without filters, 300 reviews of one place took 21 to 27 seconds and cost about $0.82.

πŸ‘‰ Try it now: open the input form

Output

Output fields

Fields depend on the row type and the place type. An empty field means the source did not show that value for this place.

FieldMeaningTypeCan be empty?Example / enumSource / notes
recordTypeRow typestringnoplace, reviewMissing on status rows
statusRow statestringnocomplete, not_found, failed, invalid_urlStatus rows are free
reasonWhy a status row existsstringon data rowsNO_RESULTS, NO_MATCHING_REVIEWSStatus rows only
placeId, locationIdPlace IDnumberon some status rows12283373From the place link
namePlace namestringconditionalLonghorn Steakhouse & GrillPlace and review rows
typePlace typestringconditionalrestaurant, hotel, attractionPlace rows
ratingRating of the place or reviewnumberconditional4.71 to 5
reviewsCountNumber of reviewsnumberconditional597As the page shows it
rankingPosition in the citystringconditional#30 of 1,515 Restaurants in PattayaText from the page
address, phone, websiteContact details on the pagestringconditional+66 81 860 1575Public values only
latitude, longitudeCoordinatesnumberconditional12.930813Place rows
priceLevelPrice bandstringyes, often on attractions$$ - $$$Text from the page
priceRangeHotel price rangeobjectyes{minimum: 94, maximum: 156, currency: "USD"}Empty when the source shows no range
offersHotel offersarrayyesprice text, amount, provider, currency, datesOffers for your dates have no provider name
roomCountNumber of roomsnumberyes390Some hotels
descriptionPlace descriptionstringyesSome places
cuisinesCuisinesarrayyes["Steakhouse"]Restaurants only
amenitiesAmenitiesarrayyesHotels only
tagsCuisine, amenity and type tagsarrayyes["European"]With includeTags
openingHoursOpening timesarrayyes{day, opens, closes}Restaurants and attractions; the day format differs by type
awardsAwards of this placearrayyes{type: "COE", year: 2026}COE is Travelers' Choice; BOTB is Best of the Best
subratingsRatings by topicarrayyes{name: "food", rating: 4.5}Rare on attractions
ratingHistogramCount per starobjectyes{five: 488}Place rows
neighborhoodsArea namesarrayyesSome places
menuUrlMenu linkstringyesSome restaurants
aiReviewSummarySummary shown on the pagestringyesWith includeAiReviewsSummary
nearbyPlacesNearby placesarrayyesWith includeNearbyResults
photosPhoto linksarrayyesWith maxPhotosPerPlace
urlPage linkstringno on data rowsa Tripadvisor link
idReview IDnumberon place rows1079747211Review rows
title, textReview title and textstringconditionalMixedReview rows
publishedDate, dateDate and time of the reviewstringconditional2026-09-28T22:09:55.062ZReview rows
travelDateMonth of the visitstringyes2026-09Review rows
tripTypeTraveler groupstringyesFRIENDSReview rows
language, lang, originalLanguageRow language and original languagestringyesen, frReview rows
isMachineTranslatedText was translated by the sourcebooleanyestrueReview rows
helpfulVotesHelpful votesnumberyes1Review rows
userPublic reviewer dataobjectyesWith scrapeReviewerInfo
ownerResponseThe owner's replyobjectyesWhen the place replied
placeInfoShort place data on a reviewobjectyesReview rows
reviewsReviews inside a place rowarrayyesWith nested output
query, sourceDatasetIdInput of a status rowstringyesStatus rows
source, fetchedAtSource name and read timestringno on data rowsTripadvisor

Compared with some other scrapers, id is a number, publishedDate holds a date and a time, and an empty subratings is null or [].

Output entities and surfaces

The dataset has three views: Places, Reviews and Places with reviews.

SituationDataset/API/KVS/live viewResult shapeUser action
Normal itemDatasetOne row per place or per reviewOpen a view or export the rows
Domain-empty resultDatasetA free status row with status: not_found and reasonCheck the search or relax the filters
Partial resultDataset and RUN_SUMMARYThe saved rows, and a summary with the stop reasonRaise the limit or the timeout and run again
Technical failure or retryStatus message and RUN_SUMMARYSaved rows are kept, and the run shows as failedTry later, or open an issue with the run ID

Output example

This example is trimmed and comes from the first search example above.

{
"recordType": "place",
"status": "complete",
"placeId": 12283373,
"name": "Longhorn Steakhouse & Grill",
"type": "restaurant",
"rating": 4.7,
"reviewsCount": 597,
"ranking": "#30 of 1,515 Restaurants in Pattaya",
"address": "216/47-48 Pattaya 2nd Rd Inside Plaza Arcade, 20150, TH",
"phone": "+66 81 860 1575",
"latitude": 12.930813,
"longitude": 100.88198,
"priceLevel": "$$ - $$$",
"cuisines": ["Steakhouse", "European"],
"awards": [{ "type": "COE", "year": 2026 }],
"description": null,
"menuUrl": null,
"source": "Tripadvisor"
}

null means the page did not show this value for this place. Some fields fit only one place type. For example, cuisines fits restaurants, and amenities and offers fit hotels.

Send results to Slack or Notion

Choose your connector in the optional deliveryConnector field. When the run has saved its rows, the Actor posts a short summary there: up to 25 rows and a link to the full dataset. Put a Notion page link or a Slack channel ID in deliveryTarget. In Notion, each run goes on top of that one page, so you do not get a new page each time. If delivery fails, the run still succeeds, and delivery has no extra fee. Connect a service once in Apify Console β†’ MCP connectors.

Use case β†’ fields

Buyer jobInput pathOutput entityKey fieldsNext integration
Rank places in a cityqueryPlacename, ranking, ratingCSV export
Read complaintsplaceUrls, reviewRatingsReviewrating, text, ownerResponseSpreadsheet
Check stay pricesplaceUrls, checkInDate, checkOutDatePlaceoffers, priceRangeAPI

πŸ‘‰ Try it now: open the input form

Pricing

Pricing unit

You pay per event. Tripadvisor and Apify proxy use is included in the event price.

EventWhen chargedNo plan or FreeBronzeSilverGold and above
ReviewEach saved review$0.0027$0.00243$0.00216$0.00189
PlaceEach saved place row$0.0017$0.00153$0.00136$0.00119
Place checkEach unique place the Actor opens$0.001$0.0009$0.0008$0.0007
Review pageEach page of reviews read$0.0005$0.00045$0.0004$0.00035
StartEach run$0.0036$0.00324$0.00288$0.00252

Bronze saves 10%. Silver saves 20%. Gold, Platinum and Diamond save 30%. The start fee scales with run memory, per GB. Runs up to 1 GB pay it once, and this Actor's maximum is 512 MB.

  • Search with no results: you pay the start fee only. The status row is free.
  • Filter with no match: you pay the start fee, the place check and the review pages read. The status row is free.
  • Partial and failed runs: you pay for what was saved or checked before the stop. You can set a maximum cost per run, and the Actor stops there.
  • Platform use: it is included in these prices.

Cost examples

Prices below are for No plan or Free.

ScenarioInput scopeExpected item/event countBase chargeOptional chargeStop/cap behavior
First run10 restaurants in Pattaya10 places, 10 checksabout $0.03noneStops at maxItems
City list100 restaurants in London100 places, 100 checksabout $0.27noneSet a 900-second timeout
300 reviews1 attraction300 reviews, 15 pagesabout $0.82noneStops at maxReviews
700 reviews1 hotel700 reviews, 36 pagesabout $1.91noneStops at maxReviews
No match1 place, strict filter1 check, 1 pageabout $0.005noneFree status row
Not foundA search with no resultstart only$0.0036noneFree status row

πŸ‘‰ Try it now: open the input form

Limits

  • Public pages only: there is no login, no private data and no email search.
  • Speed: up to one request per second. A place usually takes 2 to 7 seconds, and reviews come at 11 to 16 per second. When Tripadvisor refuses a page, retries can stretch one place to about 45 seconds.
  • Time limit: the Actor stops 20 seconds before your timeout and keeps the saved rows. The default 300 seconds fits about 40 places. 100 London restaurants took from 200 to 534 seconds, and one run saved only 94 places in 600 seconds. Tripadvisor pages load at different speeds, so use a 900-second timeout for 100 places.
  • Direct inputs: up to 100 links in placeUrls, up to 100 in startUrls, and up to 100 rows in sourceDatasetId. A link can have up to 2,048 characters. You need read access to this dataset.
  • City lists: the Actor reads the list as the source shows it. It does not split a big city into smaller areas, so a list can end before all places are read.
  • Hotel offers: the list can be empty on a complete row. Offers for your dates have no provider name. Occupancy is fixed at 2 adults and 1 room.
  • Page size: a single response over 8 MB is refused.
  • Failures: 3 failed inputs in a row stop the run, and saved rows stay in the dataset. If no input works, the run shows as failed.
  • Nested rows: one row holds up to 8 MB of reviews, about 2,500. A place with more reviews takes several rows. 300 reviews made a row of 0.84 MB.
  • Connection: a direct connection comes first, and an Apify datacenter proxy follows after a block. Residential, Unblocker and SERP groups are not supported.
  • Not included: Standby mode, a list of only new items, and custom scripts. Use recentDays on a schedule for recent reviews.
  • Missing values: the source does not show every field for every place.
  • Terms: Tripadvisor's terms restrict automated collection without permission, so check that your use is allowed. This Actor is not made or approved by Tripadvisor.

πŸ‘‰ Try it now: open the input form

API, export and integrations

  • API: start the Actor through the Apify API with the same JSON input, then read rows from its dataset. This is not a Tripadvisor API.
  • Export: download the dataset as CSV, Excel, JSON or XML.
  • Scheduling: run a saved task on an Apify schedule, for example with recentDays for recent reviews.
  • Webhooks / no-code: an Apify webhook or integration can start the next step when the run ends. It reads the rows from the default dataset.
  • SDK / MCP / agent: use the Apify client for JavaScript or Python, or the MCP server below.

Use with AI agents (MCP)

MCP server URL with only this Actor: https://mcp.apify.com?tools=cliqtomedia/tripadvisor-scraper

The smallest useful input:

{ "mode": "search", "query": "Pattaya restaurants", "maxItems": 10 }

Key output fields:

  • name: the place name.
  • rating: the average rating, from 1 to 5.
  • reviewsCount: the number of reviews.
  • ranking: the position of the place in its city.
  • url: the link to the place page.

This run takes about 20 to 35 seconds and costs about $0.03. Each place usually takes 2 to 7 seconds. Reviews cost $0.0027 each on the Free plan, so set maxReviews and a maximum cost.

πŸ‘‰ Try it now: open the input form

Troubleshooting

SymptomLikely reasonCheckAction
One row with status: not_found and NO_RESULTSThe search found no placesThe words in queryUse a city plus a place type, or a link
A place that does not look like your searchTripadvisor search matched one word of your queryThe words in queryUse a city plus a place type, or a link
status: not_found and NOT_FOUNDThe place link or ID does not existOpen the link in a browserFix the link or the ID
status: not_found and NO_MATCHING_REVIEWSNo review passes your filtersYour review filtersRemove a filter
status: invalid_urlThe link is not from TripadvisorThe link in the rowUse a Tripadvisor link
"An input field has a wrong value: placeUrls."The field breaks a limit, such as over 100 links in placeUrls or startUrls. A name such as placeUrls.1 points to one item, counted from 0The field or item named in the messageSplit the links into smaller runs, or shorten that item
"Add a search query, a Tripadvisor URL, or a source dataset."All inputs are emptyThe input formFill in one input
"The run reached its time limit."The timeout was too shortThe run optionsRaise the timeout, and run again
"The run stopped at your maximum cost per run."Your cost limit was reachedThe run optionsRaise the limit, and run again
"Maximum pages was reached, so more results may exist."maxPages stopped the scanmaxPagesRaise it
One row with status: failed, or "Some inputs failed."Tripadvisor refused or timed out on this placeurl and reason in the rowRun that link again. The other rows are kept
"Tripadvisor refused the requests." or "asked to slow down"The source is blocking for nowRUN_SUMMARYKeep proxyMode on auto, and try later
"The source dataset could not be read."Wrong ID or no accessThe dataset IDUse a dataset you can read
"The source dataset has over 100 rows."The dataset is too largeThe dataset sizeUse up to 100 rows
"The Tripadvisor page format has changed."The source page changedThe run logOpen an issue with the run ID
offers is emptyThe source shows no offers for this hotelcheckInDate, checkOutDateTry other dates

πŸ‘‰ Try it now: open the input form

FAQ

Do I need a Tripadvisor account or an API key?

No. The Actor reads public pages. You need only an Apify account.

Is this a Tripadvisor API?

No. It is a scraper that you can start through the Apify API. It does not use a Tripadvisor key.

Why are some fields empty?

The source does not show every value for every place. Some fields also fit only one place type. For example, attractions have no cuisines.

Can I get all reviews of a place?

Set maxReviews and maxResults above the review count, and set a long enough timeout. We measured up to 700 reviews from one place in one run. The count on the page can differ from the rows you get.

What do I pay when nothing is found?

You pay the start fee. If a place was opened, you also pay the place check and the review pages. Status rows are free.

How fresh is the data?

Each row shows the read time in fetchedAt. The Actor does not keep history between runs.

πŸ‘‰ Try it now: open the input form

πŸ‘‰ Try it now: open the input form

Support

For a bug, a question or a feature request, open the Issues tab of this Actor on Apify. Include the run ID, the mode and the error text. Never send tokens, cookies or private data.

πŸ‘‰ Try it now: open the input form