Tripadvisor Reviews Scraper & API
Pricing
from $0.83 / 1,000 reviews
Tripadvisor Reviews Scraper & API
Tripadvisor reviews and place details for hotels, restaurants and attractions in any country, from listing links: rating, title, text, date, trip type, travel date, owner response, photos, language. Full history, filters by language, rating, date and keyword. No reviewer names.
Pricing
from $0.83 / 1,000 reviews
Rating
0.0
(0)
Developer
Quarra Labs
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
Get the reviews of any hotel, restaurant, attraction or tour on Tripadvisor, in bulk, without an account or API key. Paste the links of the places, from any Tripadvisor site (tripadvisor.com, .co.uk, .fr, .de…). Each review comes back with its rating, title, text, date, travel date, trip type, detailed ratings, photos, helpful votes, language, and the owner's response with its date. Full history, filters by language, rating, date and keyword, and an optional place record (address, coordinates, phone, website, rating per star, reviews per language). Export as JSON, CSV or Excel, or read it through the Apify API.
No reviewer name, profile or ID; the reviewer's name is removed from owner replies. We deliver what was said
about the place, not who said it. The owner's reply is kept in full, except the name it uses for the reviewer, which
becomes [reviewer], in any language: in the greeting ("Dear Justin K,", "Hello, Frank,", "Bonjour Madame Dupont,",
"Здравствуйте, Иван!", "张三先生您好", "hirotoshi様"), at the start of a paragraph ("Chris, thank you…"), after a thank
you ("Thank you Liza,", "…for your review, Chris.") and wherever the reviewer's own screen name appears. A distinctive
screen name (such as travelbug2019) is removed from the review title and text too. Ordinary words stay: "Dear Valued
Guest" and "Bonjour à tous" are not touched, and a reviewer called "Happy" does not turn "Happy hour" into
"[reviewer] hour".
Quick start
- Paste one or more Tripadvisor links into Tripadvisor links, for example
https://www.tripadvisor.com/Hotel_Review-g60763-d93450-Reviews-Hyatt_Grand_Central_New_York-New_York_City_New_York.html. - Set Max reviews per place.
- Click Start and read the reviews in the run's Output tab.
Like any Apify Actor, it can also be run and read through the Apify API, scheduled, and connected to webhooks, Make, Zapier, n8n or Apify's MCP server for AI agents.
What it is used for
- Reputation monitoring: the newest reviews of your hotels or restaurants since a date, every day, with the owner responses, to see what still has no answer.
- Competitor analysis: what guests praise or complain about at the places around yours, star by star.
- Market research: the same city or chain across languages and countries.
- Sentiment analysis and AI agents: one clean record per review, with a stable ID to deduplicate between runs.
What you get
| Review ID (stable: use it to deduplicate between runs) | yes |
| Rating, title and text | yes |
| Date of the review (UTC, ISO 8601) and month of the stay or visit | yes / when given |
| Trip type (family, couples, solo, business, friends) | when given |
| Detailed ratings (service, value, rooms…) | when given |
| Photos of the review (links) and photo count | yes |
| Helpful votes | yes |
Owner response (the reviewer's name replaced by [reviewer]) and its date | when there is one |
| Language, original language, translation flags (by machine or by a human translator) | yes |
| Link of the review and of the place | yes |
| Reviewer name, screen name, ID, avatar, profile, home town | no, never |
With Add place details, one more record per place: name, type, average rating, number of reviews, reviews per star, reviews per language, address, latitude and longitude, phone and website of the business, opening hours, rank in its city, description, the Tripadvisor distinction of the year, whether it is closed, cuisines and price range (restaurants), amenities (hotels) and main photo.
A field Tripadvisor does not give for a review is null, never missing.
Inputs
- Tripadvisor links: links of hotels (
Hotel_Review), restaurants (Restaurant_Review), attractions (Attraction_Review) and tours (AttractionProductReview), from any Tripadvisor country site. A link to a single review (ShowUserReviews) reads the whole place. Up to 500 place and language pairs per run. - Max reviews per place and Max results in total: counted exactly. Max results in total is 1,000 by default: raise it when you want more (5 places × 2,000 reviews = 10,000).
- Languages: language codes (
en,fr,de,zh-TW…). Left empty, every review of the place is read once, mostly in the language it was written in; Tripadvisor gives some in English translation (about 1 in 10 at New York hotels), flaggedtranslated: truewith theiroriginalLanguage. With languages, each place is read once per language, and only reviews written in that language are delivered, unless Include translations is on (see Limits). Regional codes (pt-BR,en-GB,nb-NO…) are read as their language. - Sort: newest first, most detailed, or Tripadvisor's default order. With Since or Until, the reviews are always read newest first, so the reading stops at the date you set (the run says so if you chose another sort).
- Minimum rating, Maximum rating, Since, Until (a date such as
2026-01-31, or a duration such as30 days) and Review contains (up to 50 words, one per line, matched as whole words:ratdoes not matchrate; in Chinese, Japanese, Korean or Thai, where words are not separated by spaces, any text that contains it). Ratings and words are searched by Tripadvisor itself (one search per word, merged without repeats), so rare words or a one-star filter do not read the whole place (see Limits for the exceptions). - Add place details and Place details only.
Example, through the API:
{"startUrls": ["https://www.tripadvisor.com/Hotel_Review-g60763-d93450-Reviews-Hyatt_Grand_Central_New_York-New_York_City_New_York.html"],"languages": ["en"],"sort": "newest","maxRating": 2,"since": "90 days","maxReviewsPerPlace": 1000,"scrapePlaceDetails": true}
Output
One record per review in the dataset. A shortened review:
{"type": "review","status": "ok","reviewId": "1081854929","placeId": "4418144","placeName": "Reichenbach Hall","placeType": "restaurant","languageFilter": null,"rating": 5,"title": "Great beber and bartender","text": "I was taken care very well. Sarita has great energy!","language": "en","originalLanguage": "en","machineTranslated": false,"translated": false,"date": "2026-10-15T01:14:36Z","travelDate": "2026-10","tripType": "SOLO","subratings": null,"helpfulVotes": 0,"photoCount": 0,"photoUrls": null,"ownerResponse": null,"ownerResponseDate": null,"reviewUrl": "https://www.tripadvisor.com/ShowUserReviews-g60763-d4418144-r1081854929-Reichenbach_Hall-New_York_City_New_York.html","placeUrl": "https://www.tripadvisor.com/Restaurant_Review-g60763-d4418144-Reviews-Reichenbach_Hall-New_York_City_New_York.html","position": 1,"scrapedAt": "2026-10-18T19:00:40Z"}
A shortened place record:
{"type": "place","status": "ok","placeId": "93450","placeName": "Hyatt Grand Central New York","placeType": "hotel","rating": 3.5,"reviewCount": 15041,"ratingHistogram": {"1": 1678, "2": 1708, "3": 2953, "4": 4330, "5": 4372},"languageCounts": {"en": 12802, "es": 5779, "fr": 3521, "…": 0},"address": {"street": "109 East 42nd Street", "street2": "Grand Central Terminal", "postalCode": "10017-8500","city": "New York City", "area": "New York City, New York","fullAddress": "109 East 42nd Street Grand Central Terminal, New York City, NY 10017-8500"},"latitude": 40.752064,"longitude": -73.9763,"phone": "+1 212-883-1234","website": "https://www.hyatt.com/hyatt-hotels/en-US/nycgh-hyatt-grand-central-new-york","amenities": ["Free Internet", "Free Wifi", "Air conditioning", "…"],"rankPosition": 420,"rankTotal": 529,"rankText": "#420 of 529 hotels in New York City","isClosed": false}
status:ok(delivered, charged) orerror(free;errorCodeanderrorsay why,retryablesays if a later run may work). A link to a place that no longer exists gets a freeplace_not_foundrecord; when Tripadvisor merged the listing into another one, the record gives the link of that other listing.positionis the rank of the review in the chosen sort for that place (and language); with Review contains, its rank among the reviews that contain your words.translatedistruewhen the text is a translation of a review written inoriginalLanguage, by machine (machineTranslated: true) or by a human translator.languageCountscounts the reviews readable in each language, translations included, as Tripadvisor does.
The run summary (counts per place, name, rating, why the run stopped, notes) is the OUTPUT record of the run's
key-value store. With Since or Review contains, and without Until, Add place details or
Languages, the summary leaves out each place's rating: those runs stay as cheap as possible (add place details to
get it).
What we measured
On 18 October 2026, on Apify:
- Full history, without gaps: reviews were read 2,400 at a time per place without a single refusal, down to offset 14,000 on a hotel with 15,041 reviews.
- Duplicates: Tripadvisor lists a pinned review at the top and again at its date, about 1 in 2,400 reviews. It is delivered and charged once.
- Languages: on the Empire State Building, of the first 80 reviews Tripadvisor lists under French, 43 are English reviews machine-translated into French. So by default a language filter returns only reviews written in that language, and the run says how many translations it skipped.
- A real run: three places (a New York hotel, the Empire State Building, a German restaurant), up to 3,000 reviews each, with place details: 6,130 reviews and 3 place records in 104 seconds, every review ID distinct, every review with a rating, a date and a text.
- Old links: of three links taken from old pages, one was a listing Tripadvisor had merged into another place and two no longer existed. Each got a free error record saying so, instead of the reviews of a different place.
Pricing
Pay per event. Reviews cost less on higher Apify plans:
| Apify plan | Review | Place record |
|---|---|---|
| Free | $4.60 per 1,000 | $4.60 per 1,000 |
| Starter (Bronze) | $1.75 per 1,000 | $2.70 per 1,000 |
| Scale (Silver) | $1.40 per 1,000 | $2.30 per 1,000 |
| Business (Gold) and above | $0.83 per 1,000 | $1.80 per 1,000 |
A place record is delivered only with Add place details or Place details only. On every plan, the run start is $0.005 per GB of memory (1 GB minimum; $0.005 at the default 256 MB). So 1,000 reviews of one place come to $4.605 on the Free plan and $0.835 on Business.
Never charged: reviews that do not match your filters, translations you did not ask for, error records,
repeats (a review already delivered in the same run is skipped). Set Maximum cost per run in the run options and
the run stops before going over it, with the results delivered so far. If a place record no longer fits under that
maximum but a review does, the place record is skipped (not charged, said in the place's note) and the reviews keep
coming until the maximum is reached.
Limits
- Translations. For a language, Tripadvisor lists the reviews written in it and reviews translated into it,
mostly by machine, a few by a human translator. Off by default; with Include translations they are delivered
too, flagged
translated: true(andmachineTranslated: truewhen done by machine) with theiroriginalLanguage. Tripadvisor offers no way to list only the originals, so when nearly all the reviews it lists in a language are translations (Korean or Japanese at a big New York hotel), the reading of that place in that language stops once it costs more than the originals it finds; the place'snotesays so and the other places go on. With translations on and several languages asked for, a review comes once, under the language it was written in. - Dates and sort. With "Since" or "Until", the reviews are read newest first whatever the sort you chose: it is the only order where the reading can stop at a date. With "Until" far in the past, the start of the window is found with a few small requests (7 in all for a 2015 date at a hotel of 15,000 reviews), not by reading every newer review; the same with Review contains.
- Keyword search by Tripadvisor: each word is searched by Tripadvisor (for an expression, its longest word), then
the whole word or expression is checked while reading. Words in Chinese, Japanese and Korean are searched by
Tripadvisor too; words in Thai, Lao, Khmer or Burmese, and expressions with no word of 3 letters or more (
tv,ac), are matched while reading every review of the place: at a big place with few matches, that reading can stop at the run's cap on unpaid reading, and the run says so. Tripadvisor searches the review's original text: with Include translations, a translated review is found only when its original text contains your words. - 1,000 results per searched word: Tripadvisor's search lists at most 1,000 reviews containing a word. Sorted by
newest (or with "Since" or "Until"), the older reviews are then read without the search and checked here: you get
them all, the ones without your words are not charged, the run just takes longer. With another sort, only those
1,000 can be found, and the place's
notesays so. - A language with no reviews at a place (per the place's own count) is not read at all: watching many places in one language costs nothing for the places that have none.
- Watching many places with "Since": on a day with no new review anywhere, one run checks about 300 places for the
price of the start alone; beyond that it stops, says so, and gives the places it did not check a free
not_readrecord. Every new review delivered raises that number, so a day with news covers more places. With keywords, each place needs one more check, so a quiet day covers about 150 places. - Removed or merged places: an old link can lead to another place or to a list page; it then gets a free
place_not_foundrecord instead of reviews of the wrong place. - Price range is given for restaurants ($ to $$$$); hotel room prices change by date and are not included.
- If a run stops early (your maximum cost, Max results in total, its timeout), every place it did not read in full
and gave nothing for gets a free
not_readrecord, so no input is ever left without an answer (beyond 25 such places, the others are listed in theOUTPUTrecord only). - Anything missing from a result is said: in the run's status, in the
noteof each place in theOUTPUTrecord, or in a free error record. If Tripadvisor limits access during a run, the run says so and keeps what it delivered; running it again later gives the rest.
FAQ
Do I need a Tripadvisor account or API key? No.
Why are reviewer names not included? They are personal data and most uses (reputation, sentiment, research) do not need them. There is no reviewer name, profile or ID in the results; the reviewer's name is removed from owner replies, whose text is kept. The review ID and link let you find any review on Tripadvisor.
Why do I get fewer reviews than the place's review count? The count covers all languages; with a language filter you
get the reviews written in that language. The languageCounts of the place record counts the reviews readable in each
language, translations included, so it can be higher than what you get when Include translations is off.
What if the run is restarted by the platform (migration or reboot)? It resumes where it was: results already in the dataset are not delivered or charged again. If it cannot (its saved progress is missing), it stops at once and says so: what is in the dataset is not charged again, and a new run gives the rest.
Is it legal? It collects public reviews shown to any visitor of Tripadvisor, without reviewer names. Check the rules that apply to your use of the data.
Does the Actor send anything to Quarra? Only when a run fails or runs out of time: the Actor, its build, the error type, the line of our code where it happened, and the memory and time the run was given, so we can fix it fast. Never your input, your results, your account or the run ID.