TripAdvisor Places Scraper - Most Comprehensive
Pricing
from $0.08 / 1,000 places
TripAdvisor Places Scraper - Most Comprehensive
🔥 ~$0.1/1K places 🔥 Collect TripAdvisor hotels, restaurants, and things to do for cities and supported neighborhoods.
Pricing
from $0.08 / 1,000 places
Rating
0.0
(0)
Developer
Kai
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
3
Monthly active users
2 days ago
Last modified
Categories
Share
TripAdvisor Places Scraper
Collect TripAdvisor places and bookable experiences as structured dataset records. Each place has a consistent set of identity, rating, location, contact, and ranking fields.
Use it to compare places across destinations, build research lists, monitor ratings and rankings, or collect exact places and bookable experiences.
Start with a destination
Search Boston and collect up to 30 results for each default place type:
{"locations": ["Boston"]}
The default place types are restaurants, hotels, and attractions.
Choose a search boundary
| Mode | Location input | Rules |
|---|---|---|
area | City, town, island, region, geography ID, geography URL, or Neighborhood, City | A street address or postal code is not a reliable area boundary. Do not supply boundingBox. |
boundingBox | Exactly one parent geography | Supply all four edges. north must be greater than south, and east must be greater than west. The box cannot cross the antimeridian. |
nearby | Exact POI IDs or URLs | boundingBox is optional. Place filters and non-auto place sorts are not accepted. |
exact | Exact POI or product IDs or URLs | Place type is detected from the target. boundingBox, place filters, and non-auto place sorts are not accepted. |
Collect an exact place
Collect one place when you already have its TripAdvisor ID:
{"searchMode": "exact","locations": ["5572598"],"dataPreset": "coreProfiles"}
Choose place types and limits
placeTypes accepts restaurant, hotel, and attraction.
Things-to-do searches can also return attraction_product records.
maxItemsPerType applies to each location and place-type pair. For example,
two locations and three place types create six independent result limits.
Refine places with TripAdvisor labels
Each filter has a field and one or more values. Use the labels that
TripAdvisor shows for the destination. The Actor resolves the current choices
for that search and verifies an explicit sort.
| Filter | Accepted field values |
|---|---|
restaurantFilters | awards, bookable, cuisines, diets, dishes, establishmentTypes, meals, michelinAwards, minimumRating, neighborhoods, openNow, features, priceLevels, styles |
hotelFilters | amenities, brands, classes, deals, distance, neighborhoods, popular, price, minimumRating, rewards, styles, travelerAwards, types |
attractionFilters | tags, awards, categories, categoryGroup, neighborhoods, openNow, minimumRating, duration |
reviewFilters | language, rating, tripType, month, text |
This bounding-box search collects Italian restaurants in central Boston:
{"searchMode": "boundingBox","locations": ["Boston"],"boundingBox": {"north": 42.373,"south": 42.338,"east": -71.03,"west": -71.09},"placeTypes": ["restaurant"],"maxItemsPerType": 30,"restaurantFilters": [{ "field": "cuisines", "values": ["Italian"] }],"restaurantSort": "popularity"}
Filter and sort choices can change by destination, place type, category, date, and earlier filters. An unavailable or ambiguous label is rejected instead of being replaced silently.
Choose the data to collect
| Preset | Data collected |
|---|---|
listings | Listing-card data without profile details. |
coreProfiles | Listing data plus core profile details. |
fullProfiles | Core profile details plus applicable about, amenities, menu, opening-hours, health-and-safety, and AI review-summary sections. |
New runs in Apify Console prefill dataPreset: "listings". API and CLI inputs that omit dataPreset use the legacy includeDetails: true default and select coreProfiles.
Use additionalData for paginated collections and optional sections. This
example adds filtered reviews, photos, tips, questions, and attraction products:
{"locations": ["Boston"],"placeTypes": ["attraction"],"maxItemsPerType": 10,"attractionFilters": [{ "field": "categoryGroup", "values": ["Tours"] }],"attractionSort": "travelerFavorite","reviewFilters": [{ "field": "language", "values": ["English"] },{ "field": "rating", "values": ["5"] }],"dataPreset": "fullProfiles","additionalData": ["reviews","tips","questionsAndAnswers","photos","attractionProducts"],"maxReviewsPerPlace": 10,"maxTipsPerPlace": 10,"maxQuestionsPerPlace": 10,"maxPhotosPerPlace": 10,"maxAttractionProductsPerPlace": 10}
Add dates and party details
Travel context requests booking offers for the matching place type. Dates must be today or later.
Hotel stay
{"locations": ["Boston"],"placeTypes": ["hotel"],"additionalData": ["bookingOffers"],"currency": "USD","unitLength": "MILES","hotelStay": {"checkIn": "2099-09-10","checkOut": "2099-09-12","rooms": [{ "adults": 2, "childrenAges": [8] }]}}
Restaurant reservation
{"locations": ["Boston"],"placeTypes": ["restaurant"],"additionalData": ["bookingOffers"],"restaurantReservation": {"date": "2099-09-10","time": "19:00","partySize": 2}}
Attraction visit
{"locations": ["Boston"],"placeTypes": ["attraction"],"additionalData": ["bookingOffers", "importantInformation"],"attractionVisit": {"date": "2099-09-10","travelers": [{ "ageBand": "ADULT", "count": 2 },{ "ageBand": "CHILD", "count": 1 }]}}
The 2099 dates keep these syntax examples valid as future-date requests. They are not availability examples.
Input reference
| Field | Type | Default | Description |
|---|---|---|---|
searchMode | string | area | area, boundingBox, nearby, or exact. |
locations | string[] | required | Area names or geography IDs in area mode; exact TripAdvisor POI IDs or URLs in nearby and exact modes. |
boundingBox | object | none | north, south, east, and west coordinates. It is required in boundingBox mode and optional in nearby mode. |
placeTypes | string[] | restaurant, hotel, attraction | One or more place types. Attraction searches can also return bookable attraction_product items. |
maxItemsPerType | integer | 30 | Maximum unique items for each location and selected place type. Minimum: 1. |
restaurantFilters | object[] | [] | Restaurant rules with field and one or more human-readable values. |
restaurantSort | string | auto | auto, popularity, relevance, or featured. |
hotelFilters | object[] | [] | Hotel rules with field and one or more human-readable values. |
hotelSort | string | auto | auto, bestValue, popularity, priceLowToHigh, or distanceFromCityCenter. |
attractionFilters | object[] | [] | Attraction rules with field and one or more human-readable values. |
attractionSort | string | auto | auto, travelerFavorite, travelerRanked, featured, either price order, or either duration order. |
reviewFilters | object[] | [] | Review rules used when additionalData includes reviews. Each rule has field and values. |
dataPreset | string | derived from includeDetails | listings, coreProfiles, or fullProfiles. If set, it takes precedence over includeDetails. |
additionalData | string[] | [] | Optional profile sections and collections. See the output variants below. |
maxReviewsPerPlace | integer | 20 | Maximum reviews for each place when reviews are selected. Minimum: 1. |
maxTipsPerPlace | integer | 20 | Maximum traveller tips for each place. Minimum: 1. |
maxQuestionsPerPlace | integer | 20 | Maximum questions and answers for each place. Minimum: 1. |
maxPhotosPerPlace | integer | 20 | Maximum photos for each place. Minimum: 1. |
maxAttractionProductsPerPlace | integer | 20 | Maximum attraction products for each place. Minimum: 1. |
includeDetails | boolean | true | Legacy control used only when dataPreset is absent. |
currency | string | USD | Uppercase three-letter currency code for price requests. |
unitLength | string | MILES | MILES or KILOMETERS. |
hotelStay | object | none | checkIn, checkOut, and rooms. Each room has adults and optional childrenAges. |
restaurantReservation | object | none | date, local time in HH:mm format, and partySize. |
attractionVisit | object | none | Visit date and unique travelers entries with ageBand and count. Age bands are ADULT, CHILD, INFANT, SENIOR, and YOUTH. |
Hotel-specific input example
This example shows the hotel-specific input paths that are not used in the task examples above. The input table covers the other place types and options.
Place output
The default dataset contains one normalised item per place. This example uses values from a retained public response for Ostra. It has no optional enrichment fields.
Base place fields
| Field | Type | Description |
|---|---|---|
contentId | string | TripAdvisor place or product ID. |
contentType | string | restaurant, hotel, attraction, or attraction_product. |
name | string | Display name. |
url | string or null | Public TripAdvisor URL. |
routeUrl | string or null | TripAdvisor route path. |
sourceLocation | object | Search input and resolved location context. See its child fields below. |
listPosition | number or null | Position shown in the result list. It is null outside a list search. |
rating | number or null | Overall traveller rating. |
reviewCount | number or null | Number of reviews reported for the place. |
primaryInfo | string or null | Primary list-card summary. |
secondaryInfo | string or null | Secondary list-card summary. |
photoUrls | string[] | List-card image URLs. |
labels | string[] | Visible list-card labels. |
badge | object or null | Visible badge. See its child fields below. |
description | string or null | Profile description. |
tags | string[] | TripAdvisor categories and tags. |
address | string or null | Display address. |
latitude, longitude | number or null | Coordinates. |
neighborhood | object or null | Place neighborhood. See its child fields below. |
ownerStatus | string or null | Claimed-owner status. |
contactLinks | object[] | Public contact links. See their child fields below. |
ranking | object or null | Category ranking. See its child fields below. An attraction_product item can have no Things-to-do category rank. |
ratingHistogram | object or null | Rating distribution. See its child fields below. |
subRatings | object or null | Type-specific rating names and numeric values. Rating names can vary by place type. |
detailStatus | string | not_requested, fetched, or failed. |
additionalData | object, optional | Requested optional data, keyed by feature name. |
additionalDataErrors | object, optional | Feature names mapped to error-message strings. |
scrapedAt | string | UTC collection timestamp. |
Nested fields
| Object | Child fields and types |
|---|---|
sourceLocation | input and name strings; geoId number or null; neighborhood object or null; optional mode value area, boundingBox, nearby, or exact. The neighborhood child has string id and name. |
badge | type string; year string or null. |
neighborhood | id number; name string. |
contactLinks[] | label string or null; url string. |
ranking | text string; position, total, and geoId numbers or null; contentType string or null. |
ratingHistogram | Numeric excellent, veryGood, average, poor, and terrible counts. |
subRatings | Open rating-name keys with numeric values. |
additionalData variants
Child fields inside optional sections can change. Each feature value contains
the section objects that TripAdvisor returns. A requested feature normally
returns an array. An unavailable but valid feature returns an empty array. If a
feature is absent, additionalDataErrors can contain its source message.
| Key | Applies to | Returned value |
|---|---|---|
about | Place profiles | About and profile-tab section objects. |
amenities | Hotels | Amenity section objects; empty for other place types. |
menu | Restaurants | Menu section objects; empty for other place types. |
openingHours | Place profiles | Opening-hours section objects. |
healthSafety | Place profiles | Health-and-safety section objects. |
aiReviewSummary | Place profiles where available | AI review-summary section objects. |
reviews | Place profiles | Review-card objects, limited by maxReviewsPerPlace. |
tips | Place profiles where available | Traveller-tip objects, limited by maxTipsPerPlace. |
questionsAndAnswers | Place profiles where available | Question-and-answer objects, limited by maxQuestionsPerPlace. |
questionFormMetadata | Place profiles where available | Question-form metadata objects. |
photos | Place profiles | Photo objects, limited by maxPhotosPerPlace. |
attractionProducts | Attractions | Product objects, limited by maxAttractionProductsPerPlace; empty for other place types. |
importantInformation | Attractions and exact attraction products | For an attraction, objects have productId and open sections; for an exact product, the value is the returned section array. Empty for other place types. |
bookingOffers | Hotels, restaurants, and attractions | Hotel offer sections, restaurant reservation or time-slot objects, or attraction product offers. The variant follows contentType; a non-applicable type returns an empty array. |
fullProfiles adds the applicable about, amenities, menu, openingHours, healthSafety, and aiReviewSummary sections. It does not add paginated collections such as reviews or photos. importantInformation also requests the related attraction products. A matching hotelStay, restaurantReservation, or attractionVisit requests bookingOffers for that place type.
The retained Ostra detail response contains the following opening-hours
values. This selected example shows how a returned section is placed under
additionalData.openingHours; section objects can contain more source fields.
{"additionalData": {"openingHours": [{"stableDiffingType": "RestaurantOpenHoursSection","iconName": "clock","text": {"string": "Closed now"},"todaySchedule": [{"string": "Opens 5:30 PM - 9:00 PM"}]}]}}
Limits
maxItemsPerTypeapplies to each location and place-type pair. Duplicate list cards are removed before the limit is applied.- Filter and sort choices depend on the destination and place type. Each requested label must match one current choice unambiguously.
- Review, tip, question, photo, and attraction-product limits apply separately to each place.
- Travel dates must be today or later. Hotel checkout must follow check-in. Each room accepts 1–20 adults and child ages 0–17. Reservation party size and each traveller count accept 1–100.
- Optional data depends on the place type and TripAdvisor availability. Check
additionalDataErrorswhen a requested feature is absent; the base place item remains available.