TripAdvisor Scraper avatar

TripAdvisor Scraper

Pricing

from $1.00 / 1,000 run start fees

Go to Apify Store
TripAdvisor Scraper

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

SR

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

4 days ago

Last modified

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_source on 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

FieldTypeRequiredDefaultWhat it does
urlstringone of these twoa Boston restaurants URLA TripAdvisor restaurants or hotels list URL. Returns one row per place
detail_urlsarrayone of these twoemptyIndividual place page URLs. Returns one row per review
max_reviews_per_urlintegerno0Cap per page. 0 takes every review the page carries
include_place_rowbooleannofalseAlso emit a row describing each place, ahead of its reviews
domainselectnocomWhich national TripAdvisor site to read: com, co.uk, fr, de, es, it, nl, ca, com.au, in
limitintegerno60Places to return from a list URL, 1 to 600. A page carries 30
retriesintegerno3Retry 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.html
https://www.tripadvisor.com/Hotel_Review-g60745-d89585-Reviews-Four_Seasons_Hotel_Boston-Boston_Massachusetts.html
https://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_source says derived_from_street. It worked on 29 of 30 in testing; the one miss had no comma to split on.
  • price_range is 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.
  • description is 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

FieldWhat it is
review_id, review_urlTripAdvisor's own id and the permalink. Stable, so a repeat run diffs cleanly against the last
ratingThe reviewer's own score out of 5. Not one of the category scores below
title, textThe headline and the whole body
author, author_location, author_contributions, helpful_votesWho wrote it. Helpful votes appear on hotel pages only
stay_date, trip_typeWhen they visited and who with
published_dateWhen they wrote it
subratingsCategory 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_dateThe property's published reply, where there is one
photosPhotos the reviewer attached
place_name, place_type, place_url, location_idThe place, read from the page served
requested_urlWhat you submitted
reviews_on_pageHow many the page carried before any cap