Type a hotel, restaurant or attraction and Web Unlocker returns its Tripadvisor page: rating, rank, scores and reviews with owner replies, 10 a page, billed as one page. A failed page costs nothing.
1,000 free requests · Pay only on success · 195+ countries · Claude ready
A Tripadvisor page takes 5 to 30 seconds. It is still working, no need to click again.
Ready for your own places? Get an API key or book a demo.
Tell us a little about your team and get:
A Tripadvisor hotel page carries 10 reviews and a restaurant page 15, with the ratings and the owner's replies, and Web Unlocker bills it as one page. A Tripadvisor review scraper on Apify or Bright Data bills every review.
A hard page costs
the same as an easy one.
A page that fails to load costs nothing. The 9,260 English reviews of The Godfrey Hotel in Boston are 926 pages: $0.91.
What 10,000 Tripadvisor reviews cost
1,000 hotel pages of 10 reviews, at published prices
Web Unlocker on the Growth plan, $0.98 per 1,000 pages. The others bill each review: Bright Data at pay as you go, the most used Apify actor on Apify's $19 plan, Outscraper after its 500 free reviews.
Ready to run it on your own hotels? Get your API key and free requests.
Our Tripadvisor scraping test: one hundred pages, one request each, no retries: hotels from Boston to Tokyo, review pages deep into a hotel's history, restaurants, attractions and city lists. This is what comes back, and how fast.
A page that does not come back costs $0.
You pay for pages, not for tries.
Tripadvisor shows every review to every visitor, 10 to a hotel page and 15 to a restaurant page, and each page links to the next. Your Tripadvisor scraper follows that link to the last page: The Godfrey Hotel in Boston is 926 pages back to its first review in January 2016.
Tripadvisor's own API serves a pool of reviews set by contract.
The page shows every review.
Tripadvisor web scraping takes one request per page: send the Tripadvisor address of a hotel, restaurant or attraction, get the page back, read the rating, the rank and the reviews. Each page links to the next one, so every review is one loop away.
Fill in the form above. The key arrives by email within one business day.
Its Tripadvisor page, as it opens in your browser, and the country to open it from.
The page carries the rating, the rank and 10 to 15 reviews, each with its rating, text, date and the owner's reply.
pip install requestsGOLOGIN_SCRAPING_API_KEY=your_key python tripadvisor_reviews.pyhttps://parsing.webunlocker.gologin.com/v1/scrapeimport json
import os
import re
import time
from html import unescape
import requests
address = "https://www.tripadvisor.com/Hotel_Review-g60745-d8316858-Reviews-The_Godfrey_Hotel_Boston-Boston_Massachusetts.html"
def scrape(url):
for attempt in range(3):
response = requests.get(
"https://parsing.webunlocker.gologin.com/v1/scrape",
headers={"apikey": os.environ["GOLOGIN_SCRAPING_API_KEY"]},
params={
"url": url if attempt == 0 else f"{url}?_r={int(time.time())}",
"geo": "us",
"format": "json",
},
timeout=120,
)
html = response.json().get("data", {}).get("html", "")
if "ShowUserReviews-" in html:
return html
return html
def text(markup):
return unescape(re.sub(r"\s+", " ", re.sub(r"<[^>]+>", " ", markup.replace("<!-- -->", "")))).strip()
def first(pattern, source):
match = re.search(pattern, source)
return text(match.group(1)) if match else None
html = scrape(address)
place = {}
for block in re.findall(r'<script[^>]*application/ld\+json[^>]*>(.*?)</script>', html, re.S):
data = json.loads(block)
if "aggregateRating" in data:
place = data
break
cards = re.split(r'data-test-target="HR_CC_CARD"|data-automation="reviewCard"', html)[1:]
reviews = []
for card in cards:
title = first(r'<a[^>]+ShowUserReviews[^>]+>(.*?)</a>', card)
if not title:
continue
body = card.split("</h3>", 1)[1]
body = body[body.find('data-test-target="review-body"'):] if 'data-test-target="review-body"' in body else body
reviews.append({
"author": first(r'href="/Profile/[^"]+"[^>]*>(?:<span[^>]*>)?([^<]+)<', card),
"rating": first(r"<title[^>]*>([\d.]+) of 5 bubbles</title>", card),
"title": title,
"text": text(re.split(r"<button|Date of stay:|<div[^>]*>Written ", body)[0]),
"date_of_stay": first(r"Date of stay:(?:<[^>]+>)+([^<]+)<", card),
"owner_reply": "Response from " in card,
})
next_page = re.search(r'aria-label="Next page" href="([^"]+)"', html)
print(json.dumps({
"name": place.get("name"),
"rating": place.get("aggregateRating", {}).get("ratingValue"),
"reviews_total": place.get("aggregateRating", {}).get("reviewCount"),
"ranking": first(r"(#[\d,]+ of [\d,]+ [^<\"]+?)(?= and rated|\"|<)", html),
"reviews": reviews,
"next_page": f"https://www.tripadvisor.com{unescape(next_page.group(1))}" if next_page else None,
}, indent=2, ensure_ascii=False))GOLOGIN_SCRAPING_API_KEY=your_key node every-review.mjshttps://parsing.webunlocker.gologin.com/v1/scrapeimport { writeFileSync } from 'node:fs';
let address = 'https://www.tripadvisor.com/Restaurant_Review-g60763-d33984348-Reviews-Olio_e_Piu-New_York_City_New_York.html';
const scrape = async (url) => {
for (let attempt = 0; attempt < 3; attempt += 1) {
const params = new URLSearchParams({ url: attempt ? `${url}?_r=${Date.now()}` : url, geo: 'us', format: 'json' });
const response = await fetch(`https://parsing.webunlocker.gologin.com/v1/scrape?${params}`, {
headers: { apikey: process.env.GOLOGIN_SCRAPING_API_KEY },
});
const html = (await response.json()).data?.html ?? '';
if (html.includes('ShowUserReviews-')) return html;
}
return '';
};
const text = (markup) =>
markup
.replace(/<[^>]+>/g, ' ')
.replace(/&/g, '&')
.replace(/'|'/g, "'")
.replace(/"/g, '"')
.replace(/\s+/g, ' ')
.trim();
const reviews = new Map();
let pages = 0;
while (address) {
const html = await scrape(address);
pages += 1;
for (const card of html.split(/data-test-target="HR_CC_CARD"|data-automation="reviewCard"/).slice(1)) {
const id = card.match(/ShowUserReviews-g\d+-d\d+-r(\d+)/)?.[1];
if (!id) continue;
const at = card.indexOf('data-test-target="review-body"');
const body = at >= 0 ? card.slice(at) : card.slice(card.indexOf('</h3>'));
reviews.set(id, {
id,
rating: card.match(/<title[^>]*>([\d.]+) of 5 bubbles<\/title>/)?.[1],
title: text(card.match(/<a[^>]+ShowUserReviews[^>]+>([\s\S]*?)<\/a>/)?.[1] ?? ''),
written: card.match(/Written (?:<!-- -->)?([^<]+)</)?.[1] ?? '',
text: text(body.slice(body.indexOf('>') + 1).split(/<button|Date of stay:|<div[^>]*>Written /)[0]),
});
}
const next = html.match(/aria-label="Next page" href="([^"]+)"/)?.[1];
address = next ? `https://www.tripadvisor.com${next.replace(/&/g, '&')}` : null;
}
const csv = (value) => `"${String(value).replace(/"/g, '""')}"`;
const rows = [...reviews.values()].map((r) => [r.id, r.rating, r.written, r.title, r.text].map(csv).join(','));
writeFileSync('reviews.csv', ['id,rating,written,title,text', ...rows].join('\n'));
console.log(`${reviews.size} reviews from ${pages} pages saved to reviews.csv`);GOLOGIN_SCRAPING_API_KEY=your_key node city-hotels.mjshttps://parsing.webunlocker.gologin.com/v1/scrapeconst address = 'https://www.tripadvisor.com/Hotels-g60745-Boston_Massachusetts-Hotels.html';
const params = new URLSearchParams({ url: address, geo: 'us', format: 'json' });
const response = await fetch(`https://parsing.webunlocker.gologin.com/v1/scrape?${params}`, {
headers: { apikey: process.env.GOLOGIN_SCRAPING_API_KEY },
});
const html = (await response.json()).data?.html ?? '';
const hotels = [];
for (const [, json] of html.matchAll(/<script[^>]*application\/ld\+json[^>]*>([\s\S]*?)<\/script>/g)) {
const data = JSON.parse(json);
if (data['@type'] !== 'ItemList') continue;
for (const { item } of data.itemListElement) {
hotels.push({
name: item.name,
rating: item.aggregateRating?.ratingValue,
reviews: item.aggregateRating?.reviewCount,
phone: item.telephone,
address: item.address?.streetAddress,
page: item.url.replace(/\?.*$/, '').replace('/HotelHighlight-', '/Hotel_Review-'),
});
}
}
console.table(hotels.map(({ name, rating, reviews, phone }) => ({ name, rating, reviews, phone })));
console.log(`${hotels.length} hotels, each with its page for the reviews`);Need Google's side of the same places? The Google reviews scraper returns a place's Google rating, star split and top reviews the same way.
The official API that replaced the Content API on August 31, 2026, the most used review scraper on Apify, Outscraper and Web Unlocker: what each bills to scrape Tripadvisor data and what it lets you keep.
| What it takes | Tripadvisor API | Apify | Outscraper | |
|---|---|---|---|---|
| You pay for | A page | Each place, each call | Each review | Each review |
| 1,000 places with their first reviews | $0.98 | $15 | $19 | $38 |
| Every review of a place | Yes, page by page | A pool set by contract | Yes | Yes |
| Store what you collect | Yes | Location IDs only | Yes | Yes |
| Free to start | 1,000 pages | 1,000 calls, once | $5 a month | 500 reviews |
| Same price on any other site | Yes | No | No | No |
| The whole page in HTML or Markdown | Yes | No | No | No |
Need the places first? A Tripadvisor city list carries 30 hotels or restaurants a page, and the City hotels tab above reads it. Web Unlocker returns any other site the same way.
One account, one proxy network, one ecosystem. Pick the product the job needs.
Scraping reviews elsewhere too? See the Google reviews and Google Maps scrapers, or every web scraping tool.
Send the place's Tripadvisor address to Web Unlocker. It opens the page in a real browser and returns it with the rating, the rank in its city, the rating split and the reviews: 10 on a hotel page, 15 on a restaurant page, each with the author, the rating, the title, the text, the date and the owner's reply. Each page links to the next one, and the code above follows that link to the last page.
Send the page address to Web Unlocker with the requests library and read the fields from the page. The Python tab above is a complete script, tested on the live API.
Tripadvisor closed its Content API on August 31, 2026, and its keys stopped working. The replacement, Tripadvisor Terra, sells a self-serve package with a limited number of reviews, drawn from a pool your contract sets, and its terms let you store nothing but location IDs. Web Unlocker returns the public page itself, with every review page after page.
Tripadvisor Terra gives the first 1,000 billable calls free once per account, then bills $0.015 per place on every call, less at higher volume. Web Unlocker bills $0.98 per 1,000 pages, and a hotel page carries 10 reviews.
Only to start: Tripadvisor Terra gives each account its first 1,000 billable calls once, and every call after that is paid. The old Content API, with its monthly free calls, closed on August 31, 2026. Web Unlocker comes with 1,000 free requests, which is 10,000 hotel reviews.
Keys for the old Content API stopped working on August 31, 2026; new ones come with a Tripadvisor Terra package. A Web Unlocker key comes from the form above within one business day, with free requests to test on your own places.
Yes, and a Tripadvisor review scraper needs no sign-in for it: Tripadvisor lists every review to every visitor, page by page. The Godfrey Hotel in Boston shows its 9,260 English reviews on 926 pages, and the last one goes back to January 2016. All of them come to $0.91.
10 on a hotel or attraction page and 15 on a restaurant page, plus the place's rating, review count, rank in its city, rating split and scores for each part of the stay.
Yes, whenever the place has replied: who replied, the date and the full text. On the second page of The Godfrey Hotel's reviews, all 10 had a reply.
Yes. A city list page carries 30 places with their rating, review count, price level, phone, address and map position, and each place is one more page for its reviews. The City hotels tab above lists 30 Boston hotels from one page.
Tripadvisor.com lists the English reviews. Each country site lists the reviews in its own language: on tripadvisor.fr, The Godfrey Hotel shows 2,061 of them. Web Unlocker returns those pages the same way, from 195+ countries.
The Every review tab above writes reviews.csv: one row per review with its rating, date, title and text. Or hand the page to Claude with the Gologin scraping skill and ask for a CSV.
Under $1 per 1,000 pages, and the same price for every page: 10,000 hotel reviews come to $0.98. A page that fails to load costs nothing. Plans start at $49 a month for 50,000 requests.
Yes, to start: Web Unlocker comes with 1,000 free requests, enough for 10,000 hotel reviews.
No. Web Unlocker picks the IP for you, in 195+ countries, and opens the page from the country you choose.
It depends on what you need. Apify, Bright Data and Outscraper sell ready rows and bill every review. Web Unlocker is a Tripadvisor scraper that returns the whole page at one price per page, with the rank, the rating split and the owner's replies, and you parse it your way.
Scrapers that call the site's internal data feeds need a fix each time Tripadvisor changes one: the most used Tripadvisor actor on Apify logged three such fixes in October 2026. Web Unlocker returns the page a visitor sees.
A Tripadvisor page is public and loads without a login. Web Unlocker loads it the way a visitor's browser does and returns the page. What you collect and how you use it is your call, so check it against the rules that apply to your project.
Tell us a little about your team and get: