๐Ÿ”ฅ Trip.com Hotels Scraper โ€” Prices & Reviews avatar

๐Ÿ”ฅ Trip.com Hotels Scraper โ€” Prices & Reviews

Pricing

$20.00/month + usage

Go to Apify Store
๐Ÿ”ฅ Trip.com Hotels Scraper โ€” Prices & Reviews

๐Ÿ”ฅ Trip.com Hotels Scraper โ€” Prices & Reviews

๐Ÿš€ Scrape Trip.com hotels by city name or search URL: prices, star ratings, guest scores, reviews, rooms, facilities, photos, addresses. Deep pagination โ€” ask for 1,000, get 1,000. ๐Ÿค– LLM- and agent-optimized: one uniform JSON row per hotel, priced per hotel, ready for RAG and MCP pipelines.

Pricing

$20.00/month + usage

Rating

0.0

(0)

Developer

Bebity

Bebity

Maintained by Community

Actor stats

4

Bookmarked

81

Total users

0

Monthly active users

4 days ago

Last modified

Share

Trip.com Hotels Scraper

Trip.com Hotels Scraper โ€” extract hotel names, prices, guest scores, rooms and photos from Trip.com

Extract hotel names, prices, star ratings, guest review scores, photos, rooms, facilities and nearby landmarks from trip.com โ€” no login, no scraping code to write. Paste a Trip.com search URL, or just type a city name and let the scraper build the search for you. Results arrive as clean JSON, one row per hotel, downloadable as JSON, CSV, Excel, HTML or XML.


๐Ÿค” What does Trip.com Hotels Scraper do?

This actor turns any Trip.com hotel search into a structured dataset. You give it any combination of Trip.com search-result URLs, hotel detail URLs, bare hotel IDs, or a destination name plus filters โ€” and it returns hotel names, star ratings, guest scores, review counts, nightly and total prices, photos, and location data.

Turn on Scrape detail pages and each hotel gets a second fetch that enriches the row with room types and rates, facilities, amenities, the full photo gallery, the hotel's own FAQ, and nearby points of interest.

What makes it different:

  • Deep pagination that actually reaches your limit. Trip.com's "load more" is gated behind a signed request token, so a destination search drives a stealth browser to collect results, then hands every hotel back to the fast HTTP path. Ask for 100 hotels and you get 100.
  • HTTP-fast for small runs. Below 20 items the browser never starts โ€” a lightweight HTTP client with browser-grade TLS fingerprinting handles the whole run in seconds. Detail pages always use this path, whatever the size.
  • No duplicate rows. Results are de-duplicated by hotelId across every source, so overlapping searches never spend your item budget twice on the same hotel.
  • Nothing fails silently. Every timeout, block, unresolved city or parse error becomes a visible failed: true row with a machine-readable reason โ€” never a crashed run and never a silently short dataset.
  • You only pay for what parses. Failed rows are never billed.

๐Ÿ“ฆ What data can you extract from Trip.com?

Data pointExampleAvailable in
Hotel name + Trip.com hotel IDRadisson Collection Hyland Shanghai ยท 375477Both modes
Star rating5Both modes
Guest score, label and review count8.7 ยท Excellent ยท 1842 reviewsBoth modes
Nightly price + total stay price + currency179 / 537 USDBoth modes
Primary listing photoimage URLBoth modes
City and countryShanghai, ChinaBoth modes
Landmarks and amenity tags on the cardThe Bund (0.6 km), Free WiFiBoth modes
Trip.com award labelTrip.com Choice Award 2025Both modes
Long-form hotel descriptionfull marketing copyDetail pages
Structured addressstreet, region, postal codeDetail pages
Room types and ratesname, price, breakfast, cancellation policy, occupancyDetail pages
Facilities and amenitiesOutdoor pool, Spa, Air conditioning, MinibarDetail pages
Full photo galleryevery gallery image URLDetail pages
Nearby points of interestThe Bund โ€” 0.6 km, Metro โ€” 0.2 kmDetail pages
Hotel FAQquestion / answer pairsDetail pages

Every row uses the same shape in both modes โ€” fields that need a detail page are simply absent in lite mode. Your downstream code never has to branch on which mode produced the row.


๐Ÿ‘ค Who is this Trip.com scraper for?

  • Travel aggregators comparing Trip.com inventory against Booking.com, Agoda or Expedia to find gaps and pricing discrepancies.
  • Hotel rate analysts who need a scheduled snapshot of prices, scores and availability for a destination.
  • Revenue managers benchmarking their property against local competitors on price and guest score.
  • ML and data engineers building structured hotel-attribute datasets from real listings.
  • Lead-gen teams selling to hospitality discovering properties newly added to a city.
  • Travel content publishers who need descriptions, photos and FAQ copy to seed review pages or a CMS.

๐Ÿš€ How to scrape Trip.com hotels

  1. Open Trip.com Hotels Scraper on Apify Store and click Try for free.
  2. Either type a city into Destination (for example Shanghai), or switch to Search by URL and paste a Trip.com search URL straight from your browser.
  3. Optionally set your dates, guests and filters โ€” or leave everything at its default.
  4. Set Max items low (say 10) for your first run to confirm the results look right.
  5. Click Save & Start.
  6. When the run finishes, open the Dataset tab and export as JSON, CSV, Excel, HTML or XML โ€” or pull it straight from the Apify API.

Minimal input to get 10 hotels in Shanghai:

{
"searchMode": "byUrls",
"urls": ["https://us.trip.com/hotels/shanghai-hotels-list-2/"],
"scrapeDetails": false,
"maxItems": 10
}

Expected output: 10 hotel rows in roughly 5 seconds, each with hotelId, name, stars, score, priceMain and detailUrl.


๐Ÿ“ฅ Example input

A filter-based search โ€” 4- and 5-star hotels in Bangkok for 2 adults, 3 nights, cheapest first:

{
"searchMode": "byFilters",
"destination": "Bangkok",
"checkIn": "2026-09-15",
"checkOut": "2026-09-18",
"adults": 2,
"rooms": 1,
"sortBy": "priceAsc",
"stars": [4, 5],
"scrapeDetails": false,
"maxItems": 30,
"currency": "USD",
"locale": "en-US"
}

๐Ÿ“ค Example output

Successful lite row (search results only, scrapeDetails: false):

{
"hotelId": 375477,
"name": "Radisson Collection Hyland Shanghai",
"detailUrl": "https://us.trip.com/hotels/shanghai-hotel-detail-375477/radisson-collection-hyland-shanghai/",
"city": "Shanghai",
"country": "China",
"stars": 5,
"score": 8.7,
"scoreLabel": "Excellent",
"reviewCount": 1842,
"primaryPhotoUrl": "https://ak-d.tripcdn.com/images/hotel/375477/exterior.jpg",
"priceMain": "179",
"priceTotal": "537",
"currency": "USD",
"landmarks": ["The Bund (0.6 km)", "Nanjing Road (0.4 km)"],
"tags": ["Free WiFi", "Pool", "Breakfast available"],
"scrapedAt": "2026-05-03T05:00:00.000Z"
}

Successful rich row (scrapeDetails: true, selected fields shown):

{
"hotelId": 375477,
"name": "Radisson Collection Hyland Shanghai",
"detailUrl": "https://us.trip.com/hotels/shanghai-hotel-detail-375477/radisson-collection-hyland-shanghai/",
"city": "Shanghai",
"country": "China",
"stars": 5,
"score": 8.7,
"description": "A landmark 5-star hotel on Nanjing Road East, steps from The Bund...",
"fullAddress": {
"street": "No. 505 Jiujiang Road, Huangpu District, Shanghai, 200001, China",
"region": "Shanghai",
"postalCode": "200001"
},
"priceRange": "$$$",
"rooms": [
{
"name": "Business Twin Suite",
"occupancy": 2,
"photoUrl": "https://aw-d.tripcdn.com/images/1mc3b12000bmezgn2BA83.jpg"
}
],
"facilities": ["Outdoor pool", "Fitness centre", "Spa", "Business centre"],
"amenities": [{ "category": "Room", "items": ["Air conditioning", "Minibar", "Safe"] }],
"photos": [
"https://ak-d.tripcdn.com/images/hotel/375477/photo1.jpg",
"https://ak-d.tripcdn.com/images/hotel/375477/photo2.jpg"
],
"surroundings": [
{ "type": "Landmark", "name": "The Bund", "distance": "0.6 km" },
{ "type": "Metro", "name": "Nanjing Road East Station", "distance": "0.2 km" }
],
"faq": [
{
"question": "Is there parking at Radisson Collection Hyland Shanghai?",
"answer": "Yes, the hotel offers valet parking at CNY 120 per day."
}
],
"scrapedAt": "2026-05-03T05:00:00.000Z"
}

Failed row (destination could not be resolved):

{
"failed": true,
"reason": "destination-unresolved",
"inputUrl": "destination:Springfield",
"error": "Autocomplete returned 0 candidates for 'Springfield' โ€” too ambiguous.",
"scrapedAt": "2026-05-03T05:00:00.000Z"
}

โš™๏ธ Input parameters

Every field below is also documented in the Input tab, with tooltips. Click any ? icon there for format details and examples.

Top-level (always relevant)

FieldTypeDefaultDescription
searchMode"byFilters" | "byUrls""byFilters"Choose how the actor finds hotels. byFilters โ€” pick a destination + filters and the actor builds the Trip.com search URL for you. byUrls โ€” paste Trip.com URLs you've already crafted in your browser.
urlsstring[][]Used only when searchMode = byUrls. Any combination of: SEO landing URLs (us.trip.com/hotels/{slug}-hotels-list-{cityId}/), interactive SERPs with filters (www.trip.com/hotels/list?cityId=N&...&listFilters=...), hotel detail URLs, or bare hotel IDs.
scrapeDetailsbooleanfalseFetch each hotel's detail page and enrich the row with rooms, facilities, amenities, photos, FAQ, surroundings. Also unlocks deep pagination โ€” see the Limitations section. About 10ร— more expensive than lite mode.
maxItemsinteger100Stop after this many hotels are scraped. Set low (e.g. 5) for a first test run.

๐ŸŽฏ Where & when (used when searchMode = byFilters)

FieldTypeDefaultDescription
destinationstringโ€”City name (Paris), numeric Trip.com city ID (192), or a Trip.com SERP URL. Ambiguous names produce a destination-unresolved failed row.
checkInstringโ€”Check-in date (YYYY-MM-DD). Must be today or later.
checkOutstringโ€”Check-out date (YYYY-MM-DD). Must be at least 1 day after checkIn.
adultsinteger2Number of adult guests (1โ€“30).
childreninteger0Number of child guests. If > 0, fill childrenAges too.
childrenAgesinteger[][]One age per child (0โ€“17). Required when children > 0.
roomsinteger1Number of rooms (1โ€“30).

๐Ÿ” Filters (used when searchMode = byFilters, applied server-side)

FieldTypeDefaultDescription
sortBy"recommended" | "topReviewed" | "priceAsc" | "priceDesc" | "starsDesc""recommended"Sort order. Maps to Trip.com's "Trip.com recommended", "Top reviewed", "Lowest price (incl. tax)", "Highest price", "Star rating (high to low)".
starsinteger[][]Multi-select hotel stars (1โ€“5). Empty = no star filter.
priceMinintegerโ€”Minimum price per room per night (in selected currency, excl. taxes & fees).
priceMaxintegerโ€”Maximum price per room per night (in selected currency, excl. taxes & fees).
minScore"6" | "7" | "8"โ€”Minimum guest review score, picked from a dropdown. Trip.com exposes 3 thresholds: Pleasant 6+, Good 7+, Very Good 8+. Numbers are accepted too if you call the API directly.
propertyType("Hotels" | "HomesAndApts" | "Hostels")[][]Property type buckets. Hotels includes resorts; HomesAndApts includes apartments and villas; Hostels includes inns.
mealPlan"any" | "breakfast" | "dinner" | "breakfastDinner""any"Meal plan included in the rate.
freeCancellationbooleanfalseRestrict to properties offering free cancellation.
paymentOption"any" | "prepayOnline" | "payLater" | "payAtHotel""any"Restrict to properties offering the chosen payment terms.

๐ŸŒ Localization

FieldTypeDefaultDescription
currencystringUSDCurrency for price fields. One of: USD, EUR, GBP, JPY, AUD, CAD, NZD, CHF, CNY, HKD, SGD, THB, KRW, MYR, INR, BRL, MXN.
localestringen-USLocale for content language. One of: en-US, en-GB, fr-FR, de-DE, es-ES, it-IT, pt-PT, ja-JP, ko-KR, zh-CN, zh-HK, th-TH, vi-VN.

๐Ÿ”ง Advanced

FieldTypeDefaultDescription
proxyConfigurationobjectApify Residential (US)Apify proxy settings. Defaults to residential US proxies, which are required for reliable Trip.com access. Only change this if you have a specific geo requirement โ€” see FAQ below.

๐Ÿ“‹ Output schema

Every successful row is a HotelRow. Every failure is a FailedRow. Download either as JSON, CSV, Excel, HTML or XML from the Dataset tab, or fetch them through the API.

The dataset ships with two built-in views: overview (successful hotels) and failed_items (everything that failed, with its reason). One click switches between them.

HotelRow fields

FieldTypeAvailabilityDescription
hotelIdnumberAlwaysTrip.com's numeric hotel identifier.
namestringAlwaysHotel display name as shown on Trip.com.
detailUrlstringAlwaysCanonical Trip.com hotel detail URL (tracking params stripped).
citystringAlwaysCity the hotel is located in.
countrystringAlwaysCountry the hotel is located in.
scrapedAtstring (ISO 8601)AlwaysUTC timestamp of when the row was scraped.
stars1|2|3|4|5SERPOfficial star rating.
scorenumberSERPGuest review score (0โ€“10 scale).
scoreLabelstringSERPHuman label for the score (e.g. Excellent, Good, Very good).
reviewCountnumberSERPTotal number of guest reviews.
primaryPhotoUrlstringSERPURL of the hotel's primary listing photo.
priceMainstringSERPPer-night price as displayed on the SERP.
priceTotalstringSERPTotal price for the stay duration as displayed on the SERP.
currencystringSERPCurrency code for price fields (e.g. USD).
landmarksstring[]SERPLandmark names and distances shown on the card (e.g. "The Bund (0.6 km)").
tagsstring[]SERPAmenity tags shown on the listing card (e.g. "Free WiFi", "Pool").
awardRankstringSERPTrip.com award label if present (e.g. "Trip.com Choice Award 2025").
descriptionstringDetail onlyLong-form hotel description from the detail page.
fullAddressobjectDetail onlyStructured address: { street?, region?, postalCode? }. Postal code is omitted when Trip.com has none.
aggregateRatingobjectDetail onlyStructured rating: { ratingValue: number, bestRating: number }.
priceRangestringDetail onlyPrice tier indicator (e.g. $$$).
faq{ question, answer }[]Detail onlyHotel FAQ items as extracted from the detail page.
roomsobject[]Detail onlyRoom types offered. Each: { name, occupancy?, photoUrl? }. Nightly rates, breakfast and cancellation terms are not included โ€” Trip.com loads those separately, per set of dates.
facilitiesstring[]Detail onlyHotel-level facilities (e.g. "Outdoor pool", "Spa", "Fitness centre").
amenities{ category, items[] }[]Detail onlyAmenities grouped by category (e.g. { category: "Room", items: ["Air conditioning", ...] }).
photosstring[]Detail onlyAll hotel photo URLs from the gallery.
surroundings{ type, name, distance? }[]Detail onlyNearby points of interest: transport, landmarks, restaurants, etc.

FailedRow fields

FieldTypeDescription
failedtrueAlways true โ€” identifies this as a failed row. Filter your dataset by this field to see all errors at a glance.
reasonstringError classification. One of: parse-error, destination-unresolved, timeout, rate-limited, waf-blocked, not-found.
inputUrlstringThe URL or identifier that triggered the failure.
errorstringHuman-readable error summary (โ‰ค200 chars, sanitised โ€” no credentials or tokens).
scrapedAtstring (ISO 8601)UTC timestamp.

Failure reasons explained:

ReasonCause
parse-errorTrip.com returned a 200 OK but the response had no extractable hotel data (empty SSR shell, layout change).
destination-unresolvedThe autocomplete API returned 0 or multiple ambiguous candidates for the city name provided.
timeoutThe request exceeded the network timeout. Usually a proxy issue โ€” retry typically succeeds.
rate-limitedHTTP 429 received. The actor will retry automatically; a persistent rate-limited row means all retries were exhausted.
waf-blockedThe response matched a WAF/CAPTCHA challenge fingerprint. Rare on residential proxies.
not-foundHTTP 404 โ€” the hotel ID or URL is no longer valid on Trip.com.

๐Ÿ’ฐ How much does it cost to scrape Trip.com?

This actor uses pay-per-event (PPE) pricing. You pay only for pages that successfully parse โ€” failed rows are never charged, and neither are internal steps like resolving a city name.

EventCostWhen billed
serp-page$0.005Once per successfully parsed search-results page.
hotel-detail$0.01Once per successfully parsed hotel detail page. Only billed when scrapeDetails: true.

Worked examples:

ScenarioCalculationTotal
First test run โ€” 5 hotels, lite mode1 search page ร— $0.005$0.005
10 search URLs pasted, lite mode (~10 hotels each)10 search pages ร— $0.005$0.05
Filter search, lite mode, maxItems: 100~3โ€“14 search pages ร— $0.005~$0.02โ€“0.07
Filter search, rich mode, 100 hotels~10 search pages ร— $0.005 + 100 details ร— $0.01~$1.05
Deep run, rich mode, 400 hotels in a large city~40 search pages ร— $0.005 + 400 details ร— $0.01~$4.20
A destination that can't be resolvednothing parsed$0.00

Rule of thumb: $1 buys roughly 100 fully-enriched hotels, or thousands of hotels in lite mode. Lite mode is essentially free at exploratory scale โ€” a full first pass on a city costs a few cents.

Tip: always run with scrapeDetails: false and a small maxItems first, to confirm your destination and filters produce the hotels you expect. Then re-run with details enabled.


๐ŸŽฏ Search modes

The actor offers two search modes, selected by the top-level searchMode field:

ModeWhen to useRequired field
byFiltersDescribe a destination + optional filters and let the actor build the Trip.com search URL. Best for scheduled monitoring runs.destination
byUrlsPaste Trip.com URLs you already crafted in your browser โ€” search results, hotel details, or hotel IDs. Most deterministic option.urls (โ‰ฅ1)

In byFilters mode, you pick a city, dates, and any of the 9 supported filters (sortBy, stars, priceMin/Max, minScore, propertyType, mealPlan, freeCancellation, paymentOption). The actor resolves the city ID, encodes your filters into the Trip.com search URL, and โ€” for larger maxItems โ€” automatically fans the search out across Trip.com's geo domains to widen coverage.

In byUrls mode, paste any combination of:

  • Search-results URLs โ€” /hotels/{slug}-hotels-list-{cityId}/ or /hotels/list?cityId=N&...&listFilters=...
  • Hotel detail URLs โ€” /hotels/{slug}-hotel-detail-{hotelId}/ or /hotels/detail/?hotelId=N&...
  • Bare hotel IDs โ€” 375477 (promoted to a detail URL automatically)

Power users with niche filter combinations prefer byUrls mode: open Trip.com, fill in the filter sidebar in your browser, and copy the resulting URL into the urls field. Whatever filters Trip.com supports, the actor fetches as-is.


โšก Runs on the Apify platform

The scraper is only half of what you get. Because it runs on Apify, you also get:

  • Scheduling โ€” run it nightly or hourly and build a price history without touching a cron server. Save your input as a Task and reuse it.
  • A full REST API โ€” start runs and pull datasets from your own code. See the API tab on the actor page.
  • Integrations โ€” push results straight to Google Sheets, Slack, Zapier, Make, Airtable, AWS S3 or a webhook.
  • Residential proxy rotation โ€” included and configured. No proxy list to buy or maintain.
  • Monitoring and alerts โ€” get notified when a run fails or returns fewer results than usual.
  • Storage and history โ€” every run's dataset is kept, versioned and exportable.

โš ๏ธ Limitations

How many hotels you get depends on the mode. Measured on real runs, July 2026:

SetupTypical yield
byFilters (destination + filters), maxItems above 20Your maxItems โ€” 100 requested โ†’ 100 returned
byFilters with maxItems of 20 or less~19 hotels, collected over HTTP in a few seconds
byUrls, one search URL, lite mode~9โ€“12 hotels (the page's own cards)
byUrls, one search URL, rich mode (scrapeDetails)~70 unique hotels for a large city

Why byFilters goes deeper. Trip.com's infinite scroll is gated behind a signed request token, so above the 20-item threshold a destination search drives a stealth browser to collect the full result set. Below it, the browser would cost more time than the extra hotels are worth, so the run stays on the HTTP path โ€” which tops out at one search page plus the SEO landings, about 19 unique hotels. A run that cannot reach your maxItems says so in the log rather than leaving you to count rows.

byUrls never starts the browser. Pasted URLs are fetched over HTTP. In rich mode the actor still expands coverage by following the extra hotel IDs each landing page references and walking district pages breadth-first โ€” that is where the ~70 comes from.

No guest reviews. Review text is not extracted. A separate reviews actor is planned โ€” see Other scrapers by Bebity below.

No per-date price calendar. The actor captures the price shown for the dates you specify. Sweeping a 60-day price curve isn't supported; schedule daily runs instead to build the history yourself.

Locale is applied via URL parameters and headers, not geo domains. Currency and locale are set with ?curr= and ?locale= plus an Accept-Language header. Content reflects the locale you set rather than your IP's local edition.

Prices are indicative. Trip.com search-page prices can differ from final checkout prices because of taxes, fees and live availability. Verify on Trip.com before acting on them.


๐Ÿ’ก Tips

Enable scrapeDetails when you want volume, not just depth. It's the switch that turns on deep pagination โ€” the difference between ~10 hotels and several hundred.

Validate before enriching. Run with scrapeDetails: false and maxItems: 10. Confirm the hotels match your destination and filters, then re-run with details enabled and your real maxItems. This avoids paying for detail pages on a misconfigured run.

Paste several URLs to widen a lite-mode search. Apply different filter combinations in your browser (star rating, price band, district) and drop each resulting URL into urls. The actor de-duplicates by hotelId, so overlapping searches never produce duplicate rows.

Use Tasks for repeatable monitoring. Save your input as a named Task in Apify Console, then schedule it. Nightly price snapshots with no reconfiguration.

Always check the failed_items view. Switch the dataset view after each run to see what failed and why. Most failures are transient (timeouts, empty SSR shells) and clear on a re-run.

Target a country with proxies. For region-specific pricing or language defaults, pass proxyConfiguration: { "useApifyProxy": true, "groups": ["RESIDENTIAL"], "countryCode": "JP" } and pair it with locale: "ja-JP" and currency: "JPY".

Bare hotel IDs make great watchlists. Once you've identified a shortlist of properties, paste their numeric hotelId values straight into urls. Bare integers are treated as detail-page requests and return rich data even with scrapeDetails: false.


Scraping publicly available data is legal in many jurisdictions, and this actor only collects what Trip.com shows to any anonymous visitor: hotel names, prices, ratings, photos and descriptions. It does not extract private user data, guest names, contact details or anything behind a login.

That said, your results may still contain data that is regulated โ€” and how you use them is your responsibility. Personal data is protected by the GDPR in the European Union and by comparable laws elsewhere. You should not scrape or store personal data without a legitimate reason, and you remain responsible for complying with Trip.com's terms of service, applicable law, and your own data governance policies. If you're unsure whether your use case qualifies, consult your lawyers. Apify's blog post on the legality of web scraping is a good starting point.


๐Ÿงฐ Other scrapers by Bebity

Browse everything we publish on the Bebity profile.

ActorWhat it doesStatus
Trip.com Hotels ScraperThis actor โ€” hotel listings, prices, rooms, facilities and photos.Available
Trip.com Reviews ScraperGuest review text, ratings and reviewer metadata per hotel.Planned โ€” tell us if you need it

Need a different travel site, or a customised version of this one? Open an issue on the actor's Issues tab and describe what you're after.


โ“ FAQ

How many hotels can I get from one Trip.com search?

With byFilters (a destination plus filters) and maxItems above 20, you get your maxItems โ€” a 100-hotel request returns 100. Below that threshold the run stays on the fast HTTP path and tops out near 19. Pasting a single search URL in byUrls mode gives ~9โ€“12 hotels in lite mode, or ~70 for a large city in rich mode. The Limitations section has the full breakdown and explains why the modes differ.

How do I filter by district, hotel chain, or proximity to a landmark?

These aren't exposed in byFilters mode because Trip.com encodes them as city-specific tag IDs that change between destinations and deploys. Use byUrls mode instead: open Trip.com, apply the district / chain / landmark filter in the sidebar, copy the resulting URL (it looks like /hotels/list?cityId=...&listFilters=...), and paste it into urls. The actor fetches it as-is and Trip.com applies the filters server-side.

Can I scrape multiple cities in one run?

Yes โ€” put one search URL per city in the urls array. Each row carries its own city and country, so you can split them downstream. For large jobs, one scheduled Task per city keeps the datasets separate and easier to monitor.

When will guest reviews be available?

Reviews are planned as a separate actor. No date is locked โ€” it's driven by demand, so open an issue if you need it and we'll prioritise accordingly.

Why does my run show failed: true rows?

By design: the actor never swallows an error. Every failure becomes a visible row with a reason instead of crashing the run or silently shortening your dataset. The common ones:

  • destination-unresolved โ€” the city name was ambiguous (for example "Springfield"). Use a more specific name or a numeric city ID.
  • parse-error โ€” Trip.com returned an empty page shell. Usually transient; retry.
  • timeout โ€” a slow proxy connection. Retry usually clears it.

Can I target a specific country's Trip.com version?

Pass a countryCode in proxyConfiguration to route through a residential IP in that country โ€” for example { "useApifyProxy": true, "groups": ["RESIDENTIAL"], "countryCode": "AU" } for Australian IPs. Combine with the matching locale and currency.

What currencies are supported?

USD, EUR, GBP, JPY, AUD, CAD, NZD, CHF, CNY, HKD, SGD, THB, KRW, MYR, INR, BRL and MXN. Set currency in the Localization section.

Does Trip.com have an official API?

Trip.com offers partner APIs, but they require a commercial agreement and are not open to the public. This actor is a practical stand-in for reading publicly displayed hotel data at scale, with no onboarding and no contract.

How often does Trip.com change its layout?

Trip.com runs Next.js with React Server Components streaming. The actor anchors extraction on stable backend tracking attributes rather than CSS class names, so cosmetic redeploys don't break it. A significant redesign still can โ€” if you see a spike in parse-error rows, check the changelog and the Issues tab. We push fixes promptly.

Can I get the data into Google Sheets / a database / my app?

Yes. Export from the Dataset tab (JSON, CSV, Excel, HTML, XML), pull it via the Apify API, or wire up an integration โ€” Google Sheets, Slack, Zapier, Make, Airtable, S3 and generic webhooks are all supported from the actor's Integrations tab.


๐Ÿ†˜ Support and feedback

Found a bug, hit an unexpected failed reason, or need a field the actor doesn't extract yet? Open a ticket on the Issues tab โ€” it's monitored, and it's the fastest way to get a fix or a feature.

Feature requests genuinely shape the roadmap: reviews scraping, calendar pricing and deeper pagination are all prioritised by what people ask for.


๐Ÿ“œ Changelog

Current version: 1.1.0.

The full version history lives in ./CHANGELOG.md, which is also what renders on the Changelog tab of this actor's Apify Store page.


Built by Bebity.