{
  "data": {
    "id": "YqKtYaAlxzHXQ8eZm",
    "actId": "eT4LscLDfutKSxvXg",
    "userId": "zq8lKbpLzTjGDayPC",
    "startedAt": "2026-11-11T09:04:36.096Z",
    "finishedAt": "2026-11-11T09:04:47.101Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "CLI"
    },
    "stats": {
      "durationMillis": 10915,
      "runTimeSecs": 10.915,
      "computeUnits": 0.012127777777777777,
      "imageSizeBytes": 319138304
    },
    "options": {
      "useCache": true,
      "betaPackages": false,
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "createdByOrganizationMemberUserId": "GK9YjZRyQZVzOdoH5",
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"Trip.com Hotels Scraper Input\",\n  \"description\": \"Search Trip.com hotels for a city and stay dates, or fetch full details and nightly prices for specific hotel IDs.\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"properties\": {\n    \"mode\": {\n      \"title\": \"Mode\",\n      \"type\": \"string\",\n      \"description\": \"Choose 'Search hotels' to browse a city, or 'Hotel details by ID' to fetch specific properties.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"searchHotels\",\n        \"hotelDetail\"\n      ],\n      \"enumTitles\": [\n        \"Search hotels by city and dates\",\n        \"Hotel details by ID or URL\"\n      ],\n      \"default\": \"searchHotels\",\n      \"prefill\": \"searchHotels\",\n      \"sectionCaption\": \"What to scrape\"\n    },\n    \"cityName\": {\n      \"title\": \"City\",\n      \"type\": \"string\",\n      \"description\": \"City to search, e.g. London, Paris, Tokyo, Bangkok, Dubai. Country names also work: 'Paris, France'.\",\n      \"editor\": \"textfield\",\n      \"default\": \"London\",\n      \"prefill\": \"London\"\n    },\n    \"cityId\": {\n      \"title\": \"Trip.com City ID (optional)\",\n      \"type\": \"integer\",\n      \"description\": \"Exact Trip.com geo code, if you already know it (London = 338). Overrides the city name.\",\n      \"editor\": \"number\",\n      \"minimum\": 1,\n      \"maximum\": 99999999\n    },\n    \"checkIn\": {\n      \"title\": \"Check-in Date\",\n      \"type\": \"string\",\n      \"description\": \"YYYY-MM-DD. Leave blank for tomorrow.\",\n      \"editor\": \"textfield\",\n      \"prefill\": \"\"\n    },\n    \"checkOut\": {\n      \"title\": \"Check-out Date\",\n      \"type\": \"string\",\n      \"description\": \"YYYY-MM-DD. Leave blank for the night after check-in.\",\n      \"editor\": \"textfield\",\n      \"prefill\": \"\"\n    },\n    \"adults\": {\n      \"title\": \"Adults\",\n      \"type\": \"integer\",\n      \"description\": \"Number of adults per room (1-8).\",\n      \"editor\": \"number\",\n      \"default\": 2,\n      \"prefill\": 2,\n      \"minimum\": 1,\n      \"maximum\": 8,\n      \"sectionCaption\": \"Guests and stay\"\n    },\n    \"rooms\": {\n      \"title\": \"Rooms\",\n      \"type\": \"integer\",\n      \"description\": \"Number of rooms (1-5).\",\n      \"editor\": \"number\",\n      \"default\": 1,\n      \"prefill\": 1,\n      \"minimum\": 1,\n      \"maximum\": 5\n    },\n    \"minStars\": {\n      \"title\": \"Minimum Star Rating\",\n      \"type\": \"integer\",\n      \"description\": \"Lowest official star class to include (1-5).\",\n      \"editor\": \"number\",\n      \"minimum\": 1,\n      \"maximum\": 5,\n      \"sectionCaption\": \"Hotel filters\"\n    },\n    \"maxStars\": {\n      \"title\": \"Maximum Star Rating\",\n      \"type\": \"integer\",\n      \"description\": \"Highest official star class to include (1-5).\",\n      \"editor\": \"number\",\n      \"minimum\": 1,\n      \"maximum\": 5\n    },\n    \"minRating\": {\n      \"title\": \"Minimum Guest Score\",\n      \"type\": \"number\",\n      \"description\": \"Trip.com guest score on a 0-10 scale, e.g. 8 for 'Very good'.\",\n      \"editor\": \"number\",\n      \"minimum\": 0,\n      \"maximum\": 10\n    },\n    \"maxPrice\": {\n      \"title\": \"Maximum Nightly Price\",\n      \"type\": \"number\",\n      \"description\": \"Highest nightly room price in the selected currency, before taxes.\",\n      \"editor\": \"number\",\n      \"minimum\": 0,\n      \"maximum\": 100000\n    },\n    \"breakfastIncluded\": {\n      \"title\": \"Breakfast Included Only\",\n      \"type\": \"boolean\",\n      \"description\": \"Only return rooms whose rate includes breakfast.\",\n      \"editor\": \"checkbox\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"freeCancellation\": {\n      \"title\": \"Free Cancellation Only\",\n      \"type\": \"boolean\",\n      \"description\": \"Only return rooms with a free-cancellation policy.\",\n      \"editor\": \"checkbox\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"payAtHotel\": {\n      \"title\": \"Pay at Hotel Only\",\n      \"type\": \"boolean\",\n      \"description\": \"Only return rooms that can be paid for at the property.\",\n      \"editor\": \"checkbox\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"sortBy\": {\n      \"title\": \"Sort Results By\",\n      \"type\": \"string\",\n      \"description\": \"Order of the returned hotels. Price and rating sorts scan extra result slices before trimming.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"recommended\",\n        \"priceLow\",\n        \"priceHigh\",\n        \"rating\",\n        \"stars\"\n      ],\n      \"enumTitles\": [\n        \"Trip.com recommendation\",\n        \"Price: low to high\",\n        \"Price: high to low\",\n        \"Guest score: best first\",\n        \"Star class: highest first\"\n      ],\n      \"default\": \"recommended\",\n      \"prefill\": \"recommended\"\n    },\n    \"currency\": {\n      \"title\": \"Currency\",\n      \"type\": \"string\",\n      \"description\": \"Currency for all price fields.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"USD\",\n        \"EUR\",\n        \"GBP\",\n        \"JPY\",\n        \"AUD\",\n        \"CAD\",\n        \"CNY\",\n        \"HKD\",\n        \"SGD\",\n        \"THB\",\n        \"KRW\",\n        \"INR\",\n        \"AED\",\n        \"CHF\",\n        \"MYR\",\n        \"TWD\"\n      ],\n      \"enumTitles\": [\n        \"US Dollar\",\n        \"Euro\",\n        \"British Pound\",\n        \"Japanese Yen\",\n        \"Australian Dollar\",\n        \"Canadian Dollar\",\n        \"Chinese Yuan\",\n        \"Hong Kong Dollar\",\n        \"Singapore Dollar\",\n        \"Thai Baht\",\n        \"South Korean Won\",\n        \"Indian Rupee\",\n        \"UAE Dirham\",\n        \"Swiss Franc\",\n        \"Malaysian Ringgit\",\n        \"New Taiwan Dollar\"\n      ],\n      \"default\": \"USD\",\n      \"prefill\": \"USD\"\n    },\n    \"includeDetails\": {\n      \"title\": \"Enrich Search Results with Hotel Details\",\n      \"type\": \"boolean\",\n      \"description\": \"Fetch each hotel's detail page for its full address, facilities, description, phone and check-in times. Adds one request per hotel.\",\n      \"editor\": \"checkbox\",\n      \"default\": false,\n      \"prefill\": false,\n      \"sectionCaption\": \"Output size and detail\"\n    },\n    \"maxItems\": {\n      \"title\": \"Maximum Hotels\",\n      \"type\": \"integer\",\n      \"description\": \"Maximum records to return (1-200).\",\n      \"editor\": \"number\",\n      \"default\": 20,\n      \"prefill\": 5,\n      \"minimum\": 1,\n      \"maximum\": 200\n    },\n    \"hotelId\": {\n      \"title\": \"Hotel ID or URL (detail mode)\",\n      \"type\": \"string\",\n      \"description\": \"One Trip.com hotel ID or detail URL, e.g. 731904. Used when mode is 'Hotel details by ID'.\",\n      \"editor\": \"textfield\",\n      \"sectionCaption\": \"Hotel details mode\"\n    },\n    \"hotelIds\": {\n      \"title\": \"Hotel IDs or URLs (batch detail mode)\",\n      \"type\": \"array\",\n      \"description\": \"Multiple Trip.com hotel IDs or detail URLs. Combined with 'hotelId' when both are provided.\",\n      \"editor\": \"stringList\",\n      \"items\": {\n        \"type\": \"string\"\n      }\n    },\n    \"proxyConfiguration\": {\n      \"title\": \"Proxy Configuration\",\n      \"type\": \"object\",\n      \"description\": \"Optional. Leave unchanged for a direct connection; the actor uses Apify Proxy automatically if Trip.com blocks the datacenter IP.\",\n      \"editor\": \"proxy\",\n      \"default\": {\n        \"useApifyProxy\": false\n      },\n      \"prefill\": {\n        \"useApifyProxy\": false\n      }\n    }\n  },\n  \"required\": []\n}",
    "readme": "# Trip.com Hotel Search & Nightly Price Finder\n\nFind hotels on Trip.com for a city and stay dates — or pull the complete profile for properties you already know. Every row is a ready-to-use hotel record with its nightly rate, star class, guest score, location, room details and a direct booking link.\n\n## Modes\n\n### Search hotels by city and dates (`searchHotels`)\n\nGive a city and optional stay dates and filters. The actor resolves the city through Trip.com's own search service, reads the server-rendered result pages, and returns hotels with the price quoted for your exact dates.\n\n- **Pagination that actually advances:** Trip.com serves about 12 hotels per result query and ignores page-number parameters. The actor slices the result space across star classes and city zones, de-duplicates by hotel ID, and keeps going until your `maxItems` is reached or the source is exhausted.\n- **Date-aware prices:** nightly price before tax, nightly price after tax, and the total for the whole stay are all included.\n- **Filters that change the result set:** star range, guest score, nightly budget, breakfast, free cancellation, pay-at-hotel.\n- **Optional detail enrichment:** turn on `includeDetails` to add the full street address, facilities, description, phone, e-mail and check-in/out times to every search row.\n\n### Hotel details by ID or URL (`hotelDetail`)\n\nPaste one or many Trip.com hotel IDs (or full detail URLs). The actor returns the full property profile — address, facilities, description, policies, photos, contact details, coordinates — and makes a best-effort merge of the current nightly price for your dates when the property appears in the city search.\n\nIDs are taken from `hotelIds`, and the single `hotelId` field is combined with it, so both old and new tasks work.\n\n## Input\n\n| Field | Type | Default | Notes |\n|---|---|---|---|\n| `mode` | select | `searchHotels` | `searchHotels` or `hotelDetail` |\n| `cityName` | text | `London` | City, or a city + country such as `Paris, France` |\n| `cityId` | integer | – | Exact Trip.com geo code; overrides the city name |\n| `checkIn` / `checkOut` | text | tomorrow / next night | `YYYY-MM-DD` |\n| `adults` | integer | 2 | 1–8 adults per room |\n| `rooms` | integer | 1 | 1–5 rooms |\n| `minStars` / `maxStars` | integer | – | Official star class 1–5 |\n| `minRating` | number | – | Guest score 0–10 |\n| `maxPrice` | number | – | Nightly budget before taxes |\n| `breakfastIncluded` | boolean | false | Only breakfast-included rates |\n| `freeCancellation` | boolean | false | Only free-cancellation rates |\n| `payAtHotel` | boolean | false | Only pay-at-property rates |\n| `sortBy` | select | `recommended` | `priceLow`, `priceHigh`, `rating`, `stars` |\n| `currency` | select | `USD` | 16 major currencies |\n| `includeDetails` | boolean | false | Enrich every search row from its detail page |\n| `maxItems` | integer | 20 | 1–200 |\n| `hotelId` | text | – | One hotel ID or detail URL (detail mode) |\n| `hotelIds` | string list | – | Multiple hotel IDs or URLs (detail mode) |\n| `proxyConfiguration` | proxy | direct | Optional; an Apify Proxy fallback is automatic if Trip.com blocks the datacenter IP |\n\nSaved tasks that still send older keys — `destination`, `city`, `query`, `searchQuery`, `searchQueries`, `checkin`, `checkout`, `check_in`, `check_out`, `adult`, `roomQuantity`, `sort`, `maxResults` — keep working because those keys are mapped in code, even when the input form fills the new defaults.\n\n## Output\n\nEach dataset row is one hotel.\n\n- `hotelId`, `name`, `hotelType`\n- `address`, `neighborhood`, `positionDesc`, `city`, `province`, `country`\n- `starRating`, `rating`, `ratingText`, `reviewCount`, `subScores`, `locationScore`\n- `pricePerNight` — nightly rate before taxes\n- `priceWithTax` — nightly rate including taxes and fees\n- `priceWithTaxTotal` — full-stay total including taxes and fees\n- `currency`, `priceExplanation`, `paymentPolicy`\n- `freeCancellation`, `breakfastIncluded`\n- `roomName`, `bedType`\n- `amenities[]`, `highlights[]`, `description`\n- `checkInTime`, `checkOutTime`, `phone`, `email`\n- `openYear`, `renovationYear`\n- `url`, `thumbnailUrl`, `imageCount`, `imageUrls[]`\n- `lat`, `lon`\n- `checkIn`, `checkOut`, `recordType`, `scrapedAt`\n\nEmpty values are omitted, never returned as `null`.\n\n## Examples\n\nSearch London for a two-night stay:\n\n```json\n{\n  \"mode\": \"searchHotels\",\n  \"cityName\": \"London\",\n  \"checkIn\": \"2026-11-20\",\n  \"checkOut\": \"2026-11-22\",\n  \"maxItems\": 50\n}\n```\n\nFour- and five-star hotels under 300 USD with a guest score of at least 8.5:\n\n```json\n{\n  \"mode\": \"searchHotels\",\n  \"cityName\": \"Tokyo\",\n  \"checkIn\": \"2026-11-20\",\n  \"checkOut\": \"2026-11-22\",\n  \"minStars\": 4,\n  \"minRating\": 8.5,\n  \"maxPrice\": 300,\n  \"sortBy\": \"priceLow\",\n  \"maxItems\": 40\n}\n```\n\nFetch one property, or several at once:\n\n```json\n{\n  \"mode\": \"hotelDetail\",\n  \"hotelIds\": [\"731904\", \"https://www.trip.com/hotels/detail/?hotelId=3037865\"],\n  \"checkIn\": \"2026-11-20\",\n  \"checkOut\": \"2026-11-22\"\n}\n```\n\n## Use cases\n\n- **Price monitoring:** rerun the same city, dates and filters to watch nightly rates move.\n- **Shortlist building:** combine star, score and budget filters to narrow a destination.\n- **Property research:** pull facilities, policies and contact details for a list of known hotels.\n- **Travel content:** compare scores, room types and locations across a city.\n- **Budget planning:** cap the nightly price and see what remains available.\n\n## FAQ\n\n**Do I need a Trip.com account or cookie?**\nNo. City search, hotel search and detail pages are read without logging in.\n\n**Why does a search stop before `maxItems`?**\nTrip.com returns roughly 12 hotels per result query. The actor walks star and zone slices until it reaches your limit or the source runs out of matching properties. Small cities and very narrow filters can exhaust the source sooner; the status message reports the real count.\n\n**Are prices per night or for the whole stay?**\n`pricePerNight` and `priceWithTax` are nightly. `priceWithTaxTotal` is the whole-stay total and matches the breakdown text in `priceExplanation`.\n\n**What is the difference between search and detail prices?**\nSearch rows always carry the live price for the requested dates. Detail rows try to merge the current price from the same city search. If the property has no availability, or does not appear in the search slices for those dates, the price fields are omitted.\n\n**Why are some fields missing on a row?**\nTrip.com does not publish every field for every property — for example, some hotels have no guest reviews, e-mail or neighborhood. Missing fields are omitted rather than filled with placeholders. `includeDetails` fills the largest set of fields.\n\n**Why is the address sometimes just a district in a search row?**\nSearch result cards expose only the district. Enable `includeDetails`, or use `hotelDetail`, to get the full street address.\n\n**Is this affiliated with Trip.com?**\nNo. This is an independent third-party tool and is not operated by or affiliated with Trip.com or Ctrip.\n",
    "actorDefinition": {
      "actorSpecification": 1,
      "name": "trip-com-hotel-search-and-nightly-price-finder",
      "title": "Trip.com Hotel Search & Nightly Price Finder",
      "description": "Scrape Trip.com hotels by city and stay dates, or by hotel ID, with nightly prices, star class, guest scores, amenities and booking links.",
      "version": "1.1",
      "buildTag": "latest",
      "dockerfile": "../Dockerfile",
      "readme": "# Trip.com Hotel Search & Nightly Price Finder\n\nFind hotels on Trip.com for a city and stay dates — or pull the complete profile for properties you already know. Every row is a ready-to-use hotel record with its nightly rate, star class, guest score, location, room details and a direct booking link.\n\n## Modes\n\n### Search hotels by city and dates (`searchHotels`)\n\nGive a city and optional stay dates and filters. The actor resolves the city through Trip.com's own search service, reads the server-rendered result pages, and returns hotels with the price quoted for your exact dates.\n\n- **Pagination that actually advances:** Trip.com serves about 12 hotels per result query and ignores page-number parameters. The actor slices the result space across star classes and city zones, de-duplicates by hotel ID, and keeps going until your `maxItems` is reached or the source is exhausted.\n- **Date-aware prices:** nightly price before tax, nightly price after tax, and the total for the whole stay are all included.\n- **Filters that change the result set:** star range, guest score, nightly budget, breakfast, free cancellation, pay-at-hotel.\n- **Optional detail enrichment:** turn on `includeDetails` to add the full street address, facilities, description, phone, e-mail and check-in/out times to every search row.\n\n### Hotel details by ID or URL (`hotelDetail`)\n\nPaste one or many Trip.com hotel IDs (or full detail URLs). The actor returns the full property profile — address, facilities, description, policies, photos, contact details, coordinates — and makes a best-effort merge of the current nightly price for your dates when the property appears in the city search.\n\nIDs are taken from `hotelIds`, and the single `hotelId` field is combined with it, so both old and new tasks work.\n\n## Input\n\n| Field | Type | Default | Notes |\n|---|---|---|---|\n| `mode` | select | `searchHotels` | `searchHotels` or `hotelDetail` |\n| `cityName` | text | `London` | City, or a city + country such as `Paris, France` |\n| `cityId` | integer | – | Exact Trip.com geo code; overrides the city name |\n| `checkIn` / `checkOut` | text | tomorrow / next night | `YYYY-MM-DD` |\n| `adults` | integer | 2 | 1–8 adults per room |\n| `rooms` | integer | 1 | 1–5 rooms |\n| `minStars` / `maxStars` | integer | – | Official star class 1–5 |\n| `minRating` | number | – | Guest score 0–10 |\n| `maxPrice` | number | – | Nightly budget before taxes |\n| `breakfastIncluded` | boolean | false | Only breakfast-included rates |\n| `freeCancellation` | boolean | false | Only free-cancellation rates |\n| `payAtHotel` | boolean | false | Only pay-at-property rates |\n| `sortBy` | select | `recommended` | `priceLow`, `priceHigh`, `rating`, `stars` |\n| `currency` | select | `USD` | 16 major currencies |\n| `includeDetails` | boolean | false | Enrich every search row from its detail page |\n| `maxItems` | integer | 20 | 1–200 |\n| `hotelId` | text | – | One hotel ID or detail URL (detail mode) |\n| `hotelIds` | string list | – | Multiple hotel IDs or URLs (detail mode) |\n| `proxyConfiguration` | proxy | direct | Optional; an Apify Proxy fallback is automatic if Trip.com blocks the datacenter IP |\n\nSaved tasks that still send older keys — `destination`, `city`, `query`, `searchQuery`, `searchQueries`, `checkin`, `checkout`, `check_in`, `check_out`, `adult`, `roomQuantity`, `sort`, `maxResults` — keep working because those keys are mapped in code, even when the input form fills the new defaults.\n\n## Output\n\nEach dataset row is one hotel.\n\n- `hotelId`, `name`, `hotelType`\n- `address`, `neighborhood`, `positionDesc`, `city`, `province`, `country`\n- `starRating`, `rating`, `ratingText`, `reviewCount`, `subScores`, `locationScore`\n- `pricePerNight` — nightly rate before taxes\n- `priceWithTax` — nightly rate including taxes and fees\n- `priceWithTaxTotal` — full-stay total including taxes and fees\n- `currency`, `priceExplanation`, `paymentPolicy`\n- `freeCancellation`, `breakfastIncluded`\n- `roomName`, `bedType`\n- `amenities[]`, `highlights[]`, `description`\n- `checkInTime`, `checkOutTime`, `phone`, `email`\n- `openYear`, `renovationYear`\n- `url`, `thumbnailUrl`, `imageCount`, `imageUrls[]`\n- `lat`, `lon`\n- `checkIn`, `checkOut`, `recordType`, `scrapedAt`\n\nEmpty values are omitted, never returned as `null`.\n\n## Examples\n\nSearch London for a two-night stay:\n\n```json\n{\n  \"mode\": \"searchHotels\",\n  \"cityName\": \"London\",\n  \"checkIn\": \"2026-11-20\",\n  \"checkOut\": \"2026-11-22\",\n  \"maxItems\": 50\n}\n```\n\nFour- and five-star hotels under 300 USD with a guest score of at least 8.5:\n\n```json\n{\n  \"mode\": \"searchHotels\",\n  \"cityName\": \"Tokyo\",\n  \"checkIn\": \"2026-11-20\",\n  \"checkOut\": \"2026-11-22\",\n  \"minStars\": 4,\n  \"minRating\": 8.5,\n  \"maxPrice\": 300,\n  \"sortBy\": \"priceLow\",\n  \"maxItems\": 40\n}\n```\n\nFetch one property, or several at once:\n\n```json\n{\n  \"mode\": \"hotelDetail\",\n  \"hotelIds\": [\"731904\", \"https://www.trip.com/hotels/detail/?hotelId=3037865\"],\n  \"checkIn\": \"2026-11-20\",\n  \"checkOut\": \"2026-11-22\"\n}\n```\n\n## Use cases\n\n- **Price monitoring:** rerun the same city, dates and filters to watch nightly rates move.\n- **Shortlist building:** combine star, score and budget filters to narrow a destination.\n- **Property research:** pull facilities, policies and contact details for a list of known hotels.\n- **Travel content:** compare scores, room types and locations across a city.\n- **Budget planning:** cap the nightly price and see what remains available.\n\n## FAQ\n\n**Do I need a Trip.com account or cookie?**\nNo. City search, hotel search and detail pages are read without logging in.\n\n**Why does a search stop before `maxItems`?**\nTrip.com returns roughly 12 hotels per result query. The actor walks star and zone slices until it reaches your limit or the source runs out of matching properties. Small cities and very narrow filters can exhaust the source sooner; the status message reports the real count.\n\n**Are prices per night or for the whole stay?**\n`pricePerNight` and `priceWithTax` are nightly. `priceWithTaxTotal` is the whole-stay total and matches the breakdown text in `priceExplanation`.\n\n**What is the difference between search and detail prices?**\nSearch rows always carry the live price for the requested dates. Detail rows try to merge the current price from the same city search. If the property has no availability, or does not appear in the search slices for those dates, the price fields are omitted.\n\n**Why are some fields missing on a row?**\nTrip.com does not publish every field for every property — for example, some hotels have no guest reviews, e-mail or neighborhood. Missing fields are omitted rather than filled with placeholders. `includeDetails` fills the largest set of fields.\n\n**Why is the address sometimes just a district in a search row?**\nSearch result cards expose only the district. Enable `includeDetails`, or use `hotelDetail`, to get the full street address.\n\n**Is this affiliated with Trip.com?**\nNo. This is an independent third-party tool and is not operated by or affiliated with Trip.com or Ctrip.\n",
      "input": {
        "title": "Trip.com Hotels Scraper Input",
        "description": "Search Trip.com hotels for a city and stay dates, or fetch full details and nightly prices for specific hotel IDs.",
        "type": "object",
        "schemaVersion": 1,
        "properties": {
          "mode": {
            "title": "Mode",
            "type": "string",
            "description": "Choose 'Search hotels' to browse a city, or 'Hotel details by ID' to fetch specific properties.",
            "editor": "select",
            "enum": [
              "searchHotels",
              "hotelDetail"
            ],
            "enumTitles": [
              "Search hotels by city and dates",
              "Hotel details by ID or URL"
            ],
            "default": "searchHotels",
            "prefill": "searchHotels",
            "sectionCaption": "What to scrape"
          },
          "cityName": {
            "title": "City",
            "type": "string",
            "description": "City to search, e.g. London, Paris, Tokyo, Bangkok, Dubai. Country names also work: 'Paris, France'.",
            "editor": "textfield",
            "default": "London",
            "prefill": "London"
          },
          "cityId": {
            "title": "Trip.com City ID (optional)",
            "type": "integer",
            "description": "Exact Trip.com geo code, if you already know it (London = 338). Overrides the city name.",
            "editor": "number",
            "minimum": 1,
            "maximum": 99999999
          },
          "checkIn": {
            "title": "Check-in Date",
            "type": "string",
            "description": "YYYY-MM-DD. Leave blank for tomorrow.",
            "editor": "textfield",
            "prefill": ""
          },
          "checkOut": {
            "title": "Check-out Date",
            "type": "string",
            "description": "YYYY-MM-DD. Leave blank for the night after check-in.",
            "editor": "textfield",
            "prefill": ""
          },
          "adults": {
            "title": "Adults",
            "type": "integer",
            "description": "Number of adults per room (1-8).",
            "editor": "number",
            "default": 2,
            "prefill": 2,
            "minimum": 1,
            "maximum": 8,
            "sectionCaption": "Guests and stay"
          },
          "rooms": {
            "title": "Rooms",
            "type": "integer",
            "description": "Number of rooms (1-5).",
            "editor": "number",
            "default": 1,
            "prefill": 1,
            "minimum": 1,
            "maximum": 5
          },
          "minStars": {
            "title": "Minimum Star Rating",
            "type": "integer",
            "description": "Lowest official star class to include (1-5).",
            "editor": "number",
            "minimum": 1,
            "maximum": 5,
            "sectionCaption": "Hotel filters"
          },
          "maxStars": {
            "title": "Maximum Star Rating",
            "type": "integer",
            "description": "Highest official star class to include (1-5).",
            "editor": "number",
            "minimum": 1,
            "maximum": 5
          },
          "minRating": {
            "title": "Minimum Guest Score",
            "type": "number",
            "description": "Trip.com guest score on a 0-10 scale, e.g. 8 for 'Very good'.",
            "editor": "number",
            "minimum": 0,
            "maximum": 10
          },
          "maxPrice": {
            "title": "Maximum Nightly Price",
            "type": "number",
            "description": "Highest nightly room price in the selected currency, before taxes.",
            "editor": "number",
            "minimum": 0,
            "maximum": 100000
          },
          "breakfastIncluded": {
            "title": "Breakfast Included Only",
            "type": "boolean",
            "description": "Only return rooms whose rate includes breakfast.",
            "editor": "checkbox",
            "default": false,
            "prefill": false
          },
          "freeCancellation": {
            "title": "Free Cancellation Only",
            "type": "boolean",
            "description": "Only return rooms with a free-cancellation policy.",
            "editor": "checkbox",
            "default": false,
            "prefill": false
          },
          "payAtHotel": {
            "title": "Pay at Hotel Only",
            "type": "boolean",
            "description": "Only return rooms that can be paid for at the property.",
            "editor": "checkbox",
            "default": false,
            "prefill": false
          },
          "sortBy": {
            "title": "Sort Results By",
            "type": "string",
            "description": "Order of the returned hotels. Price and rating sorts scan extra result slices before trimming.",
            "editor": "select",
            "enum": [
              "recommended",
              "priceLow",
              "priceHigh",
              "rating",
              "stars"
            ],
            "enumTitles": [
              "Trip.com recommendation",
              "Price: low to high",
              "Price: high to low",
              "Guest score: best first",
              "Star class: highest first"
            ],
            "default": "recommended",
            "prefill": "recommended"
          },
          "currency": {
            "title": "Currency",
            "type": "string",
            "description": "Currency for all price fields.",
            "editor": "select",
            "enum": [
              "USD",
              "EUR",
              "GBP",
              "JPY",
              "AUD",
              "CAD",
              "CNY",
              "HKD",
              "SGD",
              "THB",
              "KRW",
              "INR",
              "AED",
              "CHF",
              "MYR",
              "TWD"
            ],
            "enumTitles": [
              "US Dollar",
              "Euro",
              "British Pound",
              "Japanese Yen",
              "Australian Dollar",
              "Canadian Dollar",
              "Chinese Yuan",
              "Hong Kong Dollar",
              "Singapore Dollar",
              "Thai Baht",
              "South Korean Won",
              "Indian Rupee",
              "UAE Dirham",
              "Swiss Franc",
              "Malaysian Ringgit",
              "New Taiwan Dollar"
            ],
            "default": "USD",
            "prefill": "USD"
          },
          "includeDetails": {
            "title": "Enrich Search Results with Hotel Details",
            "type": "boolean",
            "description": "Fetch each hotel's detail page for its full address, facilities, description, phone and check-in times. Adds one request per hotel.",
            "editor": "checkbox",
            "default": false,
            "prefill": false,
            "sectionCaption": "Output size and detail"
          },
          "maxItems": {
            "title": "Maximum Hotels",
            "type": "integer",
            "description": "Maximum records to return (1-200).",
            "editor": "number",
            "default": 20,
            "prefill": 5,
            "minimum": 1,
            "maximum": 200
          },
          "hotelId": {
            "title": "Hotel ID or URL (detail mode)",
            "type": "string",
            "description": "One Trip.com hotel ID or detail URL, e.g. 731904. Used when mode is 'Hotel details by ID'.",
            "editor": "textfield",
            "sectionCaption": "Hotel details mode"
          },
          "hotelIds": {
            "title": "Hotel IDs or URLs (batch detail mode)",
            "type": "array",
            "description": "Multiple Trip.com hotel IDs or detail URLs. Combined with 'hotelId' when both are provided.",
            "editor": "stringList",
            "items": {
              "type": "string"
            }
          },
          "proxyConfiguration": {
            "title": "Proxy Configuration",
            "type": "object",
            "description": "Optional. Leave unchanged for a direct connection; the actor uses Apify Proxy automatically if Trip.com blocks the datacenter IP.",
            "editor": "proxy",
            "default": {
              "useApifyProxy": false
            },
            "prefill": {
              "useApifyProxy": false
            }
          }
        },
        "required": []
      },
      "output": {
        "actorOutputSchemaVersion": 1,
        "title": "Trip.com Hotels Output",
        "description": "Hotel records with nightly prices, star class, guest scores, location, amenities and booking links.",
        "type": "object",
        "properties": {
          "items": {
            "type": "string",
            "title": "Scraped Hotels",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          }
        }
      },
      "defaultMemoryMbytes": 1024,
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "views": {
            "overview": {
              "title": "Hotels",
              "transformation": {
                "fields": [
                  "name",
                  "address",
                  "starRating",
                  "rating",
                  "pricePerNight",
                  "currency",
                  "url"
                ]
              },
              "display": {
                "component": "table",
                "properties": {}
              }
            }
          }
        }
      },
      "environmentVariables": {}
    },
    "buildNumber": "1.1.1",
    "imageDigest": "67ab6b04a81bd3baa3a58e7c40e8c55a164e44ed664b40fc8b60919555b4d6db",
    "actVersion": {
      "sourceType": "SOURCE_FILES",
      "buildTag": "latest",
      "versionNumber": "1.1"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.012127777777777777
    }
  }
}