Trip.com Hotels Scraper avatar

Trip.com Hotels Scraper

Pricing

from $0.80 / 1,000 results

Go to Apify Store
Trip.com Hotels Scraper

Trip.com Hotels Scraper

Extract real-time hotel listings, prices, reviews & availability from Trip.com. Perfect for travel research, price monitoring & competitive analysis. Get structured data instantly.

Pricing

from $0.80 / 1,000 results

Rating

5.0

(5)

Developer

Shahid Irfan

Shahid Irfan

Maintained by Community

Actor stats

3

Bookmarked

66

Total users

11

Monthly active users

11 days ago

Last modified

Features

Limited permissions

Share

What does Trip.com Hotels Scraper do?

Trip.com Hotels Scraper collects hotel search results from Trip.com. Give it a public Trip.com hotel search URL and it reads the destination, stay dates, guests, rooms, locale, and currency from that URL. Each dataset item holds hotel identity, ratings, location, images, a headline room offer, price, cancellation terms, and promotion labels.

Use the results for hotel shortlists, price checks, destination research, or scheduled snapshots. Download the dataset as JSON, CSV, Excel, or XML, or pass it to another tool through Apify integrations.

Why use Trip.com Hotels Scraper?

  • Collect hotel names, star ratings, review scores, addresses, and room details without copying them by hand.
  • Compare displayed prices and currency for the same destination and stay.
  • Repeat a search on a schedule and compare snapshots over time.
  • Keep one record per hotel, with the first room offer attached to it.
  • Set a result limit and a page cap for each run.
  • Continue through stale input. If the search URL has past dates, a missing stay window, or a checkout date before check-in, the Actor repairs the stay before it collects data.
  • Recover from temporary rejections. The Actor retries a failed request before it reports an error, and it logs a short warning when it adjusts dates or raises the page allowance.

What data can you extract from Trip.com?

The Actor saves one dataset item per hotel. Room and price fields describe the headline room offer returned for that hotel. Fields that Trip.com does not publish for a listing are left out of the record.

FieldTypeDescription
hotelIdStringTrip.com hotel identifier
masterHotelIdStringParent hotel identifier when Trip.com supplies one
hotelTypeStringInternal hotel type such as NORMAL
hotelNameStringDisplayed hotel name
hotelNameEnStringEnglish hotel name when it differs
hotelCategoryStringCategory such as hotel or apartment
starRatingNumberHotel star category
reviewScoreNumberHeadline review score
reviewDescriptionStringReview label such as Very good
reviewCountNumberParsed number of reviews
reviewCountTextStringReview count as shown on Trip.com
featuredReviewStringShort featured review sentence
reviewSubScoresArrayCategory scores for cleanliness, location, service, and amenities
cityIdNumberDestination city identifier
cityNameStringDestination city name
countryIdNumberCountry identifier
provinceIdNumberProvince identifier
addressStringHotel area or address label
positionDescriptionStringLocation summary from Trip.com
positionHighlightsArrayNearby landmarks or districts
zoneNamesArrayDestination zones for the hotel
latitudeNumberHotel latitude
longitudeNumberHotel longitude
imageUrlStringMain hotel image
imageUrlsArrayAdditional hotel images
hotelDetailUrlStringDirect Trip.com hotel detail page
roomIdStringRoom offer identifier
roomNameStringHeadline room name
roomTypeStringRoom type code
roomQuantityNumberRooms included in the offer
displayPriceStringPrice as formatted by Trip.com
priceNumberNumeric price value
currencyStringPrice currency code
originalPriceNumberPrice before a displayed discount
originalDisplayPriceStringOriginal price as formatted by Trip.com
priceExplanationStringTotal stay price and tax note
payTypeNumberPayment type code for the offer
checkInStringCheck-in date in compact form, such as 20270310
checkOutStringCheck-out date in compact form, such as 20270312
freeCancellationBooleanWhether the offer shows free cancellation
advantageTagsArrayOffer advantages such as free cancellation
promotionTagsArrayPromotion labels
discountTagsArrayDiscount labels
encourageTagsArrayUrgency labels such as recent booking activity
resultPageNumberResult page the hotel came from
positionOnPageNumberPosition in the full result list
searchUrlStringSearch URL used for the run, with repaired dates
fetchedAtStringISO timestamp when the record was saved

The reviewSubScores array contains objects with category and score fields.

How to scrape Trip.com hotel data

  1. Open Trip.com and search for a destination, stay dates, guests, and rooms.
  2. Set the currency you want to see in the results.
  3. Copy the full hotel search URL from the address bar.
  4. Paste the URL into startUrl on this Actor.
  5. Optionally set location, check_in, check_out, rooms, children, or sort. Each value replaces the matching URL value. Leave a field empty to keep the URL value.
  6. Set results_wanted and, if needed, max_pages or proxyConfiguration.
  7. Run the Actor and check the dataset preview.
  8. Download the dataset or connect it to your workflow.

The URL must include a city identifier such as city=228 or a city slug in the path, unless you supply location. If the stay dates are missing, in the past, or in the wrong order, the Actor moves them to the next valid window and writes a warning to the run log.

Input Parameters

ParameterTypeRequiredDefaultDescription
startUrlStringNoTokyo search URLComplete Trip.com hotel search URL. It supplies the destination, dates, guests, rooms, locale, and currency. The default is a Tokyo search, so replace it for other destinations.
locationStringNoFrom URLCity name or Trip.com city ID. Overrides the city in the URL. Examples: Tokyo, Osaka, London, New York, 228.
check_inStringNoFrom URLCheck-in date in YYYY-MM-DD format. Past or invalid dates move to the next valid day.
check_outStringNoFrom URLCheck-out date in YYYY-MM-DD format. Missing or reversed dates are repaired.
roomsIntegerNoFrom URLNumber of rooms to price. Sent to Trip.com as the room quantity.
childrenIntegerNoFrom URLNumber of children. Trip.com receives one child age of 8 per child.
sortStringNorecommendedResult order. Accepted values are listed below.
results_wantedIntegerNo20Maximum number of unique hotel records to save.
max_pagesIntegerNo3Maximum number of result pages to request. The Actor raises this value when more pages are needed to reach results_wanted.
proxyConfigurationObjectNoNoneOptional Apify Proxy settings for repeated runs or a destination that needs a different network location.

Accepted sort values: recommended, price_low, price_high, top_reviewed, star_rating, distance, and distance_car.

Trip.com search settings come from startUrl. Any supplied override replaces only the matching field. The number of adults stays in the URL, because Trip.com's hotel list response is priced per room and does not accept a separate adult count.

Usage Examples

Collect 20 hotels

Collect the first 20 hotels for a Tokyo stay in US dollars:

{
"startUrl": "https://us.trip.com/hotels/list?city=228&provinceId=0&countryId=78&checkIn=2027-03-10&checkOut=2027-03-12&lat=0&lon=0&districtId=0&barCurr=USD&searchType=CT&searchValue=undefined&crn=1&adult=2&children=0&searchBoxArg=t&ctm_ref=ix_sb_dl&travelPurpose=0&domestic=false",
"results_wanted": 20
}

Override the destination, dates, rooms, and sort

Use the same base URL but search Osaka for a different stay, with two rooms, one child, and the lowest price first:

{
"startUrl": "https://us.trip.com/hotels/list?city=228&provinceId=0&countryId=78&checkIn=2027-03-10&checkOut=2027-03-12&lat=0&lon=0&districtId=0&barCurr=USD&searchType=CT&searchValue=undefined&crn=1&adult=2&children=0&searchBoxArg=t&ctm_ref=ix_sb_dl&travelPurpose=0&domestic=false",
"location": "Osaka",
"check_in": "2027-12-01",
"check_out": "2027-12-04",
"rooms": 2,
"children": 1,
"sort": "price_low",
"results_wanted": 40,
"max_pages": 2
}

Collect 60 hotels across pages

Request a larger set. The Actor raises the page allowance from 2 to 3 because 60 records need more than two pages:

{
"startUrl": "https://us.trip.com/hotels/list?city=228&provinceId=0&countryId=78&checkIn=2027-03-10&checkOut=2027-03-12&lat=0&lon=0&districtId=0&barCurr=USD&searchType=CT&searchValue=undefined&crn=1&adult=2&children=0&searchBoxArg=t&ctm_ref=ix_sb_dl&travelPurpose=0&domestic=false",
"results_wanted": 60,
"max_pages": 2
}

Use a proxy and a different locale

Run the same search through the UK site with pounds and Apify Proxy:

{
"startUrl": "https://uk.trip.com/hotels/list?city=228&provinceId=0&countryId=78&checkIn=2027-04-05&checkOut=2027-04-08&lat=0&lon=0&districtId=0&barCurr=GBP&searchType=CT&searchValue=undefined&crn=2&adult=2&children=0&searchBoxArg=t&ctm_ref=ix_sb_dl&travelPurpose=0&domestic=false",
"results_wanted": 40,
"max_pages": 3,
"proxyConfiguration": {
"useApifyProxy": true
}
}

Output Data

Every saved item is one hotel record. Empty strings, null values, empty arrays, and empty objects are removed before saving.

Sample Output

One representative dataset item. Some fields are omitted when Trip.com does not return them for a listing.

{
"hotelId": "49479765",
"masterHotelId": "49479765",
"hotelType": "NORMAL",
"hotelName": "HOTEL TAVINOS Asakusa",
"hotelNameEn": "HOTEL TAVINOS Asakusa",
"hotelCategory": "Hotel",
"starRating": 3,
"reviewScore": 8.9,
"reviewDescription": "Very good",
"reviewCount": 2045,
"reviewCountText": "2,045 reviews",
"featuredReview": "A standard Japanese-style hotel, featuring clean and elegant design.",
"reviewSubScores": [
{
"category": "Cleanliness",
"score": 9
},
{
"category": "Amenities",
"score": 8.7
},
{
"category": "Location",
"score": 9.1
},
{
"category": "Service",
"score": 9
}
],
"cityId": 228,
"cityName": "Tokyo",
"countryId": 78,
"address": "Ueno/Asakusa",
"positionDescription": "Asakusa | Near Sensō-ji",
"positionHighlights": ["Asakusa", "Near Sensō-ji"],
"zoneNames": ["Ueno/Asakusa"],
"latitude": 35.716359,
"longitude": 139.792865,
"imageUrl": "https://ak-d.tripcdn.com/images/0206e120005amovqeF39F_R_600_600_R5_D.jpg",
"hotelDetailUrl": "https://us.trip.com/hotels/detail/?hotelId=49479765",
"roomId": "2276187429",
"roomName": "Hollywood Twin Room",
"roomType": "saleRoom",
"roomQuantity": 1,
"displayPrice": "$58",
"price": 58,
"currency": "USD",
"originalPrice": 61,
"originalDisplayPrice": "$61",
"priceExplanation": "Total price: $127\n1 room × 2 nights incl. taxes & fees\nAdditional charges may apply",
"payType": 1,
"checkIn": "20270310",
"checkOut": "20270312",
"freeCancellation": true,
"advantageTags": ["Free Cancellation"],
"promotionTags": ["Special Discount"],
"discountTags": ["5% off"],
"encourageTags": ["Last booked 1 hr ago"],
"resultPage": 1,
"positionOnPage": 1,
"searchUrl": "https://us.trip.com/hotels/list?city=228&provinceId=0&countryId=78&checkIn=2027-03-10&checkOut=2027-03-12&lat=0&lon=0&districtId=0&barCurr=USD&searchType=CT&searchValue=undefined&crn=1&adult=2&children=0&searchBoxArg=t&ctm_ref=ix_sb_dl&travelPurpose=0&domestic=false",
"fetchedAt": "2026-11-03T06:58:00.000Z"
}

Tips for best results

  • Copy the complete URL from Trip.com instead of typing one by hand. The city and country identifiers matter.
  • Use location to switch cities without editing the URL. City names work, and a numeric Trip.com city ID is used as-is.
  • Use future dates. Stale dates in the URL or in check_in and check_out are moved forward automatically, but the repaired stay may not match the one you wanted.
  • Start with results_wanted: 20 before a larger run.
  • Keep barCurr the same across comparable searches so prices stay comparable.
  • Use sort for a repeatable order. price_low and price_high are useful for price snapshots.
  • Check the dataset preview before scheduling a large run.
  • Reuse the same URL and result limit for price snapshots so each run covers the same search.
  • If a destination returns fewer hotels than expected, raise results_wanted and max_pages.

Integrations and export formats

  • Google Sheets - Compare hotel prices, ratings, and locations in a spreadsheet.
  • Airtable - Build a searchable hotel database.
  • Make or Zapier - Send new hotel records into a workflow.
  • Webhooks - Start another process when a run finishes.
  • Apify API - Read datasets and start runs from your own application.
FormatUseful for
JSONAPIs, databases, and data pipelines
CSVSpreadsheet analysis and simple imports
ExcelTravel reporting and operations
XMLSystem-to-system exchange

Frequently Asked Questions

Do I need a Trip.com hotel search URL?

Yes. startUrl supplies the locale, currency, and base search context. The Actor cannot start without it, although it does ship with a Tokyo default. You can override the city, dates, rooms, children, and sort without editing the URL.

Can I change the destination without editing the URL?

Yes. Set location to a city name such as Osaka or a numeric Trip.com city ID such as 219. The Actor resolves the name to a city ID and replaces the city in the URL. An ambiguous name is rejected with a clear error instead of using the wrong city.

Can I sort the results?

Yes. Set sort to recommended, price_low, price_high, top_reviewed, star_rating, distance, or distance_car. The order comes from Trip.com's own sort filters.

Can I set the number of adults?

Trip.com's hotel list is priced per room and does not accept an adult count in the list request. Use rooms to control the number of rooms and children for children. The adult count stays in the search URL.

What happens if my stay dates are in the past?

The Actor moves the check-in date to tomorrow and keeps the original number of nights. If check-out is missing or not after check-in, it sets a two-night stay. The same repair applies to check_in and check_out when you supply them. The run log records the change.

Can I collect prices in different currencies?

Yes. Set barCurr in the search URL to the currency you want, then run the Actor. The URL also sets the locale and domain, so uk.trip.com with GBP returns pound prices.

Does the Actor return one record per room?

No. It returns one record per hotel and attaches the headline room offer. Room name, quantity, price, payment type, and offer tags describe that first offer.

How many hotels can I collect?

Set results_wanted to the number of unique hotel records you want. max_pages limits pagination, but the Actor raises it when the result target needs more pages.

Why are some fields missing?

Trip.com does not publish every field for every hotel or room. Empty values are removed from each record, so a missing field is usually a source gap rather than a failed run.

Can I run this Actor on a schedule?

Yes. Create a schedule in Apify Console and reuse the same input to collect regular price and availability snapshots.

Does the Actor need a proxy?

Not for a normal run. Add proxyConfiguration if repeated runs are limited or if you need a specific network location.

You are responsible for following Trip.com terms, applicable laws, privacy rules, and any limits on how you use the data. Collect only data you are allowed to access and use.

For wider hotel research, these Actors from Shahid Irfan cover other booking sites:

Support

For bugs, missing fields, or feature requests, use the Issues tab on the Actor page. Include the input you used and a run link when possible.

This Actor is intended for legitimate travel research, accommodation comparison, monitoring, and automation using publicly accessible Trip.com pages. Users are responsible for their collection activity, data handling, and compliance with Trip.com terms and applicable laws.