Tripadvisor Scraper - Hotels, Restaurants & Attractions
Pricing
from $1.50 / 1,000 results
Tripadvisor Scraper - Hotels, Restaurants & Attractions
Extract Tripadvisor hotels, restaurants, attractions, listing URLs, and location details across regional domains. Get ratings, review counts, and available prices or contacts. Pay per delivered row plus a start fee.
Pricing
from $1.50 / 1,000 results
Rating
0.0
(0)
Developer
kane liu
Maintained by CommunityActor stats
1
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Security
Limited permissionsShare
Tripadvisor Scraper
Extract Tripadvisor hotels, restaurants, attractions, listing URLs, and location details as rows you can export.
- Search a destination or use a Tripadvisor geographic ID.
- Get names, ratings, review counts, and listing links.
- Read hotel prices and restaurant contact details when available.
- Choose regional domains, currencies, and languages.
- Pay $2.00 per 1,000 delivered rows on the Free plan, plus a small start fee.
What does Tripadvisor Scraper do?
Tripadvisor Scraper collects public place information for travel research, destination inventories, and comparisons. Each row describes one listing, inventory entry, or location. Choose one service and one destination per run; this Actor does not accept a list of destinations.
- Hotels: search accommodation, with optional stay dates and guest counts.
- Restaurants: collect ratings, cuisines, price bands, and available contact details.
- Attractions: collect things to do and distinguish attractions from tour products with
kindwhen present. - Sitemap: find available listing or geographic inventory entries by destination.
- Location lookup: resolve a location's name and place type.
Regional domains include www.tripadvisor.com, www.tripadvisor.co.uk, www.tripadvisor.com.au, www.tripadvisor.de, www.tripadvisor.fr, and www.tripadvisor.co.jp. Accepted domains do not guarantee identical coverage or fields in every market. Use a small run to check your destination.
What data can you extract from Tripadvisor?
Fields vary by service and source availability. A missing price is not zero. service identifies the selected service, and scrapedAt records the collection time. The following tables show useful fields, not a guarantee that every row contains them.
Hotel rows
| Field | Description | Example |
|---|---|---|
listingId | Listing identifier | 123456 |
name | Hotel name | Example Riverside Hotel |
url | Listing link | https://www.tripadvisor.com/Hotel_Review-g293916-d123456-Reviews-Example.html |
rating | Rating out of five | 4.5 |
reviewCount | Number of reviews | 1280 |
price | Available price amount, not necessarily the final total | 120 |
currency | Currency reported with the price | USD |
quoteStatus | Quote completion state | incomplete |
actualCheckin | Check-in date returned by the site | 2027-01-12 |
actualCheckout | Check-out date returned by the site | 2027-01-14 |
Restaurant rows
| Field | Description | Example |
|---|---|---|
listingId | Listing identifier | 234567 |
name | Restaurant name | Example Kitchen |
url | Restaurant listing link | https://www.tripadvisor.com/Restaurant_Review-g186338-d234567-Reviews-Example.html |
rating | Rating out of five | 4.5 |
reviewCount | Number of reviews | 320 |
cuisines | Cuisine labels | ["Italian"] |
priceTier | Restaurant price band | $$-$$$ |
phone | Public business contact, when shown | +1 555 0100 |
addressCountry | Listing's geographic country | United Kingdom |
openStatusText | Opening status text, when shown | Open now |
Attraction rows
| Field | Description | Example |
|---|---|---|
listingId | Listing identifier; not always a native numeric ID | 345678 |
name | Attraction or product name | Example City Museum |
url | Listing link | https://www.tripadvisor.com/Attraction_Review-g294265-d345678-Reviews-Example.html |
rating | Rating out of five | 4.5 |
reviewCount | Number of reviews | 640 |
kind | Attraction or tour-product distinction | attraction |
geoId | Geographic identifier, when present | 294265 |
price | Displayed price, if present | 25 |
currency | Currency supplied with the price | SGD |
scrapedAt | Collection time in UTC | 2026-10-24T04:00:00+00:00 |
Sitemap rows
| Field | Description | Example |
|---|---|---|
listingId | Inventory entry identifier | 293916 |
name | Listing or geographic name | Bangkok |
kind | Entry category, such as a hotel or location | location |
geoId | Geographic identifier | 293916 |
url | Available listing or destination link | https://www.tripadvisor.com/Tourism-g293916-Bangkok-Vacations.html |
slug | Name component of a URL | Bangkok |
Location lookup rows
| Field | Description | Example |
|---|---|---|
listingId | Identifier written as text | 293916 |
locationId | Numeric location identifier | 293916 |
name | Resolved location name | Bangkok |
geoName | Resolved geographic name | Bangkok |
placeType | Place classification, when available | ACCOMMODATION |
localizedName | Localized display name, when available | Bangkok |
Lookup and geographic inventory rows may have no listing URL. For listing geography, use addressCountry, not country: the latter describes the search market, not the property's address.
How to scrape Tripadvisor
- Open Tripadvisor Scraper in Apify Console.
- Choose
serviceand enterdestination, or aregionIdfor listings and location lookups. - Set
maxResultsto3or5for a first run. - Click Start and check the run status and dataset.
- Download the rows or read the dataset through the API.
An empty JSON input, {}, starts a Bangkok hotel example limited to three rows. Normal event prices apply; it is not a free preview. Filling either target is enough for a listing search. The default service remains hotels; a destination name does not automatically select restaurants or attractions.
Hotels
Set service to hotels. Enter both stay dates for a specific trip. With dates omitted, check-in is 21 days ahead and check-out is 23 days ahead. Supplied dates are not automatically moved forward. quotePoll can wait for more complete quotes, but does not guarantee a price.
Restaurants
Set service to restaurants and enter a city or geographic ID. Use domain, locale, and currency together for a regional search. Restaurant price bands are not reservation totals.
Attractions
Set service to attractions and enter a destination. Check kind when distinguishing places to visit from bookable products. Phone numbers are not provided for attractions.
Sitemap
Set service to sitemap and use destination. Results are inventory entries, not fully enriched listings or a complete live catalog. A city match can return a geographic entry instead of individual places. Do not use regionId alone as a geographic filter for this service.
Location lookup
Set service to location_lookup. Supply a numeric regionId for a known location, or destination to resolve a name first. This returns location information, not reviews or a list of hotels.
What to fill in
| Field | What to enter | Default |
|---|---|---|
destination | One city or region, such as Bangkok | Empty; example prefill Bangkok |
regionId | Geographic ID, such as 293916; g293916 also works | Empty |
service | hotels, restaurants, attractions, sitemap, or location_lookup | hotels |
maxResults | Row limit for this input, from 1 to 500 | 70; form prefill 3 |
checkin | Hotel check-in, YYYY-MM-DD | 21 days ahead when omitted |
checkout | Hotel check-out, YYYY-MM-DD | 23 days ahead when omitted |
adults | Adult guests, 1–10 | 2 |
children | Children, 0–10 | 0 |
childrenAges | Ages, each 0–17; for example [4, 9] | Empty list |
rooms | Hotel rooms, 1–10 | 1 |
quotePoll | Wait for more complete hotel quotes | false |
includeSponsored | Leave unchanged; sponsored rows remain excluded | false |
sort | Sorting preference where supported | RECOMMENDED |
domain | Regional Tripadvisor domain | www.tripadvisor.com |
locale | Language and region tag | en_US |
currency | Three-letter currency code | USD |
Hotel example:
{"service": "hotels", "destination": "Bangkok", "maxResults": 3}
Restaurant example:
{"service": "restaurants","destination": "London","domain": "www.tripadvisor.co.uk","locale": "en_GB","currency": "GBP","maxResults": 3}
Attraction example:
{"service": "attractions", "regionId": "294265", "maxResults": 3}
Sitemap example:
{"service": "sitemap", "destination": "Bangkok", "maxResults": 3}
Location lookup example:
{"service": "location_lookup", "regionId": "293916", "maxResults": 1}
maxItemsandlimitare accepted aliases formaxResults.city,location,query,search, andkeywordare aliases fordestination;geoIdandlocationIdmap toregionId.- For listing searches and location lookups,
regionIdtakes priority overdestination. - Close misspellings of input keys can be corrected. Other unknown fields are ignored with a note.
- Each run writes
INPUT_REPORTto its default key-value store, including corrections, ignored fields, and example-run information. - Some invalid optional filters are ignored or normalized. Rejected input stops with
INVALID_INPUT:and guidance about the field, before any rows are charged. The start fee can still apply.
Output example
Illustrative hotel row; actual fields depend on what the source provides:
{"source": "tripadvisor","service": "hotels","listingId": "123456","name": "Example Riverside Hotel","domain": "www.tripadvisor.com","destination": "Bangkok","url": "https://www.tripadvisor.com/Hotel_Review-g293916-d123456-Reviews-Example.html","rating": 4.5,"reviewCount": 1280,"price": null,"currency": null,"quoteStatus": "incomplete","sponsored": false,"scrapedAt": "2026-10-24T04:00:00+00:00"}
Export the dataset as JSON, CSV, Excel, XML, RSS, or an HTML table. JSON preserves arrays and nested values. The default key-value store also holds RUN_SUMMARY, INPUT_ECHO, and, on failure, ERROR_SUMMARY.
Why use this Tripadvisor scraper?
- Pay for delivered rows. Attempted pages are not separate result charges.
- Keep available partial data. Rows already written remain in the dataset. The Actor can also deliver available partial rows near its time limit; an abrupt stop does not guarantee recovery of unwritten rows.
- Understand failures. Input errors name the field to fix; collection failures have an error summary.
- Avoid invented values. Missing prices and unavailable contact details remain empty or absent.
- Reuse an input. Schedule the same destination search and compare exported datasets over time.
- No proxy setup. You do not need to set up proxies or provide a Tripadvisor account.
How much does it cost to scrape Tripadvisor?
The Actor uses pay-per-event pricing. The start event costs $0.005 per GB of allocated memory, with a minimum of one event. At the default 512 MB, one run start costs $0.005. Platform usage is included in these prices.
| Apify plan | Start at 512 MB | Price per row | Price per 1,000 rows |
|---|---|---|---|
| Free | $0.005 | $0.002 | $2.00 |
| Starter | $0.005 | $0.002 | $2.00 |
| Scale | $0.005 | $0.002 | $2.00 |
| Business | $0.005 | $0.0015 | $1.50 |
Every delivered row uses the same result price, including sitemap and location lookup rows.
maxResultsapplies to the single destination or geographic input. It defaults to 70; larger requests are collected in parts of 70, up to the input maximum of 500.- Free-plan runs are capped at 200 rows. A separate free-plan run allowance may also apply; check the run message if access is limited.
- Set Maximum cost per run in run options, or
maxTotalChargeUsdthrough the API. The Actor stops delivering rows when that charge budget is exhausted.
Example: 50 delivered rows on the Free plan at 512 MB cost 50 × $0.002 + $0.005 = $0.105. If only three rows are delivered, the corresponding total is $0.011. Requesting a limit does not guarantee that many matches.
Use with AI agents and the API
Apify MCP server
Add this Actor in a remote MCP client such as Claude, ChatGPT, Cursor, or VS Code:
https://mcp.apify.com?tools=lentic_clockss/tripadvisor-scraper
Sign in with Apify through OAuth when prompted, or send Authorization: Bearer <YOUR_APIFY_TOKEN>. The tool starts a run and returns its run and dataset IDs; read rows with get-dataset-items. Clients without remote MCP support can use npx @apify/actors-mcp-server --tools lentic_clockss/tripadvisor-scraper with APIFY_TOKEN configured.
Example prompt: "Find three Tripadvisor restaurants in London and return their names, ratings, and listing URLs."
Apify API
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("lentic_clockss/tripadvisor-scraper").call(run_input={"service": "restaurants", "destination": "London", "maxResults": 3})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item)
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });const run = await client.actor('lentic_clockss/tripadvisor-scraper').call({service: 'restaurants', destination: 'London', maxResults: 3});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
For HTTP, send the JSON input to POST https://api.apify.com/v2/acts/lentic_clockss~tripadvisor-scraper/runs with an Authorization: Bearer <YOUR_APIFY_TOKEN> header. After the run finishes, read GET https://api.apify.com/v2/datasets/<datasetId>/items?format=json using its dataset ID.
Integrations
Use the Actor's Integrations tab for Google Sheets, Make, Zapier, n8n, Slack, Airtable, or webhooks. Use Apify Schedules for repeated runs.
FAQ
Is it legal to scrape Tripadvisor?
This unofficial Actor collects public data and is not affiliated with Tripadvisor. You are responsible for complying with site terms and applicable data protection laws. Processing personal data requires a lawful basis; public visibility alone is not permission for every use.
Why did my run end as ABORTED?
A run can be aborted by a user or an automation. Check its status message and log. This Actor does not automatically resume an aborted run. Already delivered rows remain available; start another run if needed, noting its separate start fee.
How many results can I get?
Request 1–500 rows for one input. The Free plan caps a run at 200 rows, and your charge budget may lower the limit. Available matches and complete listing identities can reduce the delivered count further.
Why are some fields empty?
Not every listing exposes contact details, prices, or address components. Hotel quotes may be incomplete. Check quoteStatus and actual stay dates before interpreting a price; missing data is not evidence of a free room or no availability.
Do I need a Tripadvisor login or Content API key?
No. The Actor does not ask for a Tripadvisor login or Content API key. An Apify account is needed to run it, and API examples require your Apify token.
Does this collect review text?
No. It returns listing information, ratings, and review counts, not individual review text.
Can I collect cruises, vacation rentals, forums, or flights?
No. Those are not supported services. Use one of the five service values listed above.
Why are there no sponsored rows?
Sponsored listings are excluded. Setting includeSponsored to true does not enable them.
Limitations
- One destination or geographic ID per run; no destination arrays or listing-URL input.
- Regional domains can differ in coverage, fields, and available results.
- Sitemap results are limited inventory entries, not a complete fresh listing search; use
destination, not an ID-only filter. - Listing IDs are not always native numeric IDs, particularly for some attraction rows.
- Hotel prices are observations, not booking quotes or guaranteed final totals.
- Attraction rows do not include phone numbers. Lookup rows do not include full listing details.
- The form's reserved fields do not add unsupported services, output projection, or manual cursor continuation to Actor runs.
Related scrapers
More travel, hotel and flight scrapers from the same publisher:
- Trip.com Scraper — Hotels Flights Trains Cars
- Traveloka Scraper
- Expedia Scraper
- Skyscanner Scraper
- Agoda Scraper — Hotels, Flights, Packages & More
- Despegar Scraper
- Airbnb Listings Scraper
- Booking.com Hotels Scraper
Browse all of our scrapers at apify.com/lentic_clockss.
Support
Report problems or request a field through the Issues tab of this Actor's page. Include the run ID and the input you used.