TripAdvisor Scraper
Pricing
from $1.00 / 1,000 run start fees
TripAdvisor Scraper
Give it a TripAdvisor restaurants or hotels list URL and get the places back as rows: rating, review count, price band, phone number, full address, coordinates and cuisine tags.
Pricing
from $1.00 / 1,000 run start fees
Rating
0.0
(0)
Developer
SR
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Two surfaces, one actor. Give it a TripAdvisor restaurants or hotels list URL and get the places back as rows: rating, review count, price band, phone number, full address, coordinates and cuisine tags. Give it individual place pages instead and get the reviews on them: full text, star rating, the reviewer, the month they visited, the date they wrote it, their photos, the per-category scores and the owner's reply.
No browser, no CAPTCHA solver, no cookies.
What you get
- Rating and review count on every row, which together are the only honest read of a place: a 4,8 from eleven reviews and a 4,4 from fifteen hundred are not the same signal
- Coordinates on every row, so results drop into a map or a spatial join with no geocoding step
- Phone number and full postal address, split into street, city, region and postal code
- Cuisine tags and price band on restaurants
address_sourceon every row, saying whether TripAdvisor split the address itself or whether the city had to be taken out of the street line- Restaurants and hotels from the same actor, both paginated
How this reaches the site
TripAdvisor refuses almost every automated request, which is why most scrapers for it either need a browser or stop working.
It answers 200 with about 2 MB to OAI-SearchBot, OpenAI's search crawler.
Those last two are worth putting side by side. Both are OpenAI crawlers; one is refused and one is served. Whatever rule TripAdvisor is applying, it is not "block the AI bots", and no amount of reasoning would have found the working one. It had to be enumerated.
What that buys you: no browser, no solver, so runs are fast and cheap. What it costs you: a single-identity route can close. If it does, this actor reports forbidden and explains it rather than returning an empty result.
Input
| Field | Type | Required | Default | What it does |
|---|---|---|---|---|
url | string | one of these two | a Boston restaurants URL | A TripAdvisor restaurants or hotels list URL. Returns one row per place |
detail_urls | array | one of these two | empty | Individual place page URLs. Returns one row per review |
max_reviews_per_url | integer | no | 0 | Cap per page. 0 takes every review the page carries |
include_place_row | boolean | no | false | Also emit a row describing each place, ahead of its reviews |
domain | select | no | com | Which national TripAdvisor site to read: com, co.uk, fr, de, es, it, nl, ca, com.au, in |
limit | integer | no | 60 | Places to return from a list URL, 1 to 600. A page carries 30 |
retries | integer | no | 3 | Retry attempts per page |
Fill url or detail_urls, not both. If both are present, detail_urls wins and the list URL is ignored.
Pick the city on TripAdvisor and paste the URL from your browser. The actor handles pagination itself.
Collecting reviews
Paste any restaurant, hotel or attraction page:
https://www.tripadvisor.com/Restaurant_Review-g60745-d321583-Reviews-Boston_Sail_Loft-Boston_Massachusetts.htmlhttps://www.tripadvisor.com/Hotel_Review-g60745-d89585-Reviews-Four_Seasons_Hotel_Boston-Boston_Massachusetts.htmlhttps://www.tripadvisor.com/Attraction_Review-g60763-d103371-Reviews-Grand_Central_Terminal-New_York_City_New_York.html
Each returns the reviews that page renders, newest first, with the whole body text. Not a preview: TripAdvisor's "Read more" control is a display clamp, so the full multi-paragraph review is already on the page.
How many per URL. 10 to 15. That is the page, and it is a hard ceiling rather than a setting, because TripAdvisor's -orN- review offset is ignored on the route this actor uses. Asking for 200 returns 15 and the run summary says so. If you need an archive of thousands of reviews for one hotel, this is not the tool.
The dates mean two different things. stay_date is the month the reviewer says they visited. published_date is when they wrote it. On the Boston Sail Loft's most recent review those are May 2026 and July 5, 2026, two months apart. Restaurant and attraction pages publish a full written date, hotel pages publish only the month, and each is returned at the granularity TripAdvisor published it. Nothing is rounded up into a day that was never stated.
The URL slug is decoration. TripAdvisor resolves the d number and ignores the words after it. A request for d94333-Reviews-The_Lenox_Hotel-Boston comes back HTTP 200 carrying Friendship Inn Gardo's of Forest City, North Carolina, because 94333 is that motel. Every row therefore names the place from the page that was actually served, and requested_url keeps what you asked for so a mismatch is visible instead of silent.
Output
{"position": 1,"location_id": "3567563","name": "Carmelina's","type": "Restaurant","url": "https://www.tripadvisor.com/Restaurant_Review-g60745-d3567563-Reviews-Carmelina_s-Boston_Massachusetts.html","rating": 4.5,"reviews_count": 807,"price_range": "$$ - $$$","cuisines": ["Italian","Pizza"],"telephone": "+1 617-742-0020","street": "307 Hanover St","city": "Boston","region": "MA","postal_code": "02113-1810","country": "United States","address_source": "derived_from_street","latitude": 42.36387,"longitude": -71.05464}
Use cases
Building a local-business dataset for a city. One run gives you every restaurant or hotel TripAdvisor lists, with rating, review volume, price band, phone and coordinates. That is a usable lead list or market map without touching a business-directory API.
Competitive positioning for a venue. Pull the city, sort by reviews_count, and you can see where a place sits against the ones that actually get traffic rather than against the ones with the highest score.
Market gap analysis. Group restaurants by cuisines and price_range per neighbourhood using the coordinates. Where a band is thin is where a concept has room.
Hotel rate-band research. The hotels surface returns the same structure, so a city's supply can be split by band and rating before any rate-shopping work starts.
Enriching an existing venue list. Match on name and coordinates and you gain rating, review count and phone for records that had only an address.
Limits and gotchas
- Attractions are not supported. That surface ships an empty schema.org list and keeps its data elsewhere, so the parser returns nothing for it. The actor refuses attraction URLs with that explanation rather than returning an empty run.
- Restaurants and hotels format their address differently. Hotels split it properly. Restaurants leave the city and region fields empty and put everything in the street line, so those are split out and
address_sourcesaysderived_from_street. It worked on 29 of 30 in testing; the one miss had no comma to split on. price_rangeis a band, not an amount. Restaurants show$$ - $$$, hotels show euro symbols even from a US exit. It is TripAdvisor's own notation and is returned exactly as published rather than converted into a number it does not represent.- 30 places per page, paginated on an offset in the URL. The actor rewrites that itself, so paste the plain first-page URL.
descriptionis usually empty on list pages. TripAdvisor keeps the text on the place's own page.- US exit. Other TripAdvisor domains are not covered.
FAQ
Does this need a browser? No. It is a plain HTTP request, which is why it is fast.
Can I scrape reviews with it? No, this reads list pages: which places exist and how they are rated. Individual reviews live on each place's own page.
Why are attractions refused? Because that page carries no structured place list. Returning zero rows without saying why would look like a broken run.
Why is the hotel price band in euros? Because that is what TripAdvisor publishes there. It is a band rather than a price, so the symbol carries no information.
How many places can I get? Up to 600, which is 20 pages.
Review fields
| Field | What it is |
|---|---|
review_id, review_url | TripAdvisor's own id and the permalink. Stable, so a repeat run diffs cleanly against the last |
rating | The reviewer's own score out of 5. Not one of the category scores below |
title, text | The headline and the whole body |
author, author_location, author_contributions, helpful_votes | Who wrote it. Helpful votes appear on hotel pages only |
stay_date, trip_type | When they visited and who with |
published_date | When they wrote it |
subratings | Category scores the reviewer gave. value, rooms, location, cleanliness, service, sleep_quality on hotels; value, service, food, atmosphere on restaurants. Empty when the reviewer skipped them |
owner_response, owner_response_from, owner_response_date | The property's published reply, where there is one |
photos | Photos the reviewer attached |
place_name, place_type, place_url, location_id | The place, read from the page served |
requested_url | What you submitted |
reviews_on_page | How many the page carried before any cap |
Related Actors
- Google Maps Scraper — the same kind of local record from Google
- Trustpilot Reviews — review data for businesses
- Booking Scraper — accommodation listings