Tripadvisor Hotels Scraper

Shahid Irfan · @shahidirfan

Extract hotel data from TripAdvisor instantly. Scrape reviews, ratings, prices, amenities & location details at scale. Perfect for travel startups.

About

What does TripAdvisor Hotels Scraper do?

TripAdvisor Hotels Scraper collects structured hotel listings from public TripAdvisor destination pages. Paste one or more TripAdvisor Hotels URLs, choose how many hotels you need, and get a dataset with names, ratings, review totals, destination rankings, prices and offers, addresses, coordinates, amenities, descriptions, and photos.

Use it for destination market research, competitor price checks, hotel lead lists, travel content planning, or enriching an existing property database with TripAdvisor fields. Records are deduplicated across pages, so a sponsored hotel that appears twice is saved once.

Why use TripAdvisor Hotels Scraper?

  • Collect beyond the first screen - Walk through result pages until your limit is reached instead of copying the first 30 hotels by hand.
  • One record per hotel - Sponsored placements repeat between pages. The Actor keeps the first occurrence and drops later duplicates.
  • Compare prices across providers - Each hotel carries the lowest displayed price, the offer count, and per-provider offer details with currency and payment timing.
  • Location data ready for maps - Address parts, latitude, and longitude are saved separately, so the dataset loads into GIS or spreadsheet map tools without parsing.
  • Clean output - Empty strings, nulls, and empty arrays are omitted rather than saved as placeholders.
  • Runs on a schedule - Track a destination weekly or monthly and compare snapshots over time.

What data can you extract from TripAdvisor?

Each dataset item is one hotel. Optional fields appear only when TripAdvisor publishes a value for that property.

Identity, reviews, and ranking
FieldTypeDescription
hotel_nameStringHotel or property name
location_idIntegerTripAdvisor hotel location identifier
hotel_urlStringTripAdvisor hotel page URL
hotel_result_keyStringListing result key from the destination page
ratingNumberAverage guest rating, 0 to 5
reviews_countIntegerPublished review total
review_snippetObjectOne published review excerpt with title, rating, date, reviewer, and URL
ranking_type_textStringLocalized ranking, for example #8 of 1,249 B&Bs / Inns in Istanbul
ranking_positionIntegerNumeric rank from the destination payload
ranking_out_ofIntegerProperty total used by that rank
is_sponsoredBooleanWhether the listing was a paid placement
positionIntegerPosition of the hotel in the result sequence
source_urlStringDestination page the hotel was found on
geo_idIntegerTripAdvisor destination identifier
Address and location
FieldTypeDescription
full_addressStringComplete formatted address
street_1StringPrimary street address
street_2StringSecondary street address
cityStringCity
stateStringState or region
postal_codeStringPostal code
countryStringCountry
latitudeNumberLatitude
longitudeNumberLongitude
parent_geo_nameStringParent destination name
neighborhoodsArrayNeighborhoods or areas containing the hotel
country_idIntegerTripAdvisor country identifier
iso_country_codeStringTwo-letter country code
Prices and offers
FieldTypeDescription
lowest_priceStringLowest displayed price, for example $154
offer_countIntegerOffers found for the hotel
available_offer_countIntegerOffers currently available
primary_offersArrayMain offers with provider, price, currency, base price, payment timing, and rate flags
secondary_offersArrayAdditional offers
price_rangeObjectPublished minimum and maximum price
price_range_usdObjectPublished minimum and maximum price in US dollars
Property details and media
FieldTypeDescription
accommodation_typeStringProperty type, for example Small Hotel
accommodation_categoryStringTripAdvisor accommodation category
star_rating_tag_idsArrayStar classification tag identifiers
amenitiesArrayHighlighted amenity names
amenity_detailsArrayAmenity names with tag identifiers and icons
hotel_descriptionStringProperty description or published summary
phoneStringTelephone number
emailStringEmail address when published
best_award_typeStringActive award type
best_award_yearIntegerActive award year
thumbnail_urlStringHotel photo URL at 1400 by 933 pixels
thumbnail_widthIntegerMaximum source image width
thumbnail_heightIntegerMaximum source image height
thumbnail_captionStringPhoto caption
thumbnail_langStringPhoto language code
merchandising_labelsArrayListing labels such as Sponsored
special_offerObjectPublished special offer
is_smb_or_kasmBooleanProperty account classification flag

How to use TripAdvisor Hotels Scraper

  1. Open the Actor in Apify Console.
  2. Paste a TripAdvisor Hotels destination URL, for example https://www.tripadvisor.com/Hotels-g293974-Istanbul-Hotels.html.
  3. Set how many hotels you want and the page cap.
  4. Choose a sort order, or leave the default.
  5. Run the Actor and open the dataset when it finishes.
  6. Download the dataset or connect it to Sheets, a webhook, or your own API.

Input Parameters

ParameterTypeRequiredDefaultDescription
startUrlsArrayNoIstanbul Hotels pageTripAdvisor Hotels destination URLs, up to 100 per run
destinationStringNo-TripAdvisor geo ID, for example 298184. Replaces startUrls and scrapes that single destination
sortingStringNoBEST_VALUEBEST_VALUE, POPULARITY, PRICE_LOW_TO_HIGH, or DISTANCE
results_wantedIntegerNo20Maximum hotels saved across all destinations
max_pagesIntegerNo5Page cap per destination. Each page holds up to 30 hotels
proxyConfigurationObjectNoApify ProxyProxy settings. Residential proxies reduce challenge frequency
How the two search inputs interact

startUrls and destination are alternative ways to choose what to scrape. When destination is filled in, the Actor scrapes that one destination and ignores the URL list. When destination is empty, every usable URL in startUrls is scraped in order.

A hotel page URL such as /Hotel_Review-g293974-d12345-... is converted to the destination list for the same city, because the listing data lives on the destination page.

Usage Examples

Collect the first hotels of a destination
{
  "startUrls": [
    "https://www.tripadvisor.com/Hotels-g293974-Istanbul-Hotels.html"
  ],
  "results_wanted": 20,
  "max_pages": 2
}
Collect several destinations in one run
{
  "startUrls": [
    "https://www.tripadvisor.com/Hotels-g187147-Paris-Ile_de_France-Hotels.html",
    "https://www.tripadvisor.com/Hotels-g298184-Tokyo-Tokyo_Prefecture_Kanto-Hotels.html"
  ],
  "results_wanted": 150,
  "max_pages": 4
}
Cheapest hotels first, using a geo ID only
{
  "destination": "298184",
  "sorting": "PRICE_LOW_TO_HIGH",
  "results_wanted": 60,
  "max_pages": 3
}
Larger run with residential proxies
{
  "startUrls": [
    "https://www.tripadvisor.com/Hotels-g60763-New_York_City_New_York-Hotels.html"
  ],
  "results_wanted": 300,
  "max_pages": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}

Sample Output

{
  "item_type": "hotel",
  "source_url": "https://www.tripadvisor.com/Hotels-g293974-Istanbul-Hotels.html",
  "geo_id": 293974,
  "position": 1,
  "hotel_result_key": "21034531:s:MzQ3MjkwMDA:4428aabb-2c5b-41f2-ab8a-1edc894eade0",
  "location_id": 21034531,
  "hotel_name": "World House Boutique Hotel Galata",
  "hotel_url": "https://www.tripadvisor.com/Hotel_Review-g293974-d21034531-Reviews-World_House_Boutique_Hotel_Galata-Istanbul.html",
  "is_sponsored": true,
  "rating": 4.5,
  "reviews_count": 368,
  "review_snippet": {
    "text": "They were incredibly kind, attentive, and made my birthday so special with a complimentary bottle of wine and a beautiful room upgrade.",
    "title": "SOLO BIRTHDAY TRIP",
    "rating": 5,
    "created_date": "2026-09-14",
    "reviewer_name": "Jacquetta Y",
    "review_url": "https://www.tripadvisor.com/ShowUserReviews-g293974-d21034531-r1077681360-World_House_Boutique_Hotel_Galata-Istanbul.html"
  },
  "ranking_type_text": "#8 of 1,249 B&Bs / Inns in Istanbul",
  "ranking_position": 172,
  "ranking_out_of": 5167,
  "accommodation_type": "Small Hotel",
  "accommodation_category": "BB",
  "star_rating_tag_ids": [
    9568
  ],
  "full_address": "Galip Dede Cd. No:85/A Şahkulu Mah., Istanbul 34421 Türkiye",
  "street_1": "Galip Dede Cd. No:85/A",
  "street_2": "Şahkulu Mah.",
  "city": "Istanbul",
  "postal_code": "34421",
  "country": "Türkiye",
  "latitude": 41.02651,
  "longitude": 28.97464,
  "parent_geo_name": "Istanbul",
  "neighborhoods": [
    "Beyoglu"
  ],
  "country_id": 293969,
  "iso_country_code": "TR",
  "lowest_price": "$154",
  "offer_count": 9,
  "available_offer_count": 9,
  "primary_offers": [
    {
      "availability": "AVAILABLE",
      "display_price": "$154",
      "base_price": 153.75,
      "currency": "USD",
      "provider": "Agoda.com",
      "pricing_mode": "BASE_PLUS_FEES",
      "payment_timing": "TIME_OF_BOOKING",
      "rooms_remaining": 1,
      "member_rate": false,
      "mobile_rate": false,
      "supplier_direct": false
    }
  ],
  "price_range": {
    "minimum": 143,
    "maximum": 413
  },
  "amenities": [
    "Air conditioning",
    "Airport transportation",
    "Family Friendly",
    "Free Wifi"
  ],
  "hotel_description": "Boutique hotel near Istanbul's Galata Tower and historic sites. Features stylish design, stunning views, and excellent service. Close to shops, restaurants, and public transport for easy city exploration.",
  "phone": "+90 212 593 55 20",
  "best_award_type": "COE",
  "best_award_year": 2026,
  "thumbnail_url": "https://dynamic-media-cdn.tripadvisor.com/media/photo-o/2e/29/c7/55/caption.jpg?w=1400&h=933&s=1",
  "thumbnail_width": 5622,
  "thumbnail_height": 3752,
  "thumbnail_lang": "en",
  "merchandising_labels": [
    "Sponsored"
  ]
}

Tips for Best Results

  • Use a destination page URL. City, region, and country listing pages work; a single hotel page is converted to its city list.
  • Each page adds about 30 hotels. To get 100 hotels, set max_pages to 4 or more.
  • Sponsored hotels repeat between pages, so deduplication removes some records.
  • results_wanted is a hard cap. The Actor stops as soon as it reaches the number.
  • Keep the default proxy setting. TripAdvisor challenges repeated requests from a single address, and the Actor switches to a new proxy session when that happens.
  • For large runs or frequent schedules, use residential proxies.
  • Prices follow the stay dates TripAdvisor selects for the destination page. The Actor does not send custom check-in or check-out dates, so a price is a reference point rather than a quote for your travel dates.
  • TripAdvisor sometimes serves a page whose partner offers did not load. The Actor requests that page once more, up to three times per destination, to recover prices.
  • PRICE_LOW_TO_HIGH orders hotels by TripAdvisor's price index. That view usually returns no live partner offers, so lowest_price and primary_offers are often empty while price_range is still filled. Use BEST_VALUE or DISTANCE when you need live prices.
  • If a field is missing for one hotel, check another record before assuming a failure. Hotels publish different amounts of data.

Integrations

  • Google Sheets - Import the dataset for quick comparison and sharing.
  • Webhooks - Trigger your own pipeline when a run finishes.
  • Make or Zapier - Send new hotel records to a CRM, database, or notification flow.
  • Apify API - Read datasets programmatically from your application.
  • CSV, Excel, JSON, XML - Download the dataset in any format Apify supports.

Frequently Asked Questions

How many hotels can I collect per destination?

Each result page holds about 30 hotels, plus sponsored listings that repeat on later pages. The Actor follows further pages while max_pages allows, and stops at results_wanted. A destination with 1,200 hotels needs max_pages of 40 or more.

Can I set check-in and check-out dates?

No. TripAdvisor's destination pages ignore date parameters from the URL and always report prices for the stay window it picks. The Actor reports those prices as published instead of showing a price for dates you did not request.

Why is lowest_price missing for some hotels?

TripAdvisor shows a price only when a partner returns an available offer. Two things can happen: one hotel has no live offer, or a whole page loads without partner offers. For the second case the Actor requests the page again, up to three times per destination. If offers still do not appear, records keep offer_count, price_range, and price_range_usd without lowest_price.

Can I scrape several cities in one run?

Yes. Add up to 100 destination URLs to startUrls. The Actor processes them in order and applies results_wanted across the whole run.

Does it collect full reviews?

No. Each hotel includes one published review snippet with its title, rating, date, reviewer, and URL. Full review pages are a separate dataset.

What happens when TripAdvisor shows a challenge page?

The Actor opens a new proxy session and retries. If all retries fail for a page, it logs a warning and moves to the next destination instead of writing incomplete records.

Can I export the data to CSV or Excel?

Yes. Apify datasets can be downloaded as CSV, Excel, JSON, XML, and HTML from the Console or through the API.

Can I run this Actor on a schedule?

Yes. Set a schedule in Apify Console to refresh a destination daily, weekly, or monthly, then compare snapshots over time.

Is it legal to collect TripAdvisor hotel data?

Collecting publicly available data can be legal, but you are responsible for following applicable laws, TripAdvisor's terms, and privacy rules. Use the data for research and analysis, not to republish reviews as your own content.

Support

Report a problem or request a field through the Issues tab on the Actor page. Include the destination URL and the run ID so the failure can be reproduced.

Legal Notice

This Actor collects publicly available hotel listing data. It is not affiliated with TripAdvisor. Users are responsible for how the collected data is used and for complying with applicable laws and website terms.

More Actors from the same publisher.

View all from @shahidirfan