TripAdvisor Scraper API — Hotels, Restaurants & Reviews
Pricing
from $2.20 / 1,000 results
TripAdvisor Scraper API — Hotels, Restaurants & Reviews
TripAdvisor scraper and unofficial TripAdvisor API: extract hotels, restaurants and full review threads with prices, ratings, GPS, amenities, cuisines, hours, awards and photos. Input by URL, keyword or city name, 38 languages. Export JSON, CSV, Excel. From $2.20/1k places, $0.25/1k reviews.
Pricing
from $2.20 / 1,000 results
Rating
0.0
(0)
Developer
Raven
Maintained by CommunityActor stats
0
Bookmarked
33
Total users
5
Monthly active users
5 days ago
Last modified
Categories
Share
TripAdvisor Scraper — Hotels, Restaurants & Reviews 🧳
Scrape TripAdvisor reviews from $0.25 per 1,000 and full place records from $2.20 per 1,000 (paid Apify plans). This unofficial TripAdvisor API extracts hotels and restaurants with prices, rankings, GPS coordinates, amenities, cuisines, opening hours, awards, photos and complete review threads — and exports everything to JSON, CSV or Excel.
No login, no TripAdvisor API key, no proxies to configure and no code. Paste a TripAdvisor URL, type a keyword, or just name a city — the actor finds the places, extracts the data and embeds each place's reviews inside its record. You pay only for what lands in the dataset.
🧭 What does this TripAdvisor Scraper do?
TripAdvisor's official content API is restricted to approved partners. This actor works as an unofficial TripAdvisor API alternative: it collects the same public data — places, ratings, prices, reviews — with nothing to apply for. One actor covers what usually takes two:
| What you get | How |
|---|---|
| 🏨 Hotels | Price range & headline prices, deals count, booking provider, amenities, awards, phone |
| 🍽️ Restaurants | Cuisines, establishment types, price level, opening hours, open-now status, awards |
| 💬 Reviews | Full review threads embedded inside each place record — ratings, per-category sub-ratings, trip type, traveler photos, reviewer profile and owner responses |
Two input fields, no mode to pick — fill either one, or both, and everything you filled in gets scraped:
| Input | Give it | Best for |
|---|---|---|
| 🔍 Search | A city or region ("Antalya", "Paris"), a numeric geo ID, or an exact place name. Phrases like "hotels in Rome" work too | Scraping a whole destination, or one place by name |
| 🔗 Start URLs | Any TripAdvisor place page or city listing page | Known targets, bulk lists of URLs |
✨ Why use this TripAdvisor scraper?
- ✅ Hotels, restaurants and reviews in one actor — no juggling separate scrapers per category.
- ✅ Type a city, get the data —
"Paris","New York City","Dubai"resolve to the right TripAdvisor destination automatically; no geo IDs to look up. - ✅ Reviews embedded inline — each place record carries a
reviews: [...]array, so one dataset row = one place with everything about it. - ✅ City listing crawler — paginates hotel and restaurant listings to discover every POI in a destination (up to 5,000 per listing).
- ✅ 38 languages & regional variants — pick a
localeand descriptions, reviews and amenities come back in that language. - ✅ Rich place records — prices and deals, GPS coordinates, amenities, cuisines, opening hours, Travelers' Choice awards, rankings, up to 30 photos per place.
- ✅ Business emails, straight from TripAdvisor — hotels with a Business Advantage listing come back with an
emailsarray (≈65% of hotels), pulled directly from TripAdvisor — no external website visit — ready-made B2B lead-gen. - ✅ Hard budget cap —
Maximum cost per run(default $20) stops the run cleanly the moment your budget is hit. No surprise bills. - ✅ Zero setup, all-in price — reliability, retries and delivery are handled for you and fully included in the per-result price.
How does it compare?
| Official TripAdvisor Content API | Typical single-purpose scrapers | This actor | |
|---|---|---|---|
| Access | Partner approval + API key | None | None |
| Hotels + restaurants | Depends on partnership | Usually one category per actor | ✔️ All in one |
| Reviews | Limited | Often a separate actor | ✔️ Embedded in each place |
| Input by city name | — | Often URL or geo ID only | ✔️ Plain city names |
| Localized output | — | Often English only | ✔️ 38 languages/regions |
| Budget control | — | Rare | ✔️ Hard cost cap per run |
| Pricing | Partnership terms | Per result | Per result, from $0.25/1,000 reviews |
📦 What data can you extract from TripAdvisor?
Every dataset row is a single place record (hotel or restaurant). When Include reviews is on, reviews come embedded inside that record as an array.
🏨 Hotel record
| Field | Description |
|---|---|
__type | "hotel" |
locationId | TripAdvisor numeric POI id |
parentGeoId | Numeric city id |
url | Canonical TripAdvisor URL |
name | Hotel name |
description | "About this hotel" text |
accommodationType | Property type, e.g. "Hotel" |
priceRange | TripAdvisor price band ($$) |
priceRangeMin, priceRangeMax | Low / high end of the nightly price band in USD, e.g. 187 – 473 |
priceFrom | Lowest deal price across booking partners |
finalPrice | Headline price shown in the booking module |
dealsCount | How many booking partners have a deal |
bookingProvider | Provider of the cheapest deal, e.g. all.accor.com |
specialOffer | Promo teaser when present, e.g. "BOOK DIRECT & SAVE 15%" |
offers | Per-partner booking offers — each {provider, displayPrice, basePrice, currency, isSupplierDirect, freeCancellationDate, roomsRemaining} |
awards | Travelers' Choice / Best of the Best / etc. |
phone | Contact phone number |
emails | Business contact email(s) TripAdvisor exposes directly for hotels with a Business Advantage listing (≈65% of hotels), e.g. ["hotel.astra@astotel.com"] — straight from TripAdvisor, no external website visit |
rating, reviewCount, ranking, rankingPosition | Aggregate rating, total reviews, "#3 of 1,882 hotels" and the numeric rank (e.g. 13) |
address, neighborhood, city, postalCode, country, countryCode, region | Full address, district (e.g. "8th Arr. - Élysée") and ISO-3166 alpha-2 country code (e.g. "FR") |
latitude, longitude | GPS coordinates |
amenities | Flat list of highlighted amenities (e.g. ["Pool", "Spa", "Restaurant"]) |
images | Main photo URL (single-item list with the primary thumbnail) |
totalReviews | Total reviews available in the review feed |
scrapedAt | ISO 8601 timestamp of when the record was scraped |
🍽️ Restaurant record
| Field | Description |
|---|---|
__type | "restaurant" |
locationId, parentGeoId, url, name | Identity |
phone, image | Contact + cover photo |
rating, reviewCount | Aggregate rating and total reviews |
priceLevel | $, $$, $$ - $$$, etc. |
cuisines | ["Japanese", "Sushi", "Asian"] |
establishmentTypes | ["Restaurants"] |
awards | Travelers' Choice / Michelin / etc. |
openingHours | Hours per day of week — keys mon/tue/…/sun, each a list of "HH:MM:SS-HH:MM:SS" spans |
openStatusText | Current status, e.g. "Open now" / "Closed today" |
menuUrl | Link to the restaurant's menu when TripAdvisor has one |
hasDelivery | Whether delivery is available |
hasReservation | Whether online reservation is available |
reservationProvider | Online reservation partner, e.g. "TheFork" |
reviewSnippet | Short highlighted excerpt from a recent review |
address, postalCode, city, country | Full address |
latitude, longitude | GPS coordinates |
images | Main photo URL (single-item list with the primary thumbnail) |
totalReviews | Total reviews available in the review feed |
scrapedAt | ISO 8601 timestamp of when the record was scraped |
💬 Embedded review (when Include reviews = true)
Reviews live inside their parent place record under reviews: [...]. Each review carries:
| Field | Description |
|---|---|
reviewId | TripAdvisor review id |
url | Permalink to the single-review page |
title | Review title |
rating | Overall score, 1–5 |
subratings | Per-category scores when present, e.g. {"Value": 1, "Rooms": 3, "Location": 5, "Cleanliness": 4, "Service": 5, "Sleep Quality": 2} |
text | Full review body |
photos | Traveler photos attached to the review (image URLs) |
language | Review language code (e.g. "en", "fr") |
travelDate | When the user stayed/visited, ISO date (e.g. "2026-06-30") |
tripType | "COUPLES" / "FAMILY" / "SOLO" / "BUSINESS" / "FRIENDS" |
writtenDate | When the review was posted, ISO date (e.g. "2026-06-10") |
helpfulVotes | Helpful-vote count |
reviewer | {name, profileUrl, contributions, location, isVerified, avatar} |
ownerResponse | Owner/management reply if present — {rawText, respondent, respondedAt} |
Plus reviewsScraped: N on the parent place — handy when you set maxReviewsPerPoi and want to know how many actually came back.
🚀 How to scrape TripAdvisor step by step
- Click Try for free — an Apify account includes $5 of free usage every month, no credit card needed.
- Type what you want in Search — a city (
"Antalya"), a region, a numeric geo ID ("187147"), or an exact place name ("Hotel Astra Opera Astotel"). Phrases like"hotels in Antalya"work too — the category is read from them. - Or paste TripAdvisor URLs into Start URLs — place pages or whole city listings. Fill either field, or both: everything you fill in gets scraped, so there is no mode to pick.
- Pick a Category —
All/Hotels/Restaurants(ignored for URLs that already point at one place).Allsplits the item limit evenly between hotels and restaurants. - Toggle
Include reviews— embeds reviews inside each place record (charged separately per review). - Set caps —
Max places,Max reviews per place, and optionallyMax places per city listing. - Run and download — JSON, CSV or Excel from the dataset; the table view shows name, rating, price, ranking and city out of the box.
🛠️ Input parameters
| Field | Type | Default | Description |
|---|---|---|---|
search | string list | ["Antalya"] | City / region names, numeric geo IDs, or exact place names. "hotels in Rome"-style phrases are understood |
startUrls | URL list | — | TripAdvisor pages: Hotel_Review-, Restaurant_Review-, Hotels-, Restaurants- |
category | enum | all | all, hotels, restaurants |
includeReviews | boolean | false (UI prefill: true) | Fetch reviews and embed them inside each place record |
maxReviewsPerPoi | integer | 10 | Cap on reviews per place (up to 50,000) |
maxItems | integer | 10 | Hard cap on total dataset rows. 0 = unlimited |
locale | enum | en-US | Result language — descriptions, reviews and amenities come back in the language you pick (38 languages/regions) |
maxPois | integer | 50 | Extra cap per city listing, on top of maxItems (up to 5,000) |
maxRetries | integer | 3 | How many times a failed request is retried (each retry uses a fresh IP) |
maxConcurrency | integer | 10 | How many requests to run in parallel (up to 30) |
Older inputs still work: if you send mode with searchTerms / locations, the Actor keeps the exact behaviour that mode had (and logs which fields it is ignoring).
Good to know
- One search entry returns one target: a city's listing, or a single place. Paste URLs (or add more entries) to scrape several specific places.
- Attractions and tours are not available — TripAdvisor serves those only as HTML pages, with no API behind them.
- A place page whose POI ranks outside the top of its city's listing comes back as a slim record (
isPartialRecord: true): name, URL, place type, total review count and its reviews, without price/amenities/ranking. - A run that scrapes nothing fails with the reason in the status message, instead of finishing "green" with an empty dataset.
🍳 Ready-to-paste input recipes
A. Every hotel in a city — competitive set for a destination:
{"search": ["Paris"],"category": "hotels","maxPois": 5000,"maxItems": 0}
B. Two cities, top 10 hotels each, 5 reviews per hotel:
{"search": ["Paris", "Dubai"],"category": "hotels","includeReviews": true,"maxReviewsPerPoi": 5,"maxPois": 10,"maxItems": 0}
C. One specific hotel with 50 reviews — reputation deep-dive:
{"startUrls": [{ "url": "https://www.tripadvisor.com/Hotel_Review-g187147-d229968-Reviews-Hotel_Astra_Opera_Astotel-Paris_Ile_de_France.html" }],"includeReviews": true,"maxReviewsPerPoi": 50}
D. Specific places by name:
{"search": ["Hotel Astra Opera Astotel", "Le Bernardin"],"category": "all","includeReviews": false}
E. Restaurant market scan — every restaurant in a city with cuisines, diets and hours:
{"search": ["Rome"],"category": "restaurants","maxPois": 1000,"maxItems": 0}
F. Localized run — hotels in Tokyo with Japanese descriptions and reviews:
{"search": ["Tokyo"],"category": "hotels","locale": "ja","includeReviews": true,"maxReviewsPerPoi": 10}
📄 Output examples
🏨 Hotel with embedded reviews
{"__type": "hotel","locationId": 250927,"parentGeoId": 187147,"url": "https://www.tripadvisor.com/Hotel_Review-g187147-d250927-Reviews-Hotel_Europe_Saint_Severin-Paris_Ile_de_France.html","name": "Hotel Europe Saint Severin","description": "Friendly and comfortable property located in the heart of the Latin quarter…","accommodationType": "Hotel","priceRange": "$$ (Based on Average Nightly Rates for a Standard Room from our Partners)","priceRangeMin": 149,"priceRangeMax": 320,"priceFrom": "$160","finalPrice": "$221","dealsCount": 11,"bookingProvider": "all.accor.com","specialOffer": "BOOK DIRECT & SAVE 15%","offers": [{"provider": "Hotels.com","displayPrice": "$221","basePrice": 221,"currency": "USD","isSupplierDirect": false,"freeCancellationDate": "2026-07-25","roomsRemaining": 4}],"awards": ["Travelers' Choice"],"rating": 4.5,"reviewCount": 3256,"ranking": "#383 of 1,882 hotels","rankingPosition": 383,"address": "38-40 Rue Saint Severin","neighborhood": "5th Arr. - Panthéon","city": "Paris","postalCode": "75005","country": "France","countryCode": "FR","emails": ["reservation@hoteleuropesaintseverin.com"],"latitude": 48.852753,"longitude": 2.344314,"amenities": ["Free WiFi", "24-hour front desk", "Concierge", "Air conditioning", "Non-smoking rooms"],"images": ["https://dynamic-media-cdn.tripadvisor.com/..."],"reviews": [{"reviewId": 1057616466,"title": "Perfect hotel for a family","rating": 5.0,"text": "I can only recommend this hotel! We stayed here as a family of three…","travelDate": "April 2026","tripType": "Traveled with family","writtenDate": "Apr 26","helpfulVotes": 1,"reviewer": {"name": "Erdal A","profileUrl": "https://www.tripadvisor.com/Profile/erdala957","contributions": null,"location": null}}],"reviewsScraped": 5}
🍽️ Restaurant
{"__type": "restaurant","locationId": 425227,"parentGeoId": 60827,"name": "Geido Restaurant","rating": 4.4,"reviewCount": 287,"priceLevel": "$$ - $$$","cuisines": ["Japanese", "Sushi", "Asian"],"establishmentTypes": ["Restaurants"],"awards": ["Travelers' Choice"],"openingHours": {"sun": ["17:00:00-22:00:00"],"mon": ["17:00:00-22:00:00"]},"openStatusText": "Open now","hasReservation": true,"reservationProvider": "TheFork","reviewSnippet": "Best sushi in the neighborhood — the omakase is a must.","latitude": 40.677,"longitude": -73.969}
💰 How much does it cost to scrape TripAdvisor?
Pay per result — no subscription, no minimum. Page discovery, retries, proxies and everything under the hood are absorbed by the actor, never charged to you.
| Event | Free plan | Paid Apify plans |
|---|---|---|
| Place (one hotel or restaurant) | $3.50 / 1,000 | from $2.20 / 1,000 |
| Review (embedded in its parent place) | $0.50 / 1,000 | from $0.25 / 1,000 |
Real-world examples (free-plan prices):
| Job | Cost |
|---|---|
| Top 50 hotels in Paris with 10 reviews each | $0.43 |
| One hotel with 1,000 reviews | ~$0.50 |
| 1,000 restaurants across 5 cities (no reviews) | $3.50 |
| 100 hotels with 100 reviews each (10,000 reviews) | $5.35 |
Apify's free plan includes $5 of usage every month — roughly 1,400 places or 9,900 reviews at no cost, no credit card required.
Budget protection: Maximum cost per run (default $20) is a hard cap — the run stops cleanly the moment your budget is hit, exit code 0, no partial double-charge. Combine with maxItems and maxReviewsPerPoi to control spend precisely.
🔌 Integrations
Send results anywhere: Make, Zapier, Google Sheets, Slack, n8n, Airbyte, webhooks or cloud storage. Pull data programmatically with the Apify API and the official Python and JavaScript clients.
Run it on a schedule with Apify Schedules to monitor new reviews or price changes daily or weekly, and trigger a webhook whenever a run finishes.
🤖 Use with AI agents (MCP)
Like every Apify actor, this scraper is available to AI agents through the Apify MCP server — connect it to Claude, Cursor or any MCP-compatible agent and ask things like "Get the top 20 hotels in Lisbon with their latest reviews and summarize common complaints." Structured place + review records are ideal input for LLM, RAG and sentiment pipelines.
💡 Popular use cases
- 🏨 Hotel competitive analysis — pull every hotel in a city with prices, ratings, amenities, ranking and photos for benchmarking against your own property.
- 🍽️ Restaurant market research — scrape restaurants by city; compare cuisines, price bands, ratings, awards and customer sentiment from review text.
- 💬 Review sentiment mining — bulk-extract review text, ratings, dates and trip types for sentiment analysis, brand monitoring and reputation management.
- 💵 Pricing intelligence — track
priceFromanddealsCountacross hotels to spot pricing trends and OTA partner availability. - 🗺️ OTA / aggregator data feed — power your own travel site or app with place data: GPS, amenities, hours, photos.
- 🔍 Hospitality SEO research — which cuisines and price bands rank top in a city, which Travelers' Choice winners exist, and what amenities matter most.
- 📞 Lead generation for travel suppliers — extract hotel and restaurant contact phone numbers for outreach.
- 📧 B2B hotel email lists — collect hotel business emails that TripAdvisor exposes directly (no website scraping) to build outreach lists for travel-tech, OTAs and hospitality suppliers.
- ✍️ Travel content creation — auto-generate destination guides with curated lists of top-rated places, photos and review quotes.
⚠️ Limitations
- Listing depth — default cap is 50 POIs per listing; set
maxPoishigher to scrape more (up to 5,000). - Reviews per POI — default cap is 10 reviews to keep runs cheap; raise
maxReviewsPerPoias needed (up to 50,000). - Coverage & language — TripAdvisor's data is global. Default results are in English; pick a
localefor another of the 38 languages/regions. Some multilingual-country sub-variants (e.g. fr-CA, fr-CH) and markets without a localized TripAdvisor site aren't offered.
⚖️ Is it legal to scrape TripAdvisor?
This actor extracts only publicly available data — the same listings, ratings and reviews anyone can open in a browser. Scraping public data is generally legal; note that reviews contain personal data (reviewer names, profiles), which is protected by GDPR in the EU and similar regulations elsewhere. Make sure you have a legitimate basis for how you store and use it. Read more in Apify's guide: Is web scraping legal?
❓ FAQ
Do I need a TripAdvisor account or API key?
No. No login, no partner application, no API key — just enter what you want to scrape.
Does TripAdvisor have a public API?
TripAdvisor's official content API is limited to approved partners. This actor is an unofficial alternative that extracts the same public data with nothing to apply for.
What kinds of TripAdvisor data does this actor scrape?
Hotels, restaurants, and customer reviews. Reviews come embedded inside each place record.
How do I scrape every hotel in a city?
Use the Cities mode, type "Paris" (or paste the geo ID "187147"), set category = hotels, maxPois = 5000 and maxItems = 0 for unlimited.
Can I scrape a specific hotel or restaurant page?
Yes — switch to Start URLs and paste the Hotel_Review- URL. Same for restaurants (Restaurant_Review-).
How are reviews formatted?
Reviews live inside their parent place under reviews: [...]. Each review has reviewId, title, rating, text, travelDate, tripType, helpfulVotes, reviewer, ownerResponse and more. Set Include reviews = true to fetch them.
Can I get results in another language?
Yes — pick a locale and descriptions, reviews and amenities come back in that language. 38 languages and regional variants are supported, from French and German to Japanese and Thai.
How do I cap the cost per run?
The default Maximum cost per run is $20. Lower it in the Run options panel, or set maxItems / maxReviewsPerPoi to hard-cap the volume.
Will I be charged for URLs that return nothing?
No. Billing is per record delivered to the dataset — if a page yields nothing, you pay nothing for it.
Why are some review fields null?
TripAdvisor doesn't always show every field per review (e.g. reviewer location, contributions count, owner response). When the page doesn't surface it, the field is null.
Why does my run return zero reviews on some hotels?
Occasionally a place page comes back without its review section. The place itself is still pushed; only its reviews array is empty. Re-running usually fills them in.
How fast is it?
Expect roughly 3–8 seconds per place, depending on how many reviews you pull. Places are fetched in parallel (up to 30 at once).
Can I export to CSV or Excel?
Yes. The dataset exports to JSON, CSV, Excel, XML, RSS and HTML. Embedded reviews: [...] arrays flatten in CSV via dot-notation; if you need one-row-per-review, post-process the JSON export by unwinding the reviews field.
Can I run it on a schedule?
Yes — use Apify Schedules to run daily or weekly and capture new reviews or price changes automatically, with webhook notifications.
Are there any extra costs?
No. The per-place and per-review prices are all-in — no bandwidth charges, no add-ons, no hidden costs.
🩺 Having issues? Help me fix them faster
If you experience any problems, please share your run data with me so I can debug and improve the actor:
- Go to Apify Security Settings
- Find "Share run data with developers"
- In the "Manage list of Actors" section, check this actor (or All Actors)
- Save
This data is used only for debugging and helps me resolve issues much faster. Thank you!
🗣️ Feedback & support
Found a bug or missing a feature? Open an issue on the Issues tab of this actor, or write to afrcanec@gmail.com. Feature requests are welcome — the actor is actively maintained. If it saves you time, a review helps other users find it. ⭐
🧰 More scrapers by this developer
- Trustpilot Scraper — Reviews, Companies & TrustScores
- Booking.com Scraper — Hotels, Prices, Reviews & Host Data
- Google Maps Scraper — Emails, Reviews & Photos
- Apartments.com Scraper — Rentals, Prices & Reviews
- Amazon Scraper API — Products, Reviews, Sellers
- Ultimate YouTube Scraper — Videos, Transcripts & Comments
Tags: TripAdvisor Scraper, TripAdvisor API, TripAdvisor API Alternative, Unofficial TripAdvisor API, TripAdvisor Hotels Scraper, TripAdvisor Restaurants Scraper, TripAdvisor Reviews Scraper, TripAdvisor Reviews API, Scrape TripAdvisor, How to Scrape TripAdvisor, Extract TripAdvisor Reviews, Hotel Reviews Scraper, Restaurant Reviews Scraper, Hotel Price Scraper, Hotel Data Extraction, Travel Data Scraper, Hospitality Data, Tourism Scraper, City Listings Scraper, Hotel Ratings Extractor, Hotel Amenities Scraper, Hotel Booking Data, Travel Reviews Mining, Sentiment Analysis Travel, Hotel Competitor Analysis, Restaurant Competitor Analysis, OTA Data Scraping, Hotel Star Rating Scraper, Travelers Choice Awards, Hotel Photo Scraper, Travel Market Research, Hospitality Market Research, Tourism Analytics, Hotel Aggregator, Review Aggregator, Restaurant Discovery, Travel Industry Data, Hotel Pricing API, Customer Review Mining, AI Training Data Travel