Tripadvisor Scraper - Hotels, Restaurants & Attractions avatar

Tripadvisor Scraper - Hotels, Restaurants & Attractions

Pricing

from $1.50 / 1,000 results

Go to Apify Store
Tripadvisor Scraper - Hotels, Restaurants & Attractions

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

kane liu

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Security

Limited permissions

Share

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 kind when 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

FieldDescriptionExample
listingIdListing identifier123456
nameHotel nameExample Riverside Hotel
urlListing linkhttps://www.tripadvisor.com/Hotel_Review-g293916-d123456-Reviews-Example.html
ratingRating out of five4.5
reviewCountNumber of reviews1280
priceAvailable price amount, not necessarily the final total120
currencyCurrency reported with the priceUSD
quoteStatusQuote completion stateincomplete
actualCheckinCheck-in date returned by the site2027-01-12
actualCheckoutCheck-out date returned by the site2027-01-14

Restaurant rows

FieldDescriptionExample
listingIdListing identifier234567
nameRestaurant nameExample Kitchen
urlRestaurant listing linkhttps://www.tripadvisor.com/Restaurant_Review-g186338-d234567-Reviews-Example.html
ratingRating out of five4.5
reviewCountNumber of reviews320
cuisinesCuisine labels["Italian"]
priceTierRestaurant price band$$-$$$
phonePublic business contact, when shown+1 555 0100
addressCountryListing's geographic countryUnited Kingdom
openStatusTextOpening status text, when shownOpen now

Attraction rows

FieldDescriptionExample
listingIdListing identifier; not always a native numeric ID345678
nameAttraction or product nameExample City Museum
urlListing linkhttps://www.tripadvisor.com/Attraction_Review-g294265-d345678-Reviews-Example.html
ratingRating out of five4.5
reviewCountNumber of reviews640
kindAttraction or tour-product distinctionattraction
geoIdGeographic identifier, when present294265
priceDisplayed price, if present25
currencyCurrency supplied with the priceSGD
scrapedAtCollection time in UTC2026-10-24T04:00:00+00:00

Sitemap rows

FieldDescriptionExample
listingIdInventory entry identifier293916
nameListing or geographic nameBangkok
kindEntry category, such as a hotel or locationlocation
geoIdGeographic identifier293916
urlAvailable listing or destination linkhttps://www.tripadvisor.com/Tourism-g293916-Bangkok-Vacations.html
slugName component of a URLBangkok

Location lookup rows

FieldDescriptionExample
listingIdIdentifier written as text293916
locationIdNumeric location identifier293916
nameResolved location nameBangkok
geoNameResolved geographic nameBangkok
placeTypePlace classification, when availableACCOMMODATION
localizedNameLocalized display name, when availableBangkok

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

  1. Open Tripadvisor Scraper in Apify Console.
  2. Choose service and enter destination, or a regionId for listings and location lookups.
  3. Set maxResults to 3 or 5 for a first run.
  4. Click Start and check the run status and dataset.
  5. 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

FieldWhat to enterDefault
destinationOne city or region, such as BangkokEmpty; example prefill Bangkok
regionIdGeographic ID, such as 293916; g293916 also worksEmpty
servicehotels, restaurants, attractions, sitemap, or location_lookuphotels
maxResultsRow limit for this input, from 1 to 50070; form prefill 3
checkinHotel check-in, YYYY-MM-DD21 days ahead when omitted
checkoutHotel check-out, YYYY-MM-DD23 days ahead when omitted
adultsAdult guests, 1–102
childrenChildren, 0–100
childrenAgesAges, each 0–17; for example [4, 9]Empty list
roomsHotel rooms, 1–101
quotePollWait for more complete hotel quotesfalse
includeSponsoredLeave unchanged; sponsored rows remain excludedfalse
sortSorting preference where supportedRECOMMENDED
domainRegional Tripadvisor domainwww.tripadvisor.com
localeLanguage and region tagen_US
currencyThree-letter currency codeUSD

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}
  • maxItems and limit are accepted aliases for maxResults.
  • city, location, query, search, and keyword are aliases for destination; geoId and locationId map to regionId.
  • For listing searches and location lookups, regionId takes priority over destination.
  • Close misspellings of input keys can be corrected. Other unknown fields are ignored with a note.
  • Each run writes INPUT_REPORT to 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 planStart at 512 MBPrice per rowPrice 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.

  • maxResults applies 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 maxTotalChargeUsd through 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 ApifyClient
client = 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

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.

More travel, hotel and flight scrapers from the same publisher:

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.