Tripadvisor Hotel Scraper — Hotels, Reviews · Travel Data API
Pricing
from $2.00 / 1,000 hotel extracteds
Tripadvisor Hotel Scraper — Hotels, Reviews · Travel Data API
Scrape Tripadvisor hotel listings with price, rating, ranking and optional reviews. Five search modes (geoId, location text, lat/lng, bounding box, URL/ID). Hospitality KPIs (avg rating, price/rank distribution) + HTML report.
Pricing
from $2.00 / 1,000 hotel extracteds
Rating
0.0
(0)
Developer
SIÁN OÜ
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
6 days ago
Last modified
Categories
Share
Tripadvisor Hotel Scraper — Hotels, Reviews & Travel Data API 🏨
🎉 NEW: Bundle hotels + up to 20 reviews per hotel in a single run — no two-actor pipeline
Built for hospitality analysts, travel researchers, OTA teams, and reputation managers who need clean Tripadvisor data fast.
📋 Overview
Tripadvisor data without the two-actor dance. Pull hotels, reviews, ratings, ranking, price, and accommodation type from anywhere on Tripadvisor — by city, coordinates, bounding box, hotel ID, or URL — in one structured run.
Why hospitality teams choose us:
- ✅ 5 search modes — geoId, free-text location, lat/lng radius, bounding box, single hotel by ID, single hotel by URL
- ⚡ Direct-API wrapper — sub-2-second/hotel, no Cloudflare/captcha brittleness like browser-scrapers
- 🎯 Bundled reviews enrichment — opt-in
fetchReviewspulls up to 20 reviews per hotel in the same run, no manual locationId hand-off - 💰 Mid-market tiered pricing — $0.008 FREE → $0.00125 DIAMOND per hotel, matching the proven voyager/booking-scraper curve
- 💎 Hospitality KPIs out of the box — avg rating, price distribution, rank distribution, accommodation-type and style-tag tallies in a default HTML report
- ✨ NEW: Stay-spec parameters (checkIn / checkOut / adults / rooms / currency) for live price quotes in any currency
✨ Features
- 🧭 5 Search Modes — by Tripadvisor geo ID, free-text location, lat/lng + radius, bounding box, single hotel ID, or hotel URL
- ⭐ Rating + Ranking Capture — Tripadvisor rating, review count, and exact rank position ("#1 of 1,881 hotels in Paris")
- 💰 Live Price Quotes — minimum nightly price in any ISO currency for given checkIn/checkOut dates
- 📝 Reviews Enrichment — up to 20 reviews per hotel with rating, trip type, visit date, and reviewer attribution
- 🏨 Accommodation Typing — hotel category + style tags (Modern, Mid-range, Business, Boutique, Luxury, etc.)
- 📍 Full Address & Coordinates — street, city, country, postal code, lat/lng
- 📊 HTML Hospitality Report — auto-generated per run with median price, rating distribution, rank distribution, top cities, top accommodation types
- 🔁 Built-in Deduplication — hotels deduped across overlapping queries
- 📦 Bulk Mode (PAID) — multiple hotel IDs or URLs in a single run
🎬 Quick Start
Run via Apify Console, the Apify API, or any HTTP client. Provide a searchMode plus the matching field (geoId, location, lat/lng, boundingBox, locationId, or url) and get clean structured rows in your dataset.
curl -X POST 'https://api.apify.com/v2/acts/sian.agency~tripadvisor-hotel-scraper/runs?token=YOUR_TOKEN' \-H 'Content-Type: application/json' \-d '{"searchMode": "bylocation", "location": "Paris", "maxResults": 30}'
🚀 Getting Started (3 Simple Steps)
Step 1: Pick your search mode
Choose how you want to find hotels — by city name (bylocation), Tripadvisor numeric geo (bygeoid), coordinates + radius (bycoordinates), bounding box (byboundingbox), or a single hotel ID/URL (byid / byurl).
Step 2: (Optional) Specify your stay
Add checkIn, checkOut, adults, rooms, and currency to pull live nightly price quotes. Skip these to get the default Tripadvisor price snapshot.
Step 3: (Optional) Enable reviews enrichment (PAID)
Set fetchReviews: true to pull up to 20 reviews per hotel in the same run — no manual locationId pipeline needed.
That's it! In under a minute, you'll have:
- Clean structured hotel rows in JSON / CSV / Excel
- An HTML hospitality report saved to the key-value store
- (Optional) per-hotel review rows ready for sentiment analysis
📥 Input Configuration
| Field | Type | Required | Description |
|---|---|---|---|
searchMode | string | Yes | bygeoid · bylocation · bycoordinates · byboundingbox · byid · byurl |
location | string | conditional | Free-text city/region for bylocation mode |
geoId | integer | conditional | Tripadvisor numeric geo ID (e.g. 187147 = Paris) |
latitude / longitude | number | conditional | Center coordinates for radial search |
radius | number | No | Search radius in km (0.1–50, default 5) |
boundingBox | string | conditional | north,east,south,west decimal degrees |
locationId | integer | conditional | Single hotel ID for byid mode |
locationIds | array | No (PAID) | Bulk hotel IDs |
url | string | conditional | Single Tripadvisor hotel URL for byurl mode |
urls | array | No (PAID) | Bulk hotel URLs |
checkIn / checkOut | string | No | Stay dates (YYYY-MM-DD) for live price quotes |
adults | integer | No | Adult guest count (1–16, default 2) |
rooms | integer | No | Room count (1–8, default 1) |
currency | string | No | ISO currency code (default USD) |
maxResults | integer | No | Hotels per query (1–300, default 30) |
fetchReviews | boolean | No (PAID) | Pull up to 20 reviews per hotel |
Example — search by city:
{"searchMode": "bylocation","location": "Paris","checkIn": "2026-06-15","checkOut": "2026-06-17","adults": 2,"currency": "USD","maxResults": 30}
Example — by coordinates with reviews enrichment (PAID):
{"searchMode": "bycoordinates","latitude": 48.8566,"longitude": 2.3522,"radius": 5,"fetchReviews": true,"maxResults": 50}
Example — single hotel by ID:
{ "searchMode": "byid", "locationId": 229968 }
📤 Output
Results are saved to the Apify dataset with 20+ fields per hotel, plus a separate row per review when enrichment is on.
| Field | Type | Description |
|---|---|---|
hotelId | integer | Tripadvisor numeric hotel ID |
name | string | Hotel display name |
rating | number | 0–5 Tripadvisor rating |
reviewCount | integer | Total reviews on Tripadvisor |
accommodationType | string | Hotel · B&B · Specialty Lodging · Inn |
styleTags | array | Modern · Mid-range · Business · Boutique · Luxury |
pricing | object | priceMin, currency |
ranking | object | label, position, total |
address | object | street, city, country, postalCode, full |
location | object | latitude, longitude |
contact | object | phone (search) · email, officialUrl (detail) |
media | object | thumbnailUrl, photos |
url | string | Full Tripadvisor URL |
parentGeo | string | Parent city name |
Example hotel row:
{"hotelId": 229968,"name": "Hôtel Astra Opéra - Astotel","rating": 5,"reviewCount": 882,"accommodationType": "Hotel","styleTags": ["Modern", "Mid-range", "Business"],"pricing": { "priceMin": 268, "currency": "USD" },"ranking": { "label": "#1 of 1,881 hotels in Paris", "position": 1, "total": 2422 },"address": { "city": "Paris", "country": "France", "full": "29 Rue Caumartin, 75009 Paris" },"location": { "latitude": 48.87178, "longitude": 2.328087 },"contact": { "phone": "+33 1 42 65 15 15" },"url": "https://www.tripadvisor.com/Hotel_Review-g187147-d229968-Reviews-Hotel_Astra_Opera_Astotel-Paris.html","scrapedAt": "2026-05-19T22:40:00.000Z"}
Example review row (with fetchReviews: true):
{"reviewId": 1060326551,"hotelId": 229968,"reviewTitle": "A real find!","text": "A small hotel in central Paris, the staff were exceptional…","rating": 5.0,"publishedDate": "3 days ago","dateVisited": "May 2026","tripType": "Family","author": "Ann H","authorContributions": "44 contributions"}
💼 Use Cases & Examples
1. Hospitality intelligence
Hospitality analysts tracking competitor inventory across cities.
Input: searchMode: "bylocation", location: "Paris", maxResults: 100
Output: 100 hotels with rating, rank position, price, style tags, accommodation type.
Use: Build a daily competitor dashboard. Track how a competitor's ranking moves over time.
2. Reputation analysis
Reputation managers monitoring guest sentiment.
Input: searchMode: "byid", locationId: 229968, fetchReviews: true
Output: Hotel detail + 20 latest reviews with rating, trip type, visit month, reviewer.
Use: Pipe review text into your sentiment-analysis stack. Track rating drift week-over-week.
3. OTA market benchmarking
OTA pricing teams comparing inventory across destinations.
Input: searchMode: "bygeoid", multiple runs across top-50 city geoIds with same checkIn/checkOut.
Output: Per-city hotel inventory with live price quotes in your currency.
Use: Find under-priced hotels by city. Set automated alerts on rank-position changes.
4. Travel research
Academic and consulting teams building hotel comparables.
Input: searchMode: "bycoordinates", latitude/longitude/radius.
Output: All hotels within X km of a point, with rating, price, rank.
Use: Build geographic comparables for hotel-market academic studies or M&A advisory work.
5. Acquisition due diligence
Hospitality M&A teams snapshotting acquisition targets.
Input: searchMode: "byurl", full Tripadvisor URL of the target hotel + fetchReviews: true.
Output: Hotel detail (locationId, address, photos, official URL, ranking) + 20 latest reviews.
Use: Generate a one-page Tripadvisor footprint per target during diligence calls.
6. Vacation rental research
Vacation-rental platforms benchmarking adjacent supply.
Input: searchMode: "byboundingbox", bounding box around a target neighborhood.
Output: All Tripadvisor-listed accommodations in the bbox with style tags + price.
Use: Quantify hotel competition for short-term rentals in a specific catchment.
7. Hospitality benchmarking dashboards
BI/analytics teams building hospitality dashboards.
Input: Scheduled run per city with maxResults: 200.
Output: Time-series hotel inventory with price, rating, rank position.
Use: Power a Looker / Power BI / Metabase board with daily Tripadvisor snapshots.
🔗 Integration Examples
JavaScript/Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_TOKEN' });const run = await client.actor('sian.agency/tripadvisor-hotel-scraper').call({searchMode: 'bylocation',location: 'Paris',maxResults: 30});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items[0]);
Python
from apify_client import ApifyClientclient = ApifyClient('YOUR_TOKEN')run = client.actor('sian.agency/tripadvisor-hotel-scraper').call(run_input={'searchMode': 'bylocation', 'location': 'Paris', 'maxResults': 30})for item in client.dataset(run['defaultDatasetId']).iterate_items():print(item)
cURL
curl -X POST 'https://api.apify.com/v2/acts/sian.agency~tripadvisor-hotel-scraper/runs?token=YOUR_TOKEN' \-H 'Content-Type: application/json' \-d '{"searchMode": "bylocation", "location": "Paris", "maxResults": 30}'
Automation Workflows (N8N / Zapier / Make)
- Trigger: Schedule (e.g. daily 9 AM)
- HTTP Request: Call the actor API per city
- Process: Aggregate hotel rows, diff against prior run for rank-position changes
- Action: Slack alert when a hotel rank moves > 5 positions, or push to BI warehouse
📊 Performance & Pricing
FREE Tier (Try It Now)
- 25 hotels per run — full feature access, same quality
- All 5 search modes available
- No credit card required
- Perfect for evaluation and small projects
PAID Tier (Production Ready)
- Unlimited hotels per run
- Bulk locationIds / URLs supported
- Reviews enrichment available (up to 20 reviews per hotel)
- Pay-per-result tiered pricing: only charged for successful rows
💰 Mid-market tiered curve — $0.008 FREE → $0.0029 BRONZE → $0.0025 SILVER → $0.002 GOLD → $0.0015 PLATINUM → $0.00125 DIAMOND per hotel. Reviews charged separately, capped at 20 per hotel by upstream.
❓ Frequently Asked Questions
Q: How many hotels can I process in one run? A: FREE tier: 25 hotels per run. PAID tier: unlimited, with bulk input arrays.
Q: How many reviews per hotel can I get? A: Tripadvisor's upstream caps at 20 reviews per hotel — there is no pagination available, so the maximum is a hard 20 regardless of how many reviews the hotel actually has.
Q: What output formats are available? A: JSON, CSV, Excel, XML, and HTML — export directly from the Apify dataset.
Q: Can I get hotels for a specific check-in/check-out date?
A: Yes — pass checkIn, checkOut, adults, rooms, and currency and the priceMin field reflects the live nightly quote for those dates in that currency.
Q: What's the difference between "search" modes and "detail" modes?
A: Search modes (bygeoid, bylocation, bycoordinates, byboundingbox) return many hotels with price/rating/ranking. Detail modes (byid, byurl) return a single hotel with email, photos, and parent geo — no live pricing or ranking (those only exist in search results).
Q: Does it work for hotels outside the US/Europe?
A: Yes — Tripadvisor's global coverage is supported. Use bylocation with any city name worldwide, or pass any country's lat/lng.
Q: How accurate is the data? A: Data is pulled from Tripadvisor's structured backend — same source as the public site. Rating, review count, ranking, and address are exact mirrors.
Q: Is this legal? A: Yes — we only extract publicly available data shown on Tripadvisor's website. See the legal section below.
🐛 Troubleshooting
"Could not resolve {location} to a Tripadvisor geo"
- The free-text
locationwas too vague or misspelled. Try a more specific term (e.g. "Paris, France" instead of "Paris"). - Alternatively use
searchMode: "bygeoid"with a numeric geoId from a known Tripadvisor URL (the value after-gin the URL).
"Invalid Tripadvisor URL"
- The URL must start with
https://www.tripadvisor.com/Hotel_Review-g…-d…(or a regional Tripadvisor domain like.co.uk,.fr).
Empty results from search
- Verify the geoId / coordinates / bounding box are valid. Some very remote areas have no hotel inventory on Tripadvisor.
- Check
checkIn/checkOutif provided — invalid date ranges return empty results.
Reviews enrichment returns fewer than 20 reviews
- Some hotels have fewer than 20 reviews total. That's expected — you get all available reviews, capped at 20.
⚖️ Is it legal to scrape data?
Our actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.
However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.
You can also read Apify's blog post on the legality of web scraping.
⚠️ Trademark Disclaimer
This actor is an independent third-party tool developed by SIÁN Agency. It is not affiliated with, endorsed by, or sponsored by Tripadvisor, LLC. "Tripadvisor" is a registered trademark of Tripadvisor, LLC, used here for descriptive purposes only (nominative fair use) to identify the public data source this tool operates on. All trademarks remain the property of their respective owners.
This tool extracts only publicly accessible information from Tripadvisor and is intended for lawful research, analytics, and business-intelligence purposes by Apify users.
🤝 Support
Join our active support community
- For issues or questions, open an issue in the actor's repository
- Check SIÁN Agency Store for more automation tools
- 📧 apify@sian-agency.online
Built by SIÁN Agency | More Tools