How to use it: 3 steps
- Make a free Apify accountApify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us.
- Paste your input and press StartNo code needed: you fill in a form (the input). It already has a working example. For example:
restaurantsin Place types. Each start is one run. - Download the resultsWhen the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.
This tool is an Apify Actor: a small program that runs on Apify. You can also run it on a schedule, for example every Monday. New to it? Read how it works, step by step and the 8 words you need first.
What it does
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.
- 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.
Good for
- 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.
Who uses it
Hotel and restaurant owners
Read what guests say about your place or a rival.
Travel researchers
Compare restaurants, hotels or attractions in one city.
Data teams
Feed fresh place data to a sheet or a database.
Price
Pay per event: you pay for each result the tool saves, plus a small start fee for each run. The price includes Apify platform costs. Apify bills you, not us. Prices below are for the Apify free plan.
| What you pay for | Price | When |
|---|---|---|
| Place | $0.0017 (from $0.00119 on paid Apify plans) | One place result saved. The place check is charged separately. |
| Review | $0.0027 (from $0.00189 on paid Apify plans) | One matching review saved in the dataset. |
| Review page | $0.0005 (from $0.00035 on paid Apify plans) | One review page answered by Tripadvisor, including pages scanned for date or rating filters. Failed requests are free. |
| Start fee | $0.0036 (from $0.00252 on paid Apify plans) | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. |
| Place check | $0.001 (from $0.0007 on paid Apify plans) | One place answered by Tripadvisor, including places that no longer exist. Failed requests are free. |
Examples
- One result: about $0.0063.
- 1,000 results: about $2.70.
- Every day 100 results, for 30 days: about $8.21 a month.
Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. That is enough for about 1,800 results.
Prices checked on 8 November 2026. See the current price on Apify.
Questions
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.
Why are some fields empty?
Tripadvisor does not show every value for every place. 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.
Details
Step by step on Apify
- Open the Input tab and keep What to collect on Search for places (box 1).
- Keep Pattaya restaurants in Search query or place ID, or type your own city and place type (box 2).
- Keep Maximum places at 10 (box 3).
- Click Start at the bottom of the page (below the form, not in the picture).
- When the run ends, open the Output tab and keep the Places view (box 5).
- Check
name,type,ratingandreviewsCount(box 6). - Check
rankingto see the place's position in its city (box 7).
Use cases
| Task | Input | You get | Key fields | Next step |
|---|---|---|---|---|
| Compare restaurants in a city | mode: search, query | Place | name, rating, reviewsCount, ranking, priceLevel | CSV or Excel export |
| Study guest feedback | mode: reviews, placeUrls | Review | rating, title, text, publishedDate, tripType | Spreadsheet or AI agent |
| Check hotel prices for your dates | mode: place, placeUrls, checkInDate, checkOutDate | Place | name, offers, priceRange, roomCount | API |
| Find top attractions for a trip plan | mode: search, query, placeTypes | Place | name, ranking, tags, openingHours, awards | Slack or Notion summary |
| Watch new reviews of your place | mode: reviews, placeUrls, recentDays | Review | publishedDate, rating, text, ownerResponse | Apify schedule |
Tips for better results
- Use a search like Pattaya restaurants to list places in a city.
- The default 300 second timeout fits about 40 places. Raise it for more.
- Use recentDays on a schedule to get recent reviews.
Limits and good to know
- 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 instartUrls, and up to 100 rows insourceDatasetId. 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
Troubleshooting
| Symptom | Likely reason | Check | Action |
|---|---|---|---|
One row with status: not_found and NO_RESULTS | The search found no places | The words in query | Use a city plus a place type, or a link |
| A place that does not look like your search | Tripadvisor search matched one word of your query | The words in query | Use a city plus a place type, or a link |
status: not_found and NOT_FOUND | The place link or ID does not exist | Open the link in a browser | Fix the link or the ID |
status: not_found and NO_MATCHING_REVIEWS | No review passes your filters | Your review filters | Remove a filter |
status: invalid_url | The link is not from Tripadvisor | The link in the row | Use 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 0 | The field or item named in the message | Split the links into smaller runs, or shorten that item |
| "Add a search query, a Tripadvisor URL, or a source dataset." | All inputs are empty | The input form | Fill in one input |
| "The run reached its time limit." | The timeout was too short | The run options | Raise the timeout, and run again |
For developers
Sample result
One result from a real test run, in JSON. Real values change from run to run. In Excel or CSV each field is a column.
{
"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"
}Use it from code
Actor ID: cliqtomedia/tripadvisor-scraper. You need your Apify API token from Apify Console → Settings → API & Integrations.
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("cliqtomedia/tripadvisor-scraper").call(run_input={
"mode": "search",
"query": "Pattaya restaurants"
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~tripadvisor-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"mode": "search", "query": "Pattaya restaurants"}'# pip install langchain-apify
# set APIFY_TOKEN in your environment
from langchain_apify import ApifyActorsTool
tool = ApifyActorsTool("cliqtomedia/tripadvisor-scraper")
result = tool.invoke({"run_input": {"mode": "search", "query": "Pattaya restaurants"}})
print(result)The cURL call waits for the results, up to 300 seconds. For longer runs, start a run (/runs) and get the results with a webhook or by checking the run. Apify API docs. LlamaIndex, MCP for AI agents and the JavaScript client: AI agents & MCP.
Data fields (40)
| Field | Type | Meaning |
|---|---|---|
recordType | string | Row type: place, review, placeWithReviews, or status. |
status | string | Result state: complete on data rows; not_found (nothing matched), failed (this input could not be read), or invalid_url (this URL was refused) on free status rows. |
placeId | integer | Tripadvisor identifier of the place. |
locationId | integer | Tripadvisor location identifier; same value as placeId. |
id | integer | Tripadvisor review identifier. |
name | string | Name of the place. |
type | string | Place type: hotel, restaurant, or attraction. |
rating | number | Overall place rating, or the review star rating on review rows. |
reviewsCount | integer | Total reviews reported for the place. |
address | string | Published business address. |
priceLevel | string | Price category shown by Tripadvisor. |
url | string | Public Tripadvisor URL for this result. |
latitude | number | Latitude of the place. |
longitude | number | Longitude of the place. |
description | string | Description published for the place. |
website | string | Official business website when provided. |
phone | string | Public business phone number. |
aiReviewSummary | string | AI review summary published by Tripadvisor, when requested and available. |
title | string | Review title. |
text | string | Full public review text. |
date | string | Review submission timestamp in ISO 8601 UTC. |
publishedDate | string | Review submission timestamp in ISO 8601 UTC. |
travelDate | string | Reported stay or visit month, or date when known. |
tripType | string | Traveler group reported by the reviewer. |
language | string | Original review language. |
originalLanguage | string | Original language reported by Tripadvisor. |
helpfulVotes | integer | Helpful votes reported for the review. |
source | string | Name of the source: Tripadvisor. |
fetchedAt | string | Time the source was read, in ISO 8601 UTC. |
reason | string | Why a status row was written, such as NO_RESULTS, NO_MATCHING_REVIEWS, NOT_FOUND, INVALID_URL, or SOURCE_BLOCKED. |
cuisines | array | Cuisine labels published for the restaurant. |
amenities | array | Amenities published for the place. |
tags | array | Cuisine, amenity, and attraction type tags. |
photos | array | Public photo URLs; no image files are downloaded. |
nearbyPlaces | array | Nearby places shown by the source. |
openingHours | array | Opening and closing times published for the restaurant or attraction. |
awards | array | Awards of this place shown by the source: type (COE for Travelers' Choice, BOTB for Best of the Best) and year. |
subratings | array | Ratings for individual aspects of a review or place. |
reviews | array | Matching reviews when grouped output is selected. |
placeInfo | object | Place details repeated on each review row. |
Input settings (25)
The main fields of the input form. With the API you send them as JSON.
| Setting | Name in the API | Type | Example value |
|---|---|---|---|
| What to collect | mode | string | "search" |
| Search query or place ID | query | string | "Pattaya restaurants" |
| Place or listing URLs | placeUrls | array | |
| Start URLs | startUrls | array | |
| Source dataset | sourceDatasetId | string | |
| Maximum places | maxItems | integer | 10 |
| Maximum reviews per place | maxReviews | integer | 100 |
| Maximum reviews in total | maxResults | integer | 1000 |
| Place types | placeTypes | array | ["restaurants", "hotels", "attractions"] |
| Review languages | reviewLanguages | array | |
| Review ratings | reviewRatings | array | [] |
| Traveler types | travelerTypes | array | [] |
| Months of visit | monthsOfVisit | array | [] |
| Review keyword | keyword | string | |
| Reviews since | since | string | |
| Reviews until | until | string | |
| Recent days | recentDays | integer | 0 |
| Review order | sortBy | string | "mostRecent" |
| Include reviewer information | scrapeReviewerInfo | boolean | true |
| Include AI review summary | includeAiReviewsSummary | boolean | false |
| Include nearby places | includeNearbyResults | boolean | false |
| Include tags | includeTags | boolean | true |
| Maximum place photos | maxPhotosPerPlace | integer | 0 |
| Photo contributors | photosType | string | "fromEveryone" |
| Hotel check-in date | checkInDate | string |




