{
  "openapi": "3.0.1",
  "info": {
    "title": "Trip.com & Ctrip 携程酒店 Hotel Scraper: Prices, Reviews, Changes",
    "description": "Scrape Trip.com and Ctrip hotels by city or link: nightly and total price, discounts, free cancellation, breakfast, stars, guest scores, amenities and reviews. Filters, up to 14 check-in dates per run, price-change feed. JSON, CSV, Excel. No login or cookies. 携程酒店数据采集",
    "version": "0.3",
    "x-build-id": "AfpXoZEXZbWyUiuAY"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/getascraper~ctrip-hotel-rate-intelligence/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-getascraper-ctrip-hotel-rate-intelligence",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/getascraper~ctrip-hotel-rate-intelligence/runs": {
      "post": {
        "operationId": "runs-sync-getascraper-ctrip-hotel-rate-intelligence",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/getascraper~ctrip-hotel-rate-intelligence/run-sync": {
      "post": {
        "operationId": "run-sync-getascraper-ctrip-hotel-rate-intelligence",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "destinations": {
            "title": "Cities",
            "type": "array",
            "description": "Cities to search, one per line. Use a city name in English or Chinese (for example Shanghai, 上海, Tokyo, Bangkok), a numeric Trip.com city ID, or a Trip.com hotel list link. Each city is searched separately.",
            "default": [
              "Shanghai"
            ],
            "items": {
              "type": "string"
            }
          },
          "hotels": {
            "title": "Specific hotels",
            "type": "array",
            "description": "Optional. Hotel page links or numeric hotel IDs from Trip.com or Ctrip. When this list is filled, only these hotels are looked up (profile, amenities, policies and optional reviews) and the city search is skipped. Room prices are only available through the city search.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "checkInDate": {
            "title": "Check-in date",
            "type": "string",
            "description": "Optional fixed check-in date. Leave empty to use the number of days from today set below. A date in the past is ignored."
          },
          "checkInDaysFromToday": {
            "title": "Check-in days from today",
            "minimum": 0,
            "maximum": 365,
            "type": "integer",
            "description": "How many days from the run date the stay starts. Used when no fixed check-in date is set. Rerunning on a schedule with this setting always prices the same distance ahead.",
            "default": 7
          },
          "nights": {
            "title": "Nights",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "Length of the stay. The total price on each row covers all nights and rooms, and the per-night price is for one room.",
            "default": 1
          },
          "scanDays": {
            "title": "Check-in dates to compare",
            "minimum": 1,
            "maximum": 14,
            "type": "integer",
            "description": "Price this many consecutive check-in dates, starting from the first one. Use 7 to see how a city's prices move across a week. Each date returns its own row for every hotel.",
            "default": 1
          },
          "adults": {
            "title": "Adults per room",
            "minimum": 1,
            "maximum": 8,
            "type": "integer",
            "description": "Number of adult guests. Some rooms are only sold for certain party sizes, so this can change the price shown.",
            "default": 2
          },
          "rooms": {
            "title": "Rooms",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "Number of rooms to book. The total price on each row is for all rooms.",
            "default": 1
          },
          "sortBy": {
            "title": "Sort order",
            "enum": [
              "recommended",
              "topReviewed",
              "lowestPrice",
              "highestPrice",
              "starRating"
            ],
            "type": "string",
            "description": "How the site orders hotels before the first ones are taken. Recommended is the site's default ranking.",
            "default": "recommended"
          },
          "starRatings": {
            "title": "Star ratings",
            "type": "array",
            "description": "Only keep hotels with these star or diamond levels. Choosing 2 includes 2 stars and below. Leave empty for all levels.",
            "items": {
              "type": "string",
              "enum": [
                "5",
                "4",
                "3",
                "2"
              ],
              "enumTitles": [
                "5 stars",
                "4 stars",
                "3 stars",
                "2 stars or fewer"
              ]
            },
            "default": []
          },
          "minGuestScore": {
            "title": "Minimum guest score",
            "enum": [
              "any",
              "6",
              "7",
              "8",
              "9"
            ],
            "type": "string",
            "description": "Only keep hotels whose guest score is at least this value out of 10.",
            "default": "any"
          },
          "minReviewCount": {
            "title": "Minimum number of reviews",
            "enum": [
              "any",
              "100",
              "200",
              "500"
            ],
            "type": "string",
            "description": "Only keep hotels with at least this many guest reviews. Useful to leave out new listings with little feedback.",
            "default": "any"
          },
          "minPrice": {
            "title": "Minimum price per night",
            "minimum": 0,
            "maximum": 1000000,
            "type": "integer",
            "description": "Only keep hotels priced at or above this amount per night, in the currency chosen below. Use 0 for no minimum.",
            "default": 0
          },
          "maxPrice": {
            "title": "Maximum price per night",
            "minimum": 0,
            "maximum": 1000000,
            "type": "integer",
            "description": "Only keep hotels priced at or below this amount per night, in the currency chosen below. Use 0 for no maximum.",
            "default": 0
          },
          "freeCancellation": {
            "title": "Free cancellation only",
            "type": "boolean",
            "description": "Only keep hotels that offer a room with free cancellation.",
            "default": false
          },
          "breakfastIncluded": {
            "title": "Breakfast included only",
            "type": "boolean",
            "description": "Only keep hotels that offer a room with breakfast included.",
            "default": false
          },
          "propertyTypes": {
            "title": "Property types",
            "type": "array",
            "description": "Only keep these kinds of places to stay. Leave empty for every type.",
            "items": {
              "type": "string",
              "enum": [
                "hotel",
                "servicedApartment",
                "resort",
                "apartment",
                "villa",
                "vacationHome",
                "guestHouse",
                "chineseInn",
                "homestay",
                "hostel",
                "inn",
                "capsuleHotel"
              ],
              "enumTitles": [
                "Hotel",
                "Serviced apartment",
                "Resort",
                "Apartment",
                "Villa",
                "Vacation home",
                "Guest house",
                "Chinese inn",
                "Homestay",
                "Hostel",
                "Inn",
                "Capsule hotel"
              ]
            },
            "default": []
          },
          "amenities": {
            "title": "Amenities",
            "type": "array",
            "description": "Only keep hotels that offer these facilities. Leave empty to ignore amenities.",
            "items": {
              "type": "string",
              "enum": [
                "freeWifi",
                "freeParking",
                "parking",
                "gym",
                "spa",
                "restaurant",
                "bar",
                "laundry",
                "frontDesk24h",
                "petsAllowed",
                "kidsClub",
                "evCharging",
                "hotSprings",
                "airConditioning",
                "bathtub",
                "balcony",
                "kitchen",
                "washingMachine",
                "privatePool"
              ],
              "enumTitles": [
                "Wi-Fi in public areas",
                "Free parking",
                "Parking",
                "Gym",
                "Spa",
                "Restaurant",
                "Bar",
                "Laundry room",
                "24-hour front desk",
                "Pets welcome",
                "Kids club",
                "EV charging station",
                "Hot springs",
                "Air conditioning in rooms",
                "Bathtub in rooms",
                "Balcony in rooms",
                "Kitchen in rooms",
                "Washing machine in rooms",
                "Private pool"
              ]
            },
            "default": []
          },
          "areas": {
            "title": "Areas, landmarks and stations",
            "type": "array",
            "description": "Only keep hotels in or near these places, one per line. Use names the site lists for the city, such as The Bund, Lujiazui, Pudong International Airport or a metro station. Several entries are combined, and a name that matches nothing is reported in the run summary.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "brands": {
            "title": "Hotel brands",
            "type": "array",
            "description": "Only keep hotels of these brands, one per line, for example Hilton, Atour or Marriott. Combined with the areas above, it finds those brands in those places.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "dataSource": {
            "title": "Data source",
            "enum": [
              "trip",
              "ctrip"
            ],
            "type": "string",
            "description": "Trip.com is the international site and shows live room prices in several languages. Ctrip.com is the mainland China site with Simplified Chinese text, but no room prices and only the star, guest score, review count, free cancellation and breakfast filters.",
            "default": "trip"
          },
          "language": {
            "title": "Language",
            "enum": [
              "en-XX",
              "zh-HK",
              "ja-JP",
              "ko-KR"
            ],
            "type": "string",
            "description": "Language of hotel names, addresses and tags when the source is Trip.com. Ignored for Ctrip.com, which is always Simplified Chinese.",
            "default": "en-XX"
          },
          "currency": {
            "title": "Currency",
            "enum": [
              "USD",
              "CNY",
              "HKD",
              "EUR",
              "GBP",
              "JPY",
              "KRW",
              "SGD",
              "AUD",
              "TWD"
            ],
            "type": "string",
            "description": "Currency for all prices when the source is Trip.com.",
            "default": "USD"
          },
          "includeDetails": {
            "title": "Add hotel details",
            "type": "boolean",
            "description": "Adds the full amenity list, check-in and policy rules, description, phone, nearby places, photos and a review summary with guest topics to each hotel. Opens one extra page per hotel, so the run takes longer.",
            "default": false
          },
          "includeReviews": {
            "title": "Collect guest reviews",
            "type": "boolean",
            "description": "Adds the most relevant guest reviews as separate rows, with rating, sub-ratings, traveler type, reviewer country, translation and the hotel's reply. Reviewer names are not collected.",
            "default": false
          },
          "maxReviewsPerHotel": {
            "title": "Reviews per hotel",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "How many reviews to save for each hotel when review collection is on. The site shows its 10 most relevant reviews without sign-in.",
            "default": 10
          },
          "trackChanges": {
            "title": "Track price changes",
            "type": "boolean",
            "description": "Compare each hotel's price with the previous run that used the same tracking name, stay and guests. Every row gets a change status (new, price drop, price rise, unchanged) and the size of the change.",
            "default": false
          },
          "onlyChanges": {
            "title": "Only output changes",
            "type": "boolean",
            "description": "With price tracking on, save only hotels that are new or whose price went up or down since the last run. The first run saves everything because nothing has been seen yet.",
            "default": false
          },
          "monitorScope": {
            "title": "Tracking name",
            "type": "string",
            "description": "A short name that keeps separate watch lists apart. Runs that share a name are compared with each other. Use a different name for each schedule.",
            "default": "default"
          },
          "maxItems": {
            "title": "Maximum hotels",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "Most hotels to save for each city and check-in date. The site lists about a dozen hotels per page, so larger numbers run extra searches with different sort orders, star levels and price bands to find more.",
            "default": 10
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Datacenter proxies are used by default. Switch to residential only if the site starts refusing requests.",
            "default": {
              "useApifyProxy": true
            }
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}