---
title: "How to Scrape Tripadvisor (2026 Guide) | Scrape.ly"
description: "How to scrape Tripadvisor hotels, restaurants and reviews: ratings, rankings, prices and owner replies. Two real runs, their cost, and API and MCP code."
url: https://scrape.ly/blog/scrape-tripadvisor
markdown: https://scrape.ly/blog/scrape-tripadvisor.md
---

[Tutorials](https://scrape.ly/blog/category/tutorials.md)

# How to Scrape Tripadvisor: Hotels, Restaurants, Attractions and Reviews

Scrape Tripadvisor hotels, restaurants and attractions by city or URL, then pull the reviews: ratings, rankings, prices, contacts, trip types and owner replies. Two real runs, their exact cost, and code for curl, Python, Node.js and AI agents.

[Roam & Roof Actor publisher on the Scrape.ly Store](https://scrape.ly/blog/author/roamandroof.md)

- Published

  Oct 23, 2026

- Reading time

  10 min read

![Pixel-art robot with an orange >\_ on its terminal head pulls a review card with five green rating bubbles out of a hotel tower whose sign shows the green Tripadvisor owl logo, and drops it into a crate](https://scrape.ly/media/scrape-tripadvisor.png?w=1080)

To scrape Tripadvisor, give a scraper a city name or a Tripadvisor place URL and save each hotel, restaurant or attraction as a row: name, rating, review count, ranking, address, phone, price range and amenities. Then, for the places you care about, scrape Tripadvisor reviews with a second tool that reads every review with its stars, trip type, sub-ratings and the owner's reply.

On Scrape.ly both jobs are ready-made: the Tripadvisor Scraper returns places at $2.50 per 1,000, and the Tripadvisor Reviews Scraper returns reviews at $2.50 per 1,000, with Tripadvisor's bot check handled for you. Everything below comes from two real runs on 23 October 2026: ten Chicago hotels and ten reviews of a New York hotel, with the exact inputs, outputs, logs and charges.

## What data you can get from Tripadvisor

The [Tripadvisor Scraper](https://scrape.ly/store/roamandroof/tripadvisor-scraper.md) writes one row per place. Hotel rows add class, rooms, amenities and booking offers; restaurant rows add cuisines, hours and diets; attraction rows add subcategories.

| Field                                                         | What it holds                                                                                |
| ------------------------------------------------------------- | -------------------------------------------------------------------------------------------- |
| `name`, `type`, `category`                                    | Place name and `HOTEL`, `RESTAURANT` or `ATTRACTION`                                         |
| `rating`, `numberOfReviews`, `ratingHistogram`                | Average rating, review count and the count per star                                          |
| `rankingString`, `rankingPosition`                            | Tripadvisor's ranking, such as "#6 of 260 hotels in Chicago"                                 |
| `categoryReviewScores`                                        | Aspect scores: Location, Rooms, Cleanliness, Service, Sleep Quality, Value                   |
| `address`, `addressObj`, `latitude`, `longitude`              | Address text, its parts and coordinates                                                      |
| `phone`, `email`, `website`, `webUrl`                         | Contact details and the Tripadvisor page                                                     |
| `priceLevel`, `priceRange`, `offers`                          | Price band, price range and per-site offers (Expedia, Booking.com and others) for your dates |
| `hotelClass`, `numberOfRooms`, `amenities`                    | Star class, room count and the amenity list                                                  |
| `reviewTags`, `neighborhoodLocations`, `nearestMetroStations` | Review keywords, neighborhoods and nearby stations                                           |

The [Tripadvisor Reviews Scraper](https://scrape.ly/store/roamandroof/tripadvisor-reviews-scraper.md) writes one row per review: `title`, `text`, `rating`, `publishedDate`, `travelDate`, `tripType`, `subratings` (Value, Rooms, Location and so on), `helpfulVotes`, `photos`, `ownerResponse` with its date, and a `placeInfo` block with the place's rating, review count and address. Reviewer details are optional and off in the preset we used.

Fields stay empty when Tripadvisor has nothing to show: not every hotel publishes an email, and not every review has sub-ratings.

## How to scrape Tripadvisor without code

1. Open the [Tripadvisor Scraper](https://scrape.ly/store/roamandroof/tripadvisor-scraper.md) in the Scrape.ly Store.
2. Pick a ready-made input. We used the preset [Places in Chicago, 10 results](https://scrape.ly/store/roamandroof/tripadvisor-scraper/presets/search-filters.md). "Try this input" opens it in the console.
3. Type your own city. This is the exact input of our run:

```json
{
  "query": "Chicago",
  "maxItemsPerQuery": 10,
  "language": "en",
  "currency": "EUR",
  "maxPhotosPerPlace": 0
}
```

4. Click **Start**. A 10-place run takes about half a minute, most of it spent on Tripadvisor's bot check.
5. Export the rows as JSON, CSV, Excel or HTML.

The fields that matter most:

- `query`: a destination as you'd type it into Tripadvisor. The first matching destination is used. A place name returns that one place.
- `startUrls`: place pages (`Hotel_Review`, `Restaurant_Review`, `Attraction_Review`) or category pages (`Hotels-g…`, `Restaurants-g…`, `Attractions-g…`).
- `maxItemsPerQuery`: places to save for the query, and again for each URL. Default 10.
- `includeHotels`, `includeRestaurants`, `includeAttractions`: a city search reads hotels first, then restaurants, then attractions, until it hits the maximum. Switch hotels off to get a restaurant list, as in the preset [Restaurants in Paris in French, 15 results](https://scrape.ly/store/roamandroof/tripadvisor-scraper/presets/restaurants-only-fr.md).
- `checkInDate`, `checkOutDate`: dates for hotel offers, absolute (`2026-12-01`) or relative (`30 days`). Empty means tomorrow for one night.

## How to scrape Tripadvisor reviews

Reviews come from the second Actor, one place URL at a time. We ran the preset [url-light](https://scrape.ly/store/roamandroof/tripadvisor-reviews-scraper/presets/url-light.md): the ten latest reviews of one hotel, in every language, without reviewer profiles. Its input:

```json
{
  "startUrls": [
    { "url": "https://www.tripadvisor.com/Hotel_Review-g60763-d113311-Reviews-The_Peninsula_New_York-New_York_City_New_York.html" }
  ],
  "maxItemsPerQuery": 10,
  "reviewRatings": ["ALL_REVIEW_RATINGS"],
  "reviewsLanguages": ["ALL_REVIEW_LANGUAGES"],
  "scrapeReviewerInfo": false,
  "disableMachineTranslations": false
}
```

Newest reviews are read first. `lastReviewDate` (`2026-01-01` or `30 days`) stops the run at a date, `reviewRatings` keeps only certain stars (for example `["1", "2"]` for complaints), `reviewsLanguages` keeps one language, and `disableMachineTranslations` returns the text as written instead of Tripadvisor's translation.

Scrape.ly Store Tripadvisor Scraper Hotels, restaurants and attractions from a city search or Tripadvisor URLs: rating, ranking, price range, offers, contacts and amenities. $2.50 per 1,000 places.

[Try it free](https://scrape.ly/store/roamandroof/tripadvisor-scraper.md) [Browse the Store](https://scrape.ly/store.md)

## How to scrape Tripadvisor with the API

Create an API token under **Settings → API & Integrations** and export it as `SCRAPELY_TOKEN`.

Our place run took 31 seconds because of the bot check, too close to the 45-second limit of the synchronous endpoint. Use the asynchronous flow: start the run, wait, then read the rows.

```shell
# 1. start the run; the response's data.id is the run ID
curl -X POST "https://api.scrape.ly/v2/actors/roamandroof~tripadvisor-scraper/runs"
  -H "Authorization: Bearer $SCRAPELY_TOKEN"
  -H "Content-Type: application/json"
  -d '{"query": "Chicago", "maxItemsPerQuery": 10, "includeRestaurants": false, "includeAttractions": false}'
# 2. wait (up to 60 s per call; repeat until status is SUCCEEDED)
curl "https://api.scrape.ly/v2/actor-runs/RUN_ID?waitForFinish=60"
  -H "Authorization: Bearer $SCRAPELY_TOKEN"
# 3. read the places (CSV here)
curl "https://api.scrape.ly/v2/actor-runs/RUN_ID/dataset/items?format=csv"
  -H "Authorization: Bearer $SCRAPELY_TOKEN"
```

Python (`pip install scrapely-client-python`). `call()` waits however long the run takes. This example finds the hotels, then pulls the latest low-star reviews of the three with the most reviews:

```python
import os
from scrapely_client import ScrapelyClient

client = ScrapelyClient(os.environ["SCRAPELY_TOKEN"], api_url="https://api.scrape.ly")

run = client.actor("roamandroof/tripadvisor-scraper").call(
    run_input={"query": "Chicago", "maxItemsPerQuery": 10, "includeRestaurants": False, "includeAttractions": False}
)
hotels = list(client.dataset(run.default_dataset_id).iterate_items())
top = sorted(hotels, key=lambda h: h.get("numberOfReviews") or 0, reverse=True)[:3]

reviews_run = client.actor("roamandroof/tripadvisor-reviews-scraper").call(
    run_input={
        "startUrls": [{"url": h["webUrl"]} for h in top],
        "maxItemsPerQuery": 20,
        "reviewRatings": ["1", "2"],
        "scrapeReviewerInfo": False,
    }
)
for r in client.dataset(reviews_run.default_dataset_id).iterate_items():
    print(r["placeInfo"]["name"], r["rating"], r["publishedDate"], r["title"])
```

Node.js (`npm install scrapely-client`):

```javascript
import { ScrapelyClient } from 'scrapely-client';

const client = new ScrapelyClient({ token: process.env.SCRAPELY_TOKEN, baseUrl: 'https://api.scrape.ly' });

const run = await client.actor('roamandroof/tripadvisor-scraper').call({
  query: 'Chicago',
  maxItemsPerQuery: 10,
  includeRestaurants: false,
  includeAttractions: false,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.map((h) => [h.name, h.rating, h.rankingString, h.priceRange]));
```

For AI agents, add the Scrape.ly MCP server. In Cursor, put this in `~/.cursor/mcp.json`:

```json
{
  "mcpServers": {
    "scrapely": {
      "url": "https://api.scrape.ly/mcp",
      "headers": { "Authorization": "Bearer YOUR_TOKEN" }
    }
  }
}
```

In Claude Code, run `claude mcp add --transport http scrapely https://api.scrape.ly/mcp` and sign in with `/mcp`. Then ask: "Use scrapely to run roamandroof/tripadvisor-scraper for hotels in Chicago, 10 places, then get the 20 newest reviews of the top-ranked one and summarize the complaints." The agent reads both input schemas, runs the Actors and polls `get-actor-run` when a run outlasts the 45-second wait. The [Tripadvisor API](https://scrape.ly/api/tripadvisor-api.md) page shows the same data as an API product, and the [MCP docs](https://scrape.ly/docs/mcp.md) cover every client.

## A real run: ten Chicago hotels and ten New York reviews

We ran the "Places in Chicago, 10 results" preset on 23 October 2026. It returned 10 places in 31 seconds and was charged $0.0307. All ten were hotels, because a city search fills the limit with hotels before it moves on to restaurants. The first five rows:

| Hotel                                           | Rating | Reviews | Ranking                       | Class | Price range |
| ----------------------------------------------- | ------ | ------- | ----------------------------- | ----- | ----------- |
| Hampton Inn Chicago Downtown/Magnificent Mile   | 4.2    | 2,488   | #50 of 260 hotels in Chicago  | 3     | $130 - $533 |
| LondonHouse Chicago, Curio Collection by Hilton | 4.8    | 5,086   | #6 of 260 hotels in Chicago   | 4     | $207 - $856 |
| The Congress Plaza Hotel & Convention Center    | 3.0    | 3,659   | #186 of 260 hotels in Chicago | 3     | $124 - $478 |
| Hampton Inn & Suites Chicago-Downtown           | 4.4    | 3,652   | #32 of 260 hotels in Chicago  | 3     | $126 - $506 |
| Hilton Chicago                                  | 3.9    | 7,505   | #61 of 260 hotels in Chicago  | 4     | $181 - $725 |

What the full ten show:

- **Rankings spread wide.** The ten sat between #6 and #186 of 260 Chicago hotels, with ratings from 3.0 to 4.8 and 1,210 to 7,505 reviews each.
- **Offers for real dates.** Every hotel carried 5 to 13 offers from booking sites for the default stay (24 to 25 October). The Hampton Inn on Magnificent Mile ranged from $139 on Skyscanner to $144 on Expedia, Hotels.com and Booking.com.
- **Contacts for outreach.** Nine of the ten had a phone number, eight an email address and seven a website.
- **Aspect scores.** Each row splits the rating into six scores; the first hotel scored 4.8 for Location and 4.1 for Value.

Prices came back in US dollars, as tripadvisor.com quoted them, so check the currency symbol in `priceRange` before you mix runs from different markets.

Then we ran the reviews preset on The Peninsula New York (4.5 from 1,523 reviews). It returned 10 reviews in 11 seconds and was charged $0.0272:

| Published  | Stars | Trip type | Title                                           | Owner reply |
| ---------- | ----- | --------- | ----------------------------------------------- | ----------- |
| 2026-08-30 | 5     | Business  | Simply the best                                 | yes         |
| 2026-08-23 | 5     | Couples   | Unsurpassed luxury                              | yes         |
| 2026-08-08 | 5     | Family    | Great experience!                               | yes         |
| 2026-07-03 | 5     | Friends   | Bar review - "Braw" as we would say in Scotland | yes         |
| 2026-06-04 | 5     | Family    | Grand Hotel With Excellent Service              | yes         |

Reviewer profiles were off in this preset, so no reviewer names were saved; reviewers are private people, and staff or manager names that appear in review and reply text are masked in our stored sample. Nine of the ten reviews gave five stars and one gave four, the trips were split across business, couples, family, friends and solo, and the hotel had replied to all ten. Seven reviews carried sub-ratings; one rated Value 3 while giving Rooms and Service 5.

The two logs, without the platform's start-up lines:

```plaintext
20261023T03:01:53.659Z [scrapely.actor] INFO  Antibot solver source: platform.
20261023T03:02:03.047Z [scrapely.actor] INFO  Reading 10 places.
20261023T03:02:20.645Z [scrapely.actor] INFO  Saved 10 places. Solver calls: 2.
20261023T03:02:21.364Z [Scrapely] Container state: status=exited exitCode=0 oomKilled=false
20261023T03:04:17.055Z [scrapely.actor] INFO  Challenge solver source: platform.
20261023T03:04:25.085Z [scrapely.actor] INFO  Saved 10 reviews from 1 places. Solver calls 1. Datacenter bytes 0. Residential bytes 1702177.
```

The place run spent about nine seconds on the bot check before it started reading; the reviews run cleared the check once and moved 1.7 MB of residential traffic. You don't configure either.

## What it costs

Both Actors charge one event of $0.0025 per row saved, which is $2.50 per 1,000 places or 1,000 reviews. Platform usage (compute and proxy) is billed on top.

- **Places:** 10 × $0.0025 = $0.025 in result fees. The run was charged $0.0307, because it also used $0.0041 of compute, $0.0016 of datacenter proxy traffic and $0.00005 of dataset writes.
- **Reviews:** 10 × $0.0025 = $0.025 in review fees. The run was charged $0.0272, with $0.0015 of compute and $0.0007 of residential proxy traffic on top.

A 1,000-hotel price list costs $2.50 in result fees, and 1,000 reviews another $2.50, plus usage of the same small kind. The Free plan's $5 of monthly credit covers about 2,000 places or reviews in event fees. Set **Max cost per run** in the run options and a run stops cleanly when it reaches the cap.

## What to watch out for

- **City searches fill up with hotels first.** With all three types on, ten results means ten hotels. Turn hotels off for a restaurant or attraction list, or paste a `Restaurants-g…` category URL.
- **Hotel prices depend on dates.** Offers are for the stay you set; empty dates mean tomorrow, one night. Set `checkInDate` and `checkOutDate` (or relative values like `30 days`) before you compare cities.
- **Bot checks add time, not work.** Tripadvisor puts a challenge in front of its pages. Both Actors solve it with the platform's own solver; expect about half a minute for ten places.
- **Reviews need residential traffic.** Tripadvisor refuses datacenter exits for review pages, so the reviews Actor uses residential proxies by default. That's why its usage line is proxy-heavy, and it's still well under a cent for ten reviews.
- **Large review histories take minutes.** The README measures about 5 to 8 minutes for 10,000 reviews from 5 places. Use the async API or a client, and `lastReviewDate` to fetch only what's new.
- **Personal data.** Reviewer names, usernames and hometowns identify private people. Leave **Include reviewer profile** off unless you need it.

## Is it legal to scrape Tripadvisor?

Both Actors read public pages that anyone can open without an account, and they never log in. That doesn't settle every question. [Tripadvisor's Terms of Use](https://tripadvisor.mediaroom.com/us-terms-of-use) (effective July 15, 2025) say users may not use "any robot, spider, scraper or other automated means" to access or copy content without its express written permission, and how those terms bind you depends on where you are and what you do with the data.

Privacy law matters most for reviews. A reviewer's name, profile and hometown are personal data under the GDPR and the CCPA, and review text can name staff or other guests. Collect only the fields you need, keep them secure, and have a lawful basis for processing them. Review text is also the reviewer's writing, so analyze and summarize it rather than republishing it wholesale. This is not legal advice: if Tripadvisor data feeds a product or a public site, ask a lawyer about your case.

## Why Scrape.ly for Tripadvisor data

- **The official API is on its way out.** Tripadvisor's [Content API documentation](https://tripadvisor-content-api.readme.io/reference/overview) now opens with "This API is deprecated" and points developers to a new platform. Its reviews endpoint "returns up to 5 of the most recent reviews for a specific location." The Actor reads every review a place shows.
- **No bot check to fight.** A hand-written scraper has to get past Tripadvisor's challenge page before it can read a single rating. Here the solver and the proxy are built in, as the logs show, and you read `rating` and `rankingString` fields instead of CSS selectors.
- **Places and reviews in one pipeline.** Find hotels by city, then pass their `webUrl` values straight into the reviews Actor, as in the Python example. Same token, same client, same dataset format.
- **Built for monitoring.** Schedule a weekly run with `lastReviewDate: "7 days"`, send new low-star reviews to Slack or Google Sheets with [automations](https://scrape.ly/docs/automations.md), or hand the job to an AI agent over MCP.

## FAQ

### Can you scrape Tripadvisor for free?

The Scrape.ly Free plan includes $5 of usage credit every month with no credit card, enough for about 2,000 places or reviews in event fees at $2.50 per 1,000. Our two 10-row runs cost $0.0307 and $0.0272.

### How do I scrape Tripadvisor reviews with Python?

Install `scrapely-client-python`, call `roamandroof/tripadvisor-reviews-scraper` with one or more place URLs, and iterate over the dataset, as in the example above. The client waits for the run, including the bot check.

### Can I get Tripadvisor restaurants instead of hotels?

Yes. Set `includeHotels` and `includeAttractions` to `false`, or paste a `Restaurants-g…` category URL. Restaurant rows include cuisines, meal types, diets, opening hours and features.

### Does Tripadvisor have an API?

Tripadvisor's legacy Content API is marked deprecated in its own documentation, and its reviews endpoint returns at most five recent reviews per location. For complete review histories and city-wide place lists, scrape the public pages with the Actors above.

### How do I get only new Tripadvisor reviews?

Set `lastReviewDate` to a date or a relative value such as `7 days`. Newest reviews are read first and the run stops at the first older one, so a quiet week costs almost nothing. Schedule the run to repeat.

### Can I compare Tripadvisor with Airbnb or Google Maps?

Yes. Run the same city through our guides on [Airbnb scraping](https://scrape.ly/blog/scrape-airbnb.md) for short-term rentals and [how to scrape Google Maps](https://scrape.ly/blog/how-to-scrape-google-maps.md) for every local business, then join the rows on name and address.

Scrape.ly Store Scrape Tripadvisor reviews Paste a hotel, restaurant or attraction URL and get every review with stars, trip type, sub-ratings and the owner's reply. $2.50 per 1,000 reviews.

[Try it free](https://scrape.ly/store/roamandroof/tripadvisor-reviews-scraper.md) [Browse the Store](https://scrape.ly/store.md)

About the author

[Roam & Roof](https://scrape.ly/blog/author/roamandroof.md) Actor publisher on the Scrape.ly Store

Homes, stays, trips and cars: listings from 40+ property portals, the big travel and booking sites and the main car marketplaces. For agents, investors, travel analysts and dealers. A Scrapely studio.

- [Website](https://scrape.ly/users/roamandroof.md)

Keep reading

## More in Tutorials

- [![Pixel-art robot with an orange >\_ on its terminal head lifts an AI overview card marked with an orange sparkle off a search page headed by the Google G logo, where an AI answer panel sits above the results, and drops it into a crate](https://scrape.ly/media/scrape-google-ai-overviews.png?w=750)](https://scrape.ly/blog/scrape-google-ai-overviews.md)
  ### [How to Scrape Google AI Overviews and AI Mode Answers](https://scrape.ly/blog/scrape-google-ai-overviews.md)
  [Check which keywords trigger a Google AI Overview and get the answer text with every cited source, by country and language. Add AI Mode answers with brand and domain tracking. Real runs, real costs, and code for curl, Python, Node.js and AI agents.](https://scrape.ly/blog/scrape-google-ai-overviews.md)
- [![Pixel-art robot with an orange >\_ on its terminal head takes a classified ad slip with a purple title off a cork board topped with the purple Craigslist peace-sign logo and drops it into a crate](https://scrape.ly/media/scrape-craigslist.png?w=750)](https://scrape.ly/blog/scrape-craigslist.md)
  ### [How to Scrape Craigslist Listings: Prices, Locations and Full Ads](https://scrape.ly/blog/scrape-craigslist.md)
  [Scrape Craigslist by search URL or by city and category and get every ad as a row: title, price, neighborhood, category, posting date, attributes and the full description. A real run on New York bike ads, its cost, code for curl, Python and Node.js, and how to use the data responsibly.](https://scrape.ly/blog/scrape-craigslist.md)
- [![Pixel-art robot with an orange >\_ on its terminal head pulls an ad card with an image and a blue button out of a monitor showing the blue Facebook logo above two more ad cards, and drops it into a crate](https://scrape.ly/media/scrape-facebook-ads-library.png?w=750)](https://scrape.ly/blog/scrape-facebook-ads-library.md)
  ### [How to Scrape the Facebook Ads Library (Meta Ad Library)](https://scrape.ly/blog/scrape-facebook-ads-library.md)
  [Scrape the Facebook Ads Library for any brand, page or keyword: ad copy, creatives, call to action, landing page, start date, platforms and the Ad Library link. A real run on Nike's active US ads, its exact cost, and code for curl, Python, Node.js and AI agents.](https://scrape.ly/blog/scrape-facebook-ads-library.md)

## The internet is full of data. Start owning yours.

Scrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes. The advantage lasts forever.

[Get Started Free](https://my.scrape.ly/register) [Chat with Support](mailto:support@scrape.ly?subject=Question%20about%20Scrape.ly\&body=Hi%2C%20I%20have%20a%20question%20about%20Scrape.ly.)

No credit card. No setup calls.
