Trip.com Hotels Scraper
Pricing
from $0.80 / 1,000 results
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
Maintained by CommunityActor stats
3
Bookmarked
66
Total users
11
Monthly active users
11 days ago
Last modified
Categories
Features
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.
| Field | Type | Description |
|---|---|---|
hotelId | String | Trip.com hotel identifier |
masterHotelId | String | Parent hotel identifier when Trip.com supplies one |
hotelType | String | Internal hotel type such as NORMAL |
hotelName | String | Displayed hotel name |
hotelNameEn | String | English hotel name when it differs |
hotelCategory | String | Category such as hotel or apartment |
starRating | Number | Hotel star category |
reviewScore | Number | Headline review score |
reviewDescription | String | Review label such as Very good |
reviewCount | Number | Parsed number of reviews |
reviewCountText | String | Review count as shown on Trip.com |
featuredReview | String | Short featured review sentence |
reviewSubScores | Array | Category scores for cleanliness, location, service, and amenities |
cityId | Number | Destination city identifier |
cityName | String | Destination city name |
countryId | Number | Country identifier |
provinceId | Number | Province identifier |
address | String | Hotel area or address label |
positionDescription | String | Location summary from Trip.com |
positionHighlights | Array | Nearby landmarks or districts |
zoneNames | Array | Destination zones for the hotel |
latitude | Number | Hotel latitude |
longitude | Number | Hotel longitude |
imageUrl | String | Main hotel image |
imageUrls | Array | Additional hotel images |
hotelDetailUrl | String | Direct Trip.com hotel detail page |
roomId | String | Room offer identifier |
roomName | String | Headline room name |
roomType | String | Room type code |
roomQuantity | Number | Rooms included in the offer |
displayPrice | String | Price as formatted by Trip.com |
price | Number | Numeric price value |
currency | String | Price currency code |
originalPrice | Number | Price before a displayed discount |
originalDisplayPrice | String | Original price as formatted by Trip.com |
priceExplanation | String | Total stay price and tax note |
payType | Number | Payment type code for the offer |
checkIn | String | Check-in date in compact form, such as 20270310 |
checkOut | String | Check-out date in compact form, such as 20270312 |
freeCancellation | Boolean | Whether the offer shows free cancellation |
advantageTags | Array | Offer advantages such as free cancellation |
promotionTags | Array | Promotion labels |
discountTags | Array | Discount labels |
encourageTags | Array | Urgency labels such as recent booking activity |
resultPage | Number | Result page the hotel came from |
positionOnPage | Number | Position in the full result list |
searchUrl | String | Search URL used for the run, with repaired dates |
fetchedAt | String | ISO timestamp when the record was saved |
The reviewSubScores array contains objects with category and score fields.
How to scrape Trip.com hotel data
- Open Trip.com and search for a destination, stay dates, guests, and rooms.
- Set the currency you want to see in the results.
- Copy the full hotel search URL from the address bar.
- Paste the URL into
startUrlon this Actor. - Optionally set
location,check_in,check_out,rooms,children, orsort. Each value replaces the matching URL value. Leave a field empty to keep the URL value. - Set
results_wantedand, if needed,max_pagesorproxyConfiguration. - Run the Actor and check the dataset preview.
- 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
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
startUrl | String | No | Tokyo search URL | Complete 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. |
location | String | No | From URL | City name or Trip.com city ID. Overrides the city in the URL. Examples: Tokyo, Osaka, London, New York, 228. |
check_in | String | No | From URL | Check-in date in YYYY-MM-DD format. Past or invalid dates move to the next valid day. |
check_out | String | No | From URL | Check-out date in YYYY-MM-DD format. Missing or reversed dates are repaired. |
rooms | Integer | No | From URL | Number of rooms to price. Sent to Trip.com as the room quantity. |
children | Integer | No | From URL | Number of children. Trip.com receives one child age of 8 per child. |
sort | String | No | recommended | Result order. Accepted values are listed below. |
results_wanted | Integer | No | 20 | Maximum number of unique hotel records to save. |
max_pages | Integer | No | 3 | Maximum number of result pages to request. The Actor raises this value when more pages are needed to reach results_wanted. |
proxyConfiguration | Object | No | None | Optional 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
locationto 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_inandcheck_outare moved forward automatically, but the repaired stay may not match the one you wanted. - Start with
results_wanted: 20before a larger run. - Keep
barCurrthe same across comparable searches so prices stay comparable. - Use
sortfor a repeatable order.price_lowandprice_highare 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_wantedandmax_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.
| Format | Useful for |
|---|---|
| JSON | APIs, databases, and data pipelines |
| CSV | Spreadsheet analysis and simple imports |
| Excel | Travel reporting and operations |
| XML | System-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.
Is it legal to collect Trip.com data?
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.
Related Actors
For wider hotel research, these Actors from Shahid Irfan cover other booking sites:
- Tripadvisor Hotels Scraper - Collect Tripadvisor hotel listings, ratings, review counts, and location data.
- Agoda Hotels Scraper - Collect Agoda hotel prices, reviews, and room offers.
- Booking.com Scraper - Collect Booking.com hotel listings, prices, reviews, and ratings.
- Expedia Hotels Scraper - Collect Expedia hotel and accommodation data.
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.
Legal Notice
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.