{
  "openapi": "3.0.1",
  "info": {
    "title": "TripAdvisor Hotels, Restaurants & Cruises Scraper",
    "description": "Scrape TripAdvisor hotels, restaurants, things to do, vacation rentals AND cruises for any city in one run. 5 verticals, full filters, optional detail enrichment. Pay only per result - no subscription.",
    "version": "1.0",
    "x-build-id": "IJ6TxFmbS5OhsWGua"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/jdtpnjtp~tripadvisor/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-jdtpnjtp-tripadvisor",
        "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/jdtpnjtp~tripadvisor/runs": {
      "post": {
        "operationId": "runs-sync-jdtpnjtp-tripadvisor",
        "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/jdtpnjtp~tripadvisor/run-sync": {
      "post": {
        "operationId": "run-sync-jdtpnjtp-tripadvisor",
        "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": {
          "locationQuery": {
            "title": "Destination (search a whole city)",
            "type": "string",
            "description": "Search an entire destination. Accepts a **city/region name** (`Paris`), a **TripAdvisor geoId** (`187147`), a **slug** (`paris-france`) or a full **TripAdvisor URL** - the actor resolves it automatically. Optional if you provide Start URLs below."
          },
          "startUrls": {
            "title": "Start URLs (parse specific TripAdvisor pages)",
            "uniqueItems": true,
            "type": "array",
            "description": "Paste specific TripAdvisor URLs to scrape directly - a hotel / restaurant / attraction page, a listing or search page, or a Tourism destination page. Each URL is auto-detected and parsed into its own row, independent of the place types below. Mix freely with (or use instead of) a Destination.",
            "items": {
              "type": "string"
            }
          },
          "placeTypes": {
            "title": "Place types to scrape (Destination search)",
            "uniqueItems": true,
            "type": "array",
            "description": "Which TripAdvisor verticals to pull for the Destination. Defaults to all five. Each selected type is searched independently up to the result cap below. Ignored for Start URLs.",
            "items": {
              "type": "string",
              "enum": [
                "hotels",
                "restaurants",
                "things_to_do",
                "cruises",
                "vacation_rentals"
              ],
              "enumTitles": [
                "🏨 Hotels",
                "🍽 Restaurants",
                "🎡 Things to do (attractions)",
                "🚢 Cruises",
                "🏠 Vacation rentals (apartments / B&Bs)"
              ]
            },
            "default": [
              "hotels",
              "restaurants",
              "things_to_do",
              "cruises",
              "vacation_rentals"
            ]
          },
          "maxResultsPerType": {
            "title": "Max results per place type",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Upper bound on search results pulled for EACH selected place type. 20 = quick sample, 100 = solid dataset. The actor paginates TripAdvisor (30/page) under the hood to reach this number.",
            "default": 50
          },
          "includeDetails": {
            "title": "Also fetch full detail for each result",
            "type": "boolean",
            "description": "When on, every hotel / restaurant / attraction / vacation-rental search result is enriched with a second call that pulls its full detail page (amenities, hours, menu/room info, longer description, more photos). **This roughly doubles the per-result cost** (a `place-detail` event is charged on top of the search-result event). Not applied to cruises. Leave off for a fast, cheap listing-only run.",
            "default": false
          },
          "currency": {
            "title": "Currency",
            "type": "string",
            "description": "Currency for hotel prices. Pick from the list or type any 3-letter ISO 4217 code.",
            "default": "USD"
          },
          "hotelCheckIn": {
            "title": "Check-in date",
            "pattern": "^(\\d{4})-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$|^(\\d+)\\s*(day|week|month|year)s?$",
            "type": "string",
            "description": "Optional. When both check-in and check-out are set, hotel results carry real dated nightly prices. Format `YYYY-MM-DD` or relative like `3 days`, `1 week`."
          },
          "hotelCheckOut": {
            "title": "Check-out date",
            "pattern": "^(\\d{4})-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$|^(\\d+)\\s*(day|week|month|year)s?$",
            "type": "string",
            "description": "Optional. Pair with check-in for dated prices. Format `YYYY-MM-DD` or relative like `5 days`."
          },
          "hotelAdults": {
            "title": "Adults",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Guests per room, used for dated pricing.",
            "default": 2
          },
          "hotelRooms": {
            "title": "Rooms",
            "minimum": 1,
            "maximum": 8,
            "type": "integer",
            "description": "Number of rooms, used for dated pricing.",
            "default": 1
          },
          "hotelMinRating": {
            "title": "Minimum traveler rating",
            "enum": [
              "",
              "3",
              "4",
              "5"
            ],
            "type": "string",
            "description": "Keep only hotels at or above this bubble rating.",
            "default": ""
          },
          "hotelClasses": {
            "title": "Star class",
            "uniqueItems": true,
            "type": "array",
            "description": "Hotel star class (the official 1-5 star category). Multi-select.",
            "items": {
              "type": "string",
              "enum": [
                "1_star",
                "2_star",
                "3_star",
                "4_star",
                "5_star"
              ],
              "enumTitles": [
                "★ 1 Star",
                "★★ 2 Star",
                "★★★ 3 Star",
                "★★★★ 4 Star",
                "★★★★★ 5 Star"
              ]
            },
            "default": []
          },
          "hotelStyles": {
            "title": "Hotel style",
            "uniqueItems": true,
            "type": "array",
            "description": "Style / vibe filter. Multi-select.",
            "items": {
              "type": "string",
              "enum": [
                "budget",
                "mid_range",
                "luxury",
                "family",
                "business",
                "romantic",
                "modern"
              ],
              "enumTitles": [
                "Budget",
                "Mid-range",
                "Luxury",
                "Family-friendly",
                "Business",
                "Romantic",
                "Modern / Design"
              ]
            },
            "default": []
          },
          "hotelSort": {
            "title": "Sort hotels by",
            "enum": [
              "BEST_VALUE",
              "TRAVELER_RANKING",
              "DISTANCE",
              "PRICE_LOW_TO_HIGH",
              "PRICE_HIGH_TO_LOW"
            ],
            "type": "string",
            "description": "Order of hotel search results.",
            "default": "BEST_VALUE"
          },
          "restaurantPrice": {
            "title": "Price range",
            "uniqueItems": true,
            "type": "array",
            "description": "Restaurant price band. Multi-select.",
            "items": {
              "type": "string",
              "enum": [
                "10953",
                "10955",
                "10954"
              ],
              "enumTitles": [
                "$ Cheap eats",
                "$$ - $$$ Mid-range",
                "$$$$ Fine dining"
              ]
            },
            "default": []
          },
          "restaurantMealTypes": {
            "title": "Meal type",
            "uniqueItems": true,
            "type": "array",
            "description": "When the restaurant serves. Multi-select.",
            "items": {
              "type": "string",
              "enum": [
                "10597",
                "10598",
                "10599"
              ],
              "enumTitles": [
                "Breakfast",
                "Lunch",
                "Dinner"
              ]
            },
            "default": []
          },
          "restaurantDietary": {
            "title": "Dietary options",
            "uniqueItems": true,
            "type": "array",
            "description": "Dietary restrictions catered for. Multi-select.",
            "items": {
              "type": "string",
              "enum": [
                "10665",
                "10697",
                "10992"
              ],
              "enumTitles": [
                "Vegetarian friendly",
                "Vegan options",
                "Gluten free options"
              ]
            },
            "default": []
          },
          "restaurantCuisines": {
            "title": "Cuisines",
            "uniqueItems": true,
            "type": "array",
            "description": "Filter restaurants by cuisine. Multi-select - pick by name, no IDs to look up. Leave empty for all cuisines.",
            "items": {
              "type": "string",
              "enum": [
                "5086",
                "4617",
                "10654",
                "10659",
                "10649",
                "9908",
                "5473",
                "5379",
                "10346",
                "10660",
                "5110",
                "10655",
                "10664",
                "10661",
                "10675",
                "10663",
                "10626",
                "10687",
                "10633",
                "10632",
                "10639",
                "10749",
                "10653",
                "10643",
                "10345",
                "10651",
                "10668",
                "10641",
                "10642",
                "10640",
                "10682",
                "10670",
                "10683",
                "10646",
                "10686",
                "10679",
                "10648",
                "10671",
                "10669",
                "10666"
              ],
              "enumTitles": [
                "French",
                "Italian",
                "European",
                "Asian",
                "Mediterranean",
                "American",
                "Japanese",
                "Chinese",
                "Indian",
                "Thai",
                "Mexican",
                "Spanish",
                "Greek",
                "Korean",
                "Vietnamese",
                "Turkish",
                "Lebanese",
                "Middle Eastern",
                "Moroccan",
                "African",
                "Latin",
                "South American",
                "Sushi",
                "Seafood",
                "Steakhouse",
                "Barbecue",
                "Grill",
                "Pizza",
                "Cafe",
                "Bar",
                "Wine Bar",
                "Pub",
                "Gastropub",
                "Fast Food",
                "Street Food",
                "Healthy",
                "International",
                "Fusion",
                "Contemporary",
                "Deli"
              ]
            },
            "default": []
          },
          "restaurantRatingMin": {
            "title": "Minimum traveler rating",
            "enum": [
              "",
              "3",
              "4",
              "5"
            ],
            "type": "string",
            "description": "Keep only restaurants at or above this bubble rating.",
            "default": ""
          },
          "restaurantSort": {
            "title": "Sort restaurants by",
            "enum": [
              "FEATURED",
              "POPULARITY",
              "RELEVANCE",
              "AVAILABILITY"
            ],
            "type": "string",
            "description": "Order of restaurant search results.",
            "default": "FEATURED"
          },
          "cruiseDestination": {
            "title": "Cruise destination",
            "type": "string",
            "description": "Cruise region - e.g. Caribbean, Mediterranean, Alaska, Bahamas. Type a name or paste a TripAdvisor cruise destination URL. At least one of cruise destination or cruise line is required when 'Cruises' is selected.",
            "default": ""
          },
          "cruiseLine": {
            "title": "Cruise line",
            "type": "string",
            "description": "Cruise line - e.g. Royal Caribbean, MSC, Carnival, Norwegian, Disney. Type a name or paste a TripAdvisor cruise line URL.",
            "default": ""
          },
          "stopOnError": {
            "title": "Stop the whole run on the first error",
            "type": "boolean",
            "description": "If on, the run aborts as soon as one place type fails (e.g. UPSTREAM_BLOCKED). If off (default), the failing vertical is logged with a diagnostic row and the run continues with the others.",
            "default": false
          }
        }
      },
      "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}