{
  "data": {
    "id": "pC10E3fvhtVcxxnKW",
    "actId": "emd5iwBYTATSKu8eg",
    "userId": "NL4ThgItAwaoBlffQ",
    "startedAt": "2026-11-10T14:53:41.472Z",
    "finishedAt": "2026-11-10T14:54:10.194Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "CLI"
    },
    "stats": {
      "durationMillis": 28637,
      "runTimeSecs": 28.637,
      "computeUnits": 0.03181888888888889,
      "imageSizeBytes": 3205175296
    },
    "options": {
      "useCache": true,
      "betaPackages": false,
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "createdByOrganizationMemberUserId": "zifX0mkAFMHe8CatY",
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"Kayak Flight, Hotel & Cheap Destination Finder Input\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"properties\": {\n    \"mode\": {\n      \"title\": \"What do you want to search?\",\n      \"type\": \"string\",\n      \"description\": \"Search live flights, search live hotel rates, discover cheap destinations from an airport, or scrape specific Kayak URLs.\",\n      \"default\": \"searchFlights\",\n      \"prefill\": \"searchFlights\",\n      \"enum\": [\n        \"searchFlights\",\n        \"searchHotels\",\n        \"exploreDeals\",\n        \"byUrls\"\n      ],\n      \"enumTitles\": [\n        \"Search flights\",\n        \"Search hotels\",\n        \"Explore cheap destinations\",\n        \"Scrape specific URLs\"\n      ],\n      \"editor\": \"select\",\n      \"sectionCaption\": \"1. Search mode\",\n      \"sectionDescription\": \"Pick one mode. Fields that do not apply to the chosen mode are ignored.\"\n    },\n    \"site\": {\n      \"title\": \"Kayak site\",\n      \"type\": \"string\",\n      \"description\": \"Country site used for the search. It determines the currency and point of sale (for example kayak.co.uk returns GBP).\",\n      \"default\": \"kayak.com\",\n      \"prefill\": \"kayak.com\",\n      \"enum\": [\n        \"kayak.com\",\n        \"kayak.co.uk\",\n        \"kayak.ca\",\n        \"kayak.com.au\",\n        \"kayak.co.in\",\n        \"kayak.co.nz\",\n        \"kayak.ie\",\n        \"kayak.de\",\n        \"kayak.fr\",\n        \"kayak.es\",\n        \"kayak.it\",\n        \"kayak.com.mx\",\n        \"kayak.com.br\"\n      ],\n      \"enumTitles\": [\n        \"United States (USD)\",\n        \"United Kingdom (GBP)\",\n        \"Canada (CAD)\",\n        \"Australia (AUD)\",\n        \"India (INR)\",\n        \"New Zealand (NZD)\",\n        \"Ireland (EUR)\",\n        \"Germany (EUR)\",\n        \"France (EUR)\",\n        \"Spain (EUR)\",\n        \"Italy (EUR)\",\n        \"Mexico (MXN)\",\n        \"Brazil (BRL)\"\n      ],\n      \"editor\": \"select\"\n    },\n    \"origin\": {\n      \"title\": \"Origin airport or city\",\n      \"type\": \"string\",\n      \"description\": \"Airport or city code to fly from, for example NYC, JFK or New York. Used by flights and cheap-destination modes.\",\n      \"editor\": \"textfield\",\n      \"prefill\": \"NYC\",\n      \"sectionCaption\": \"2. Flights\",\n      \"sectionDescription\": \"Used by the Search flights mode. Dates default to roughly one month from today.\",\n      \"default\": \"NYC\"\n    },\n    \"destination\": {\n      \"title\": \"Destination airport or city\",\n      \"type\": \"string\",\n      \"description\": \"Airport or city code to fly to, for example LON, LHR or London. In hotels mode this is the city or area to stay in.\",\n      \"editor\": \"textfield\",\n      \"prefill\": \"LON\",\n      \"default\": \"LON\"\n    },\n    \"departDate\": {\n      \"title\": \"Departure date / check-in\",\n      \"type\": \"string\",\n      \"description\": \"Departure date (flights) or check-in date (hotels) in YYYY-MM-DD format. Leave empty for about 30 days from today.\",\n      \"editor\": \"textfield\"\n    },\n    \"returnDate\": {\n      \"title\": \"Return date / check-out\",\n      \"type\": \"string\",\n      \"description\": \"Return date (flights) or check-out date (hotels) in YYYY-MM-DD format. Leave empty for seven days after departure.\",\n      \"editor\": \"textfield\"\n    },\n    \"tripType\": {\n      \"title\": \"Trip type\",\n      \"type\": \"string\",\n      \"description\": \"One-way or round-trip flight.\",\n      \"default\": \"round-trip\",\n      \"prefill\": \"round-trip\",\n      \"enum\": [\n        \"one-way\",\n        \"round-trip\"\n      ],\n      \"enumTitles\": [\n        \"One way\",\n        \"Round trip\"\n      ],\n      \"editor\": \"select\"\n    },\n    \"cabinClass\": {\n      \"title\": \"Cabin class\",\n      \"type\": \"string\",\n      \"description\": \"Cabin class for the flight search.\",\n      \"default\": \"economy\",\n      \"prefill\": \"economy\",\n      \"enum\": [\n        \"economy\",\n        \"premium-economy\",\n        \"business\",\n        \"first\"\n      ],\n      \"enumTitles\": [\n        \"Economy\",\n        \"Premium economy\",\n        \"Business\",\n        \"First\"\n      ],\n      \"editor\": \"select\"\n    },\n    \"adults\": {\n      \"title\": \"Adults\",\n      \"type\": \"integer\",\n      \"description\": \"Number of adult travellers (1-9).\",\n      \"minimum\": 1,\n      \"maximum\": 9,\n      \"default\": 1,\n      \"prefill\": 1,\n      \"editor\": \"number\"\n    },\n    \"children\": {\n      \"title\": \"Children (flights)\",\n      \"type\": \"integer\",\n      \"description\": \"Number of children aged 2-17. Kayak is searched with child ages 8, 10, 12 and 14 for 1-4 children.\",\n      \"minimum\": 0,\n      \"maximum\": 4,\n      \"default\": 0,\n      \"prefill\": 0,\n      \"editor\": \"number\"\n    },\n    \"maxStops\": {\n      \"title\": \"Maximum stops\",\n      \"type\": \"string\",\n      \"description\": \"Limit the number of connections. Applies to flights and cheap-destination searches.\",\n      \"default\": \"any\",\n      \"prefill\": \"any\",\n      \"enum\": [\n        \"any\",\n        \"0\",\n        \"1\",\n        \"2\",\n        \"3\"\n      ],\n      \"enumTitles\": [\n        \"Any number of stops\",\n        \"Nonstop only\",\n        \"Up to 1 stop\",\n        \"Up to 2 stops\",\n        \"Up to 3 stops\"\n      ],\n      \"editor\": \"select\"\n    },\n    \"airlines\": {\n      \"title\": \"Airlines\",\n      \"type\": \"array\",\n      \"description\": \"Only include these airlines, using two-letter IATA codes such as DL, UA or BA. Leave empty for all airlines.\",\n      \"editor\": \"stringList\",\n      \"items\": {\n        \"type\": \"string\"\n      }\n    },\n    \"minPrice\": {\n      \"title\": \"Minimum price\",\n      \"type\": \"integer\",\n      \"description\": \"Minimum price per result in the site currency. Leave empty for no minimum.\",\n      \"minimum\": 0,\n      \"maximum\": 1000000,\n      \"editor\": \"number\"\n    },\n    \"maxPrice\": {\n      \"title\": \"Maximum price\",\n      \"type\": \"integer\",\n      \"description\": \"Maximum price per result (fare for flights, nightly rate for hotels) in the site currency.\",\n      \"minimum\": 0,\n      \"maximum\": 1000000,\n      \"editor\": \"number\"\n    },\n    \"maxDurationMinutes\": {\n      \"title\": \"Maximum flight duration (minutes)\",\n      \"type\": \"integer\",\n      \"description\": \"Maximum outbound flight duration in minutes, for example 720 for 12 hours.\",\n      \"minimum\": 0,\n      \"maximum\": 10000,\n      \"editor\": \"number\"\n    },\n    \"redeyeOnly\": {\n      \"title\": \"Overnight flights only\",\n      \"type\": \"boolean\",\n      \"description\": \"Return only overnight (red-eye) itineraries.\",\n      \"default\": false,\n      \"prefill\": false,\n      \"editor\": \"checkbox\"\n    },\n    \"alliance\": {\n      \"title\": \"Airline alliance\",\n      \"type\": \"string\",\n      \"description\": \"Restrict results to one airline alliance.\",\n      \"default\": \"any\",\n      \"prefill\": \"any\",\n      \"enum\": [\n        \"any\",\n        \"STAR_ALLIANCE\",\n        \"ONEWORLD\",\n        \"SKYTEAM\"\n      ],\n      \"enumTitles\": [\n        \"Any alliance\",\n        \"Star Alliance\",\n        \"Oneworld\",\n        \"SkyTeam\"\n      ],\n      \"editor\": \"select\"\n    },\n    \"wifiOnly\": {\n      \"title\": \"Wi-Fi on board only\",\n      \"type\": \"boolean\",\n      \"description\": \"Return only flights that advertise in-flight Wi-Fi.\",\n      \"default\": false,\n      \"prefill\": false,\n      \"editor\": \"checkbox\"\n    },\n    \"sortBy\": {\n      \"title\": \"Sort flights by\",\n      \"type\": \"string\",\n      \"description\": \"Order of flight results.\",\n      \"default\": \"price\",\n      \"prefill\": \"price\",\n      \"enum\": [\n        \"price\",\n        \"duration\",\n        \"departure\",\n        \"arrival\",\n        \"best\"\n      ],\n      \"enumTitles\": [\n        \"Lowest price\",\n        \"Shortest duration\",\n        \"Earliest departure\",\n        \"Earliest arrival\",\n        \"Kayak's best\"\n      ],\n      \"editor\": \"select\"\n    },\n    \"hotelStars\": {\n      \"title\": \"Hotel stars\",\n      \"type\": \"array\",\n      \"description\": \"Only include hotels with these star ratings (1-5). Leave empty for all star ratings.\",\n      \"editor\": \"stringList\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"sectionCaption\": \"3. Hotels\",\n      \"sectionDescription\": \"Used by the Search hotels mode: dates are check-in/check-out and adults/rooms define the stay.\"\n    },\n    \"rooms\": {\n      \"title\": \"Rooms\",\n      \"type\": \"integer\",\n      \"description\": \"Number of hotel rooms (1-8).\",\n      \"minimum\": 1,\n      \"maximum\": 8,\n      \"default\": 1,\n      \"prefill\": 1,\n      \"editor\": \"number\"\n    },\n    \"minRating\": {\n      \"title\": \"Minimum guest rating\",\n      \"type\": \"string\",\n      \"description\": \"Minimum guest review score shown by Kayak.\",\n      \"default\": \"any\",\n      \"prefill\": \"any\",\n      \"enum\": [\n        \"any\",\n        \"6\",\n        \"7\",\n        \"8\",\n        \"9\"\n      ],\n      \"enumTitles\": [\n        \"Any rating\",\n        \"6+ okay\",\n        \"7+ good\",\n        \"8+ great\",\n        \"9+ excellent\"\n      ],\n      \"editor\": \"select\"\n    },\n    \"freeCancellation\": {\n      \"title\": \"Free cancellation\",\n      \"type\": \"boolean\",\n      \"description\": \"Only show rates that can be cancelled free of charge.\",\n      \"default\": false,\n      \"prefill\": false,\n      \"editor\": \"checkbox\"\n    },\n    \"freeBreakfast\": {\n      \"title\": \"Free breakfast\",\n      \"type\": \"boolean\",\n      \"description\": \"Only show rates that include free breakfast.\",\n      \"default\": false,\n      \"prefill\": false,\n      \"editor\": \"checkbox\"\n    },\n    \"freeInternet\": {\n      \"title\": \"Free internet\",\n      \"type\": \"boolean\",\n      \"description\": \"Only show properties with free internet.\",\n      \"default\": false,\n      \"prefill\": false,\n      \"editor\": \"checkbox\"\n    },\n    \"freeParking\": {\n      \"title\": \"Free parking\",\n      \"type\": \"boolean\",\n      \"description\": \"Only show properties with free parking.\",\n      \"default\": false,\n      \"prefill\": false,\n      \"editor\": \"checkbox\"\n    },\n    \"payLater\": {\n      \"title\": \"Pay later\",\n      \"type\": \"boolean\",\n      \"description\": \"Only show rates that can be paid at the property.\",\n      \"default\": false,\n      \"prefill\": false,\n      \"editor\": \"checkbox\"\n    },\n    \"amenities\": {\n      \"title\": \"Amenities\",\n      \"type\": \"array\",\n      \"description\": \"Kayak amenity IDs that must be present, for example wifi, pool, fitness, parking.\",\n      \"editor\": \"stringList\",\n      \"items\": {\n        \"type\": \"string\"\n      }\n    },\n    \"propertyType\": {\n      \"title\": \"Property type\",\n      \"type\": \"string\",\n      \"description\": \"Restrict hotel results to hotels or apartment-style rentals.\",\n      \"default\": \"any\",\n      \"prefill\": \"any\",\n      \"enum\": [\n        \"any\",\n        \"hotel\",\n        \"rental:apartment\"\n      ],\n      \"enumTitles\": [\n        \"Any property type\",\n        \"Hotels\",\n        \"Apartments\"\n      ],\n      \"editor\": \"select\"\n    },\n    \"dealsOnly\": {\n      \"title\": \"Member/private deals only\",\n      \"type\": \"boolean\",\n      \"description\": \"Only show properties flagged as having member or private deals.\",\n      \"default\": false,\n      \"prefill\": false,\n      \"editor\": \"checkbox\"\n    },\n    \"hotelSortBy\": {\n      \"title\": \"Sort hotels by\",\n      \"type\": \"string\",\n      \"description\": \"Order of hotel results.\",\n      \"default\": \"recommended\",\n      \"prefill\": \"recommended\",\n      \"enum\": [\n        \"recommended\",\n        \"price_low\",\n        \"rating\",\n        \"distance\",\n        \"stars\"\n      ],\n      \"enumTitles\": [\n        \"Recommended\",\n        \"Lowest nightly price\",\n        \"Guest rating\",\n        \"Distance from centre\",\n        \"Star rating\"\n      ],\n      \"editor\": \"select\"\n    },\n    \"maxBudget\": {\n      \"title\": \"Maximum deal price\",\n      \"type\": \"integer\",\n      \"description\": \"For cheap-destination mode, the maximum round-trip price per person in the site currency.\",\n      \"minimum\": 0,\n      \"maximum\": 1000000,\n      \"editor\": \"number\",\n      \"sectionCaption\": \"4. Cheap destinations\",\n      \"sectionDescription\": \"Used by the Explore cheap destinations mode. Results are live Kayak explore deals from the origin airport.\"\n    },\n    \"minTripDays\": {\n      \"title\": \"Minimum trip length (days)\",\n      \"type\": \"integer\",\n      \"description\": \"Minimum number of days for an explore deal.\",\n      \"minimum\": 1,\n      \"maximum\": 60,\n      \"default\": 1,\n      \"prefill\": 1,\n      \"editor\": \"number\"\n    },\n    \"maxTripDays\": {\n      \"title\": \"Maximum trip length (days)\",\n      \"type\": \"integer\",\n      \"description\": \"Maximum number of days for an explore deal.\",\n      \"minimum\": 1,\n      \"maximum\": 60,\n      \"default\": 30,\n      \"prefill\": 30,\n      \"editor\": \"number\"\n    },\n    \"destinationCountry\": {\n      \"title\": \"Destination country\",\n      \"type\": \"string\",\n      \"description\": \"Optional country name or ISO code to keep only deals in that country, for example Spain or ES.\",\n      \"editor\": \"textfield\"\n    },\n    \"urls\": {\n      \"title\": \"Kayak URLs\",\n      \"type\": \"array\",\n      \"description\": \"Flight, hotel or explore URLs copied from your browser, for example https://www.kayak.com/flights/NYC-LON/2026-12-10/2026-12-17.\",\n      \"editor\": \"stringList\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"sectionCaption\": \"5. Specific URLs\",\n      \"sectionDescription\": \"Used by the Scrape specific URLs mode. Flight, hotel, explore and flight-route URLs are detected automatically.\"\n    },\n    \"maxItems\": {\n      \"title\": \"Maximum results\",\n      \"type\": \"integer\",\n      \"description\": \"Maximum number of records to save across the whole run.\",\n      \"minimum\": 1,\n      \"maximum\": 1000,\n      \"default\": 50,\n      \"prefill\": 3,\n      \"editor\": \"number\",\n      \"sectionCaption\": \"6. Output\",\n      \"sectionDescription\": \"Keep this small for scheduled runs; increase it for bulk datasets.\"\n    }\n  }\n}",
    "readme": "# Kayak Flight, Hotel & Cheap Destination Finder\n\nKayak compares fares and rates from airlines, hotels and hundreds of travel sellers. This actor turns Kayak search pages into clean JSON: live flight itineraries, live hotel rates, cheap destinations from an origin airport, or any Kayak search URL you paste in.\n\n## What this actor does\n\n- **Search flights** between two airports or cities, on chosen dates and cabin, with nonstop/airline/price/duration/alliance filters, sorting and pagination.\n- **Search hotels** for a city and stay dates, with star, guest-rating, price, free-cancellation, breakfast, internet, parking, amenity and property-type filters.\n- **Explore cheap destinations** from an origin airport, optionally capped by budget, stops and trip length.\n- **Scrape specific URLs**: paste Kayak flight, hotel, explore or flight-route URLs and the actor detects what each one is.\n- **Rich records**: every itinerary includes all segments, airlines, flight numbers, aircraft, layovers, booking providers, baggage and a booking link; every hotel includes stars, guest rating, review count, coordinates, images, amenities, description and the cheapest provider.\n- **Honest source labels**: each record has `accessMethod` (`live`, `flight-routes` or `wayback`) and, for archives, `archivedAt`. Route-page and archived prices are snapshots and are marked with `priceNote`.\n- Omits fields that a particular result does not have, so records never contain blank placeholders.\n\n## Modes\n\n| Mode | What it returns |\n|------|-----------------|\n| `searchFlights` | Live itineraries for one route and date (or date range for a round trip). |\n| `searchHotels` | Live hotel rates for a city and check-in/check-out dates. |\n| `exploreDeals` | Cheap round-trip destinations from one origin airport. |\n| `byUrls` | Records scraped from the Kayak URLs you provide. |\n\n## Output per record\n\nEvery record starts with `recordType`, one of `kayakFlight`, `kayakHotel` or `kayakExplore`.\n\n### Flight records (`searchFlights`, `byUrls` flight URLs, `flight-routes` fallback)\n\n| Field | Description |\n|-------|-------------|\n| `flightId` | Kayak result identifier (or a stable route/time key for route-page records). |\n| `origin` / `destination` | Actual airport codes of the itinerary. |\n| `originCity` / `destinationCity` | City names for the airports. |\n| `originAirportName` / `destinationAirportName` | Full airport names. |\n| `departDate` / `returnDate` | Departure and return dates. |\n| `price` | Cheapest fare Kayak displays for the itinerary, in `currency`. |\n| `currency` | Price currency for the selected Kayak site. |\n| `airline` / `airlines` | First operating airline and all airlines in the itinerary. |\n| `stops` / `returnStops` | Connections on the outbound and return legs (0 = nonstop). |\n| `duration` / `durationMinutes` | Outbound duration as text and minutes. |\n| `totalDurationMinutes` | Outbound + return duration. |\n| `departTime` / `arrivalTime` | Outbound departure and arrival times. |\n| `returnDepartTime` / `returnArrivalTime` | Return-leg times when present. |\n| `outbound` / `return` | Full leg objects with every segment, layover, flight number and aircraft. |\n| `flightNumbers`, `aircraft` | Convenience lists across the itinerary. |\n| `cabinClass`, `tripType` | Search cabin and one-way/round-trip. |\n| `providerName` / `providerCode` | Cheapest booking provider. |\n| `providers` | Up to 20 booking options with price, total price, provider and booking link. |\n| `baggage` | Carry-on/checked-bag restrictions and fees where Kayak reports them. |\n| `deepLink` / `bookingUrl` | Best booking link. `shareableUrl` links back to the itinerary on Kayak. |\n| `accessMethod` | `live`, `flight-routes` or `wayback`. |\n| `sourceUrl` | URL the record was read from. |\n| `priceNote` | Present on fallback records; explains that the price is a route-level snapshot. |\n| `archivedAt` | Archive timestamp for `wayback` records. |\n| `scrapedAt` | UTC timestamp when the record was produced. |\n\n### Hotel records (`searchHotels`, `byUrls` hotel URLs)\n\n| Field | Description |\n|-------|-------------|\n| `hotelId` / `flightId` | Kayak hotel identifier. |\n| `hotelName` / `airline` | Hotel name (`airline` is kept for backward compatibility). |\n| `stars`, `rating`, `reviewCount`, `ratingCategory` | Star rating and guest reviews. |\n| `price` / `totalPrice` | Nightly rate and total stay price. |\n| `currency` | Rate currency. |\n| `departDate` / `returnDate` | Check-in and check-out. |\n| `checkIn` / `checkOut` / `nights` | Stay dates and number of nights. |\n| `adults` / `rooms` | Occupancy used for the search. |\n| `latitude` / `longitude`, `distanceFromCenter` | Location and distance from the city centre. |\n| `city`, `propertyType`, `brandName` | Location and property classification. |\n| `imageUrl` / `images` | Primary image and up to 10 image URLs. |\n| `description` / `descriptionAttribution` | Hotel description and its source. |\n| `amenities` / `amenityCodes` | Amenity names and Kayak codes. |\n| `freeCancellation` / `freebies` | Cancellation and freebie information for the cheapest rate. |\n| `providerName` / `providerCode`, `providers` | Cheapest provider plus up to 10 provider offers. |\n| `bookingUrl` / `deepLink` | Booking link. `detailsUrl` opens the hotel on Kayak. |\n| `accessMethod`, `sourceUrl`, `scrapedAt` | Source and timing metadata. |\n\n### Cheap-destination records (`exploreDeals`)\n\n| Field | Description |\n|-------|-------------|\n| `flightId` | Origin-destination key. |\n| `origin` / `destination` | Origin city/airport code and destination airport code. |\n| `originCity` / `destinationCity` / `destinationCountry` | City and country names. |\n| `destinationCountryCode`, `departureAirportCode`, `airportName` | Extra location detail. |\n| `price` / `currency` | Lowest round-trip price shown. |\n| `airline` / `airlineCode` | Airline on the cheapest itinerary. |\n| `stops` / `duration` / `durationMinutes` | Connections and maximum itinerary duration. |\n| `departDate` / `returnDate` / `tripDays` | Suggested travel dates and length of stay. |\n| `imageUrl` / `deepLink` | Destination image and Kayak flight link. |\n| `latitude` / `longitude` | Destination airport coordinates. |\n| `accessMethod`, `sourceUrl`, `scrapedAt` | Source and timing metadata. |\n\n## Input\n\n| Field | Type | Default | Description |\n|-------|------|---------|-------------|\n| `mode` | String (select) | `searchFlights` | `searchFlights`, `searchHotels`, `exploreDeals` or `byUrls`. |\n| `site` | String (select) | `kayak.com` | Country site, which also sets the currency. |\n| `origin` | String | `NYC` | Origin airport or city for flights and explore. |\n| `destination` | String | `LON` | Destination airport or city; in hotels mode, the city to stay in. |\n| `departDate` | String | — | Departure date or hotel check-in (`YYYY-MM-DD`). Defaults to about 30 days from today. |\n| `returnDate` | String | — | Return date or hotel check-out (`YYYY-MM-DD`). Defaults to seven days after departure. |\n| `tripType` | String (select) | `round-trip` | `one-way` or `round-trip`. |\n| `cabinClass` | String (select) | `economy` | `economy`, `premium-economy`, `business` or `first`. |\n| `adults` | Integer | 1 | Adult travellers (1-9). |\n| `children` | Integer | 0 | Children aged 2-17 (0-4). |\n| `maxStops` | String (select) | `any` | `any`, `0`, `1`, `2` or `3`. |\n| `airlines` | Array | – | Two-letter IATA airline codes. |\n| `minPrice` / `maxPrice` | Integer | – | Price range in the site currency. |\n| `maxDurationMinutes` | Integer | – | Maximum outbound flight duration. |\n| `redeyeOnly` | Boolean | false | Overnight flights only. |\n| `alliance` | String (select) | `any` | `any`, `STAR_ALLIANCE`, `ONEWORLD` or `SKYTEAM`. |\n| `wifiOnly` | Boolean | false | Flights advertising Wi-Fi only. |\n| `sortBy` | String (select) | `price` | `price`, `duration`, `departure`, `arrival` or `best`. |\n| `hotelStars` | Array | – | Star ratings to include (`1`-`5`). |\n| `rooms` | Integer | 1 | Hotel rooms (1-8). |\n| `minRating` | String (select) | `any` | `any`, `6`, `7`, `8` or `9`. |\n| `freeCancellation`, `freeBreakfast`, `freeInternet`, `freeParking`, `payLater` | Boolean | false | Rate/property filters. |\n| `amenities` | Array | – | Kayak amenity IDs (for example `wifi`, `pool`). |\n| `propertyType` | String (select) | `any` | `any`, `hotel` or `rental:apartment`. |\n| `dealsOnly` | Boolean | false | Member/private deals only. |\n| `hotelSortBy` | String (select) | `recommended` | `recommended`, `price_low`, `rating`, `distance` or `stars`. |\n| `maxBudget` | Integer | – | Maximum explore-deal price. |\n| `minTripDays` / `maxTripDays` | Integer | 1 / 30 | Explore trip-length range. |\n| `destinationCountry` | String | – | Keep explore deals in one country (name or ISO code). |\n| `urls` | Array | – | Kayak URLs for `byUrls` mode. |\n| `maxItems` | Integer | 50 | Maximum records for the whole run (1-1000). |\n\n### Example: round-trip flight search\n\n```json\n{\n  \"mode\": \"searchFlights\",\n  \"origin\": \"NYC\",\n  \"destination\": \"LON\",\n  \"departDate\": \"2026-12-10\",\n  \"returnDate\": \"2026-12-17\",\n  \"tripType\": \"round-trip\",\n  \"cabinClass\": \"economy\",\n  \"adults\": 1,\n  \"maxStops\": \"0\",\n  \"airlines\": [\"BA\", \"VS\"],\n  \"sortBy\": \"price\",\n  \"maxItems\": 50\n}\n```\n\n### Example: hotels with filters\n\n```json\n{\n  \"mode\": \"searchHotels\",\n  \"destination\": \"London\",\n  \"departDate\": \"2026-12-10\",\n  \"returnDate\": \"2026-12-17\",\n  \"adults\": 2,\n  \"rooms\": 1,\n  \"hotelStars\": [\"4\", \"5\"],\n  \"minRating\": \"8\",\n  \"freeCancellation\": true,\n  \"hotelSortBy\": \"price_low\",\n  \"maxItems\": 40\n}\n```\n\n### Example: cheap destinations under a budget\n\n```json\n{\n  \"mode\": \"exploreDeals\",\n  \"origin\": \"NYC\",\n  \"maxBudget\": 500,\n  \"maxStops\": \"0\",\n  \"minTripDays\": 4,\n  \"maxTripDays\": 10,\n  \"destinationCountry\": \"Spain\",\n  \"maxItems\": 30\n}\n```\n\n### Example: saved URLs\n\n```json\n{\n  \"mode\": \"byUrls\",\n  \"urls\": [\n    \"https://www.kayak.com/flights/NYC-LON/2026-12-10/2026-12-17\",\n    \"https://www.kayak.com/hotels/London/2026-12-10/2026-12-17/2adults\"\n  ],\n  \"maxItems\": 60\n}\n```\n\n## How live access works\n\nKayak renders search results with JavaScript and streams them from its own internal search API. The actor opens the search in a real browser, captures the page's own session, and then reads the result pages directly. No account, cookie or proxy setup is required. If the direct search is blocked, the actor automatically retries through the platform's datacenter proxy.\n\nWhen `origin` or `destination` is a city name such as `New York`, the actor resolves it to Kayak's metro or airport code (`NYC`) before searching. Three-letter IATA codes are used as-is.\n\nIf a **flight** search cannot be read live, the actor falls back to Kayak's public flight-route page for the same route. If that page is unavailable, it tries the Wayback Machine copy of the route page. Fallback records are real Kayak data but are **route-level snapshots, not date-specific live fares**; they carry `accessMethod` = `flight-routes` or `wayback` and a `priceNote` saying so. Hotel and explore searches have no such fallback and report the block in the run status message.\n\n## Limitations\n\n- Hotel and explore searches have no fallback when Kayak blocks live access; the run status message says when that happens.\n- Route-page and Wayback fallback records are route-level snapshots. Price and airline filters apply to them; stop, duration and cabin filters and sorting do not.\n- Kayak's hotel URL accepts adults and rooms, not child ages, so hotel searches use adults and rooms only.\n- Time-of-day flight filters are not exposed because Kayak rejects them in the filter syntax; use `sortBy` `departure` or `arrival` instead.\n\n## Use cases\n\n- **Fare comparison**: compare airlines and providers for a route and dates.\n- **Travel inspiration**: find cheap destinations from your home airport under a budget.\n- **Hotel rate checks**: pull nightly and total rates with ratings and amenities.\n- **Price tracking**: schedule the same search and store each run's dataset.\n- **URL re-scraping**: turn saved Kayak search links into structured data.\n\n## FAQ\n\n**Do I need a Kayak account or API key?**\nNo. The actor reads publicly available search results and needs no credentials.\n\n**Which currency will prices be in?**\nThe currency of the selected Kayak country site. Set `site` to `kayak.co.uk` for GBP, `kayak.de` for EUR, and so on.\n\n**Why do some records say `accessMethod: flight-routes`?**\nKayak blocked the live search for that route. The record comes from Kayak's flight-route page and is a snapshot, so treat its price as indicative and re-run later for a live fare.\n\n**What does `price` mean for hotels?**\n`price` is the nightly rate from the cheapest provider; `totalPrice` is the total for the stay.\n\n**Does `stops: 0` mean nonstop?**\nYes. Flights also have `returnStops` for the return leg.\n\n**Can I search one-way flights?**\nYes. Set `tripType` to `one-way`; `returnDate` is ignored.\n\n**How current are prices?**\n`live` records are read from Kayak during the run. Route-page and `wayback` records are snapshots and can be stale; see `priceNote` and `archivedAt`.\n\n**Is this affiliated with Kayak?**\nNo. This is an independent data extraction tool and is not affiliated with, endorsed by, or sponsored by Kayak Software Corporation.\n",
    "actorDefinition": {
      "actorSpecification": 1,
      "name": "kayak-flight-hotel-and-cheap-destination-finder",
      "title": "Kayak Flight, Hotel & Cheap Destination Finder",
      "description": "Searches Kayak for live flights, hotel rates, cheap destinations and saved URLs. Returns price, airline or hotel, stops, rating and booking link, with live and route-snapshot records labelled.",
      "version": "1.0",
      "meta": {
        "templateId": "python-playwright"
      },
      "input": {
        "title": "Kayak Flight, Hotel & Cheap Destination Finder Input",
        "type": "object",
        "schemaVersion": 1,
        "properties": {
          "mode": {
            "title": "What do you want to search?",
            "type": "string",
            "description": "Search live flights, search live hotel rates, discover cheap destinations from an airport, or scrape specific Kayak URLs.",
            "default": "searchFlights",
            "prefill": "searchFlights",
            "enum": [
              "searchFlights",
              "searchHotels",
              "exploreDeals",
              "byUrls"
            ],
            "enumTitles": [
              "Search flights",
              "Search hotels",
              "Explore cheap destinations",
              "Scrape specific URLs"
            ],
            "editor": "select",
            "sectionCaption": "1. Search mode",
            "sectionDescription": "Pick one mode. Fields that do not apply to the chosen mode are ignored."
          },
          "site": {
            "title": "Kayak site",
            "type": "string",
            "description": "Country site used for the search. It determines the currency and point of sale (for example kayak.co.uk returns GBP).",
            "default": "kayak.com",
            "prefill": "kayak.com",
            "enum": [
              "kayak.com",
              "kayak.co.uk",
              "kayak.ca",
              "kayak.com.au",
              "kayak.co.in",
              "kayak.co.nz",
              "kayak.ie",
              "kayak.de",
              "kayak.fr",
              "kayak.es",
              "kayak.it",
              "kayak.com.mx",
              "kayak.com.br"
            ],
            "enumTitles": [
              "United States (USD)",
              "United Kingdom (GBP)",
              "Canada (CAD)",
              "Australia (AUD)",
              "India (INR)",
              "New Zealand (NZD)",
              "Ireland (EUR)",
              "Germany (EUR)",
              "France (EUR)",
              "Spain (EUR)",
              "Italy (EUR)",
              "Mexico (MXN)",
              "Brazil (BRL)"
            ],
            "editor": "select"
          },
          "origin": {
            "title": "Origin airport or city",
            "type": "string",
            "description": "Airport or city code to fly from, for example NYC, JFK or New York. Used by flights and cheap-destination modes.",
            "editor": "textfield",
            "prefill": "NYC",
            "sectionCaption": "2. Flights",
            "sectionDescription": "Used by the Search flights mode. Dates default to roughly one month from today.",
            "default": "NYC"
          },
          "destination": {
            "title": "Destination airport or city",
            "type": "string",
            "description": "Airport or city code to fly to, for example LON, LHR or London. In hotels mode this is the city or area to stay in.",
            "editor": "textfield",
            "prefill": "LON",
            "default": "LON"
          },
          "departDate": {
            "title": "Departure date / check-in",
            "type": "string",
            "description": "Departure date (flights) or check-in date (hotels) in YYYY-MM-DD format. Leave empty for about 30 days from today.",
            "editor": "textfield"
          },
          "returnDate": {
            "title": "Return date / check-out",
            "type": "string",
            "description": "Return date (flights) or check-out date (hotels) in YYYY-MM-DD format. Leave empty for seven days after departure.",
            "editor": "textfield"
          },
          "tripType": {
            "title": "Trip type",
            "type": "string",
            "description": "One-way or round-trip flight.",
            "default": "round-trip",
            "prefill": "round-trip",
            "enum": [
              "one-way",
              "round-trip"
            ],
            "enumTitles": [
              "One way",
              "Round trip"
            ],
            "editor": "select"
          },
          "cabinClass": {
            "title": "Cabin class",
            "type": "string",
            "description": "Cabin class for the flight search.",
            "default": "economy",
            "prefill": "economy",
            "enum": [
              "economy",
              "premium-economy",
              "business",
              "first"
            ],
            "enumTitles": [
              "Economy",
              "Premium economy",
              "Business",
              "First"
            ],
            "editor": "select"
          },
          "adults": {
            "title": "Adults",
            "type": "integer",
            "description": "Number of adult travellers (1-9).",
            "minimum": 1,
            "maximum": 9,
            "default": 1,
            "prefill": 1,
            "editor": "number"
          },
          "children": {
            "title": "Children (flights)",
            "type": "integer",
            "description": "Number of children aged 2-17. Kayak is searched with child ages 8, 10, 12 and 14 for 1-4 children.",
            "minimum": 0,
            "maximum": 4,
            "default": 0,
            "prefill": 0,
            "editor": "number"
          },
          "maxStops": {
            "title": "Maximum stops",
            "type": "string",
            "description": "Limit the number of connections. Applies to flights and cheap-destination searches.",
            "default": "any",
            "prefill": "any",
            "enum": [
              "any",
              "0",
              "1",
              "2",
              "3"
            ],
            "enumTitles": [
              "Any number of stops",
              "Nonstop only",
              "Up to 1 stop",
              "Up to 2 stops",
              "Up to 3 stops"
            ],
            "editor": "select"
          },
          "airlines": {
            "title": "Airlines",
            "type": "array",
            "description": "Only include these airlines, using two-letter IATA codes such as DL, UA or BA. Leave empty for all airlines.",
            "editor": "stringList",
            "items": {
              "type": "string"
            }
          },
          "minPrice": {
            "title": "Minimum price",
            "type": "integer",
            "description": "Minimum price per result in the site currency. Leave empty for no minimum.",
            "minimum": 0,
            "maximum": 1000000,
            "editor": "number"
          },
          "maxPrice": {
            "title": "Maximum price",
            "type": "integer",
            "description": "Maximum price per result (fare for flights, nightly rate for hotels) in the site currency.",
            "minimum": 0,
            "maximum": 1000000,
            "editor": "number"
          },
          "maxDurationMinutes": {
            "title": "Maximum flight duration (minutes)",
            "type": "integer",
            "description": "Maximum outbound flight duration in minutes, for example 720 for 12 hours.",
            "minimum": 0,
            "maximum": 10000,
            "editor": "number"
          },
          "redeyeOnly": {
            "title": "Overnight flights only",
            "type": "boolean",
            "description": "Return only overnight (red-eye) itineraries.",
            "default": false,
            "prefill": false,
            "editor": "checkbox"
          },
          "alliance": {
            "title": "Airline alliance",
            "type": "string",
            "description": "Restrict results to one airline alliance.",
            "default": "any",
            "prefill": "any",
            "enum": [
              "any",
              "STAR_ALLIANCE",
              "ONEWORLD",
              "SKYTEAM"
            ],
            "enumTitles": [
              "Any alliance",
              "Star Alliance",
              "Oneworld",
              "SkyTeam"
            ],
            "editor": "select"
          },
          "wifiOnly": {
            "title": "Wi-Fi on board only",
            "type": "boolean",
            "description": "Return only flights that advertise in-flight Wi-Fi.",
            "default": false,
            "prefill": false,
            "editor": "checkbox"
          },
          "sortBy": {
            "title": "Sort flights by",
            "type": "string",
            "description": "Order of flight results.",
            "default": "price",
            "prefill": "price",
            "enum": [
              "price",
              "duration",
              "departure",
              "arrival",
              "best"
            ],
            "enumTitles": [
              "Lowest price",
              "Shortest duration",
              "Earliest departure",
              "Earliest arrival",
              "Kayak's best"
            ],
            "editor": "select"
          },
          "hotelStars": {
            "title": "Hotel stars",
            "type": "array",
            "description": "Only include hotels with these star ratings (1-5). Leave empty for all star ratings.",
            "editor": "stringList",
            "items": {
              "type": "string"
            },
            "sectionCaption": "3. Hotels",
            "sectionDescription": "Used by the Search hotels mode: dates are check-in/check-out and adults/rooms define the stay."
          },
          "rooms": {
            "title": "Rooms",
            "type": "integer",
            "description": "Number of hotel rooms (1-8).",
            "minimum": 1,
            "maximum": 8,
            "default": 1,
            "prefill": 1,
            "editor": "number"
          },
          "minRating": {
            "title": "Minimum guest rating",
            "type": "string",
            "description": "Minimum guest review score shown by Kayak.",
            "default": "any",
            "prefill": "any",
            "enum": [
              "any",
              "6",
              "7",
              "8",
              "9"
            ],
            "enumTitles": [
              "Any rating",
              "6+ okay",
              "7+ good",
              "8+ great",
              "9+ excellent"
            ],
            "editor": "select"
          },
          "freeCancellation": {
            "title": "Free cancellation",
            "type": "boolean",
            "description": "Only show rates that can be cancelled free of charge.",
            "default": false,
            "prefill": false,
            "editor": "checkbox"
          },
          "freeBreakfast": {
            "title": "Free breakfast",
            "type": "boolean",
            "description": "Only show rates that include free breakfast.",
            "default": false,
            "prefill": false,
            "editor": "checkbox"
          },
          "freeInternet": {
            "title": "Free internet",
            "type": "boolean",
            "description": "Only show properties with free internet.",
            "default": false,
            "prefill": false,
            "editor": "checkbox"
          },
          "freeParking": {
            "title": "Free parking",
            "type": "boolean",
            "description": "Only show properties with free parking.",
            "default": false,
            "prefill": false,
            "editor": "checkbox"
          },
          "payLater": {
            "title": "Pay later",
            "type": "boolean",
            "description": "Only show rates that can be paid at the property.",
            "default": false,
            "prefill": false,
            "editor": "checkbox"
          },
          "amenities": {
            "title": "Amenities",
            "type": "array",
            "description": "Kayak amenity IDs that must be present, for example wifi, pool, fitness, parking.",
            "editor": "stringList",
            "items": {
              "type": "string"
            }
          },
          "propertyType": {
            "title": "Property type",
            "type": "string",
            "description": "Restrict hotel results to hotels or apartment-style rentals.",
            "default": "any",
            "prefill": "any",
            "enum": [
              "any",
              "hotel",
              "rental:apartment"
            ],
            "enumTitles": [
              "Any property type",
              "Hotels",
              "Apartments"
            ],
            "editor": "select"
          },
          "dealsOnly": {
            "title": "Member/private deals only",
            "type": "boolean",
            "description": "Only show properties flagged as having member or private deals.",
            "default": false,
            "prefill": false,
            "editor": "checkbox"
          },
          "hotelSortBy": {
            "title": "Sort hotels by",
            "type": "string",
            "description": "Order of hotel results.",
            "default": "recommended",
            "prefill": "recommended",
            "enum": [
              "recommended",
              "price_low",
              "rating",
              "distance",
              "stars"
            ],
            "enumTitles": [
              "Recommended",
              "Lowest nightly price",
              "Guest rating",
              "Distance from centre",
              "Star rating"
            ],
            "editor": "select"
          },
          "maxBudget": {
            "title": "Maximum deal price",
            "type": "integer",
            "description": "For cheap-destination mode, the maximum round-trip price per person in the site currency.",
            "minimum": 0,
            "maximum": 1000000,
            "editor": "number",
            "sectionCaption": "4. Cheap destinations",
            "sectionDescription": "Used by the Explore cheap destinations mode. Results are live Kayak explore deals from the origin airport."
          },
          "minTripDays": {
            "title": "Minimum trip length (days)",
            "type": "integer",
            "description": "Minimum number of days for an explore deal.",
            "minimum": 1,
            "maximum": 60,
            "default": 1,
            "prefill": 1,
            "editor": "number"
          },
          "maxTripDays": {
            "title": "Maximum trip length (days)",
            "type": "integer",
            "description": "Maximum number of days for an explore deal.",
            "minimum": 1,
            "maximum": 60,
            "default": 30,
            "prefill": 30,
            "editor": "number"
          },
          "destinationCountry": {
            "title": "Destination country",
            "type": "string",
            "description": "Optional country name or ISO code to keep only deals in that country, for example Spain or ES.",
            "editor": "textfield"
          },
          "urls": {
            "title": "Kayak URLs",
            "type": "array",
            "description": "Flight, hotel or explore URLs copied from your browser, for example https://www.kayak.com/flights/NYC-LON/2026-12-10/2026-12-17.",
            "editor": "stringList",
            "items": {
              "type": "string"
            },
            "sectionCaption": "5. Specific URLs",
            "sectionDescription": "Used by the Scrape specific URLs mode. Flight, hotel, explore and flight-route URLs are detected automatically."
          },
          "maxItems": {
            "title": "Maximum results",
            "type": "integer",
            "description": "Maximum number of records to save across the whole run.",
            "minimum": 1,
            "maximum": 1000,
            "default": 50,
            "prefill": 3,
            "editor": "number",
            "sectionCaption": "6. Output",
            "sectionDescription": "Keep this small for scheduled runs; increase it for bulk datasets."
          }
        }
      },
      "readme": "# Kayak Flight, Hotel & Cheap Destination Finder\n\nKayak compares fares and rates from airlines, hotels and hundreds of travel sellers. This actor turns Kayak search pages into clean JSON: live flight itineraries, live hotel rates, cheap destinations from an origin airport, or any Kayak search URL you paste in.\n\n## What this actor does\n\n- **Search flights** between two airports or cities, on chosen dates and cabin, with nonstop/airline/price/duration/alliance filters, sorting and pagination.\n- **Search hotels** for a city and stay dates, with star, guest-rating, price, free-cancellation, breakfast, internet, parking, amenity and property-type filters.\n- **Explore cheap destinations** from an origin airport, optionally capped by budget, stops and trip length.\n- **Scrape specific URLs**: paste Kayak flight, hotel, explore or flight-route URLs and the actor detects what each one is.\n- **Rich records**: every itinerary includes all segments, airlines, flight numbers, aircraft, layovers, booking providers, baggage and a booking link; every hotel includes stars, guest rating, review count, coordinates, images, amenities, description and the cheapest provider.\n- **Honest source labels**: each record has `accessMethod` (`live`, `flight-routes` or `wayback`) and, for archives, `archivedAt`. Route-page and archived prices are snapshots and are marked with `priceNote`.\n- Omits fields that a particular result does not have, so records never contain blank placeholders.\n\n## Modes\n\n| Mode | What it returns |\n|------|-----------------|\n| `searchFlights` | Live itineraries for one route and date (or date range for a round trip). |\n| `searchHotels` | Live hotel rates for a city and check-in/check-out dates. |\n| `exploreDeals` | Cheap round-trip destinations from one origin airport. |\n| `byUrls` | Records scraped from the Kayak URLs you provide. |\n\n## Output per record\n\nEvery record starts with `recordType`, one of `kayakFlight`, `kayakHotel` or `kayakExplore`.\n\n### Flight records (`searchFlights`, `byUrls` flight URLs, `flight-routes` fallback)\n\n| Field | Description |\n|-------|-------------|\n| `flightId` | Kayak result identifier (or a stable route/time key for route-page records). |\n| `origin` / `destination` | Actual airport codes of the itinerary. |\n| `originCity` / `destinationCity` | City names for the airports. |\n| `originAirportName` / `destinationAirportName` | Full airport names. |\n| `departDate` / `returnDate` | Departure and return dates. |\n| `price` | Cheapest fare Kayak displays for the itinerary, in `currency`. |\n| `currency` | Price currency for the selected Kayak site. |\n| `airline` / `airlines` | First operating airline and all airlines in the itinerary. |\n| `stops` / `returnStops` | Connections on the outbound and return legs (0 = nonstop). |\n| `duration` / `durationMinutes` | Outbound duration as text and minutes. |\n| `totalDurationMinutes` | Outbound + return duration. |\n| `departTime` / `arrivalTime` | Outbound departure and arrival times. |\n| `returnDepartTime` / `returnArrivalTime` | Return-leg times when present. |\n| `outbound` / `return` | Full leg objects with every segment, layover, flight number and aircraft. |\n| `flightNumbers`, `aircraft` | Convenience lists across the itinerary. |\n| `cabinClass`, `tripType` | Search cabin and one-way/round-trip. |\n| `providerName` / `providerCode` | Cheapest booking provider. |\n| `providers` | Up to 20 booking options with price, total price, provider and booking link. |\n| `baggage` | Carry-on/checked-bag restrictions and fees where Kayak reports them. |\n| `deepLink` / `bookingUrl` | Best booking link. `shareableUrl` links back to the itinerary on Kayak. |\n| `accessMethod` | `live`, `flight-routes` or `wayback`. |\n| `sourceUrl` | URL the record was read from. |\n| `priceNote` | Present on fallback records; explains that the price is a route-level snapshot. |\n| `archivedAt` | Archive timestamp for `wayback` records. |\n| `scrapedAt` | UTC timestamp when the record was produced. |\n\n### Hotel records (`searchHotels`, `byUrls` hotel URLs)\n\n| Field | Description |\n|-------|-------------|\n| `hotelId` / `flightId` | Kayak hotel identifier. |\n| `hotelName` / `airline` | Hotel name (`airline` is kept for backward compatibility). |\n| `stars`, `rating`, `reviewCount`, `ratingCategory` | Star rating and guest reviews. |\n| `price` / `totalPrice` | Nightly rate and total stay price. |\n| `currency` | Rate currency. |\n| `departDate` / `returnDate` | Check-in and check-out. |\n| `checkIn` / `checkOut` / `nights` | Stay dates and number of nights. |\n| `adults` / `rooms` | Occupancy used for the search. |\n| `latitude` / `longitude`, `distanceFromCenter` | Location and distance from the city centre. |\n| `city`, `propertyType`, `brandName` | Location and property classification. |\n| `imageUrl` / `images` | Primary image and up to 10 image URLs. |\n| `description` / `descriptionAttribution` | Hotel description and its source. |\n| `amenities` / `amenityCodes` | Amenity names and Kayak codes. |\n| `freeCancellation` / `freebies` | Cancellation and freebie information for the cheapest rate. |\n| `providerName` / `providerCode`, `providers` | Cheapest provider plus up to 10 provider offers. |\n| `bookingUrl` / `deepLink` | Booking link. `detailsUrl` opens the hotel on Kayak. |\n| `accessMethod`, `sourceUrl`, `scrapedAt` | Source and timing metadata. |\n\n### Cheap-destination records (`exploreDeals`)\n\n| Field | Description |\n|-------|-------------|\n| `flightId` | Origin-destination key. |\n| `origin` / `destination` | Origin city/airport code and destination airport code. |\n| `originCity` / `destinationCity` / `destinationCountry` | City and country names. |\n| `destinationCountryCode`, `departureAirportCode`, `airportName` | Extra location detail. |\n| `price` / `currency` | Lowest round-trip price shown. |\n| `airline` / `airlineCode` | Airline on the cheapest itinerary. |\n| `stops` / `duration` / `durationMinutes` | Connections and maximum itinerary duration. |\n| `departDate` / `returnDate` / `tripDays` | Suggested travel dates and length of stay. |\n| `imageUrl` / `deepLink` | Destination image and Kayak flight link. |\n| `latitude` / `longitude` | Destination airport coordinates. |\n| `accessMethod`, `sourceUrl`, `scrapedAt` | Source and timing metadata. |\n\n## Input\n\n| Field | Type | Default | Description |\n|-------|------|---------|-------------|\n| `mode` | String (select) | `searchFlights` | `searchFlights`, `searchHotels`, `exploreDeals` or `byUrls`. |\n| `site` | String (select) | `kayak.com` | Country site, which also sets the currency. |\n| `origin` | String | `NYC` | Origin airport or city for flights and explore. |\n| `destination` | String | `LON` | Destination airport or city; in hotels mode, the city to stay in. |\n| `departDate` | String | — | Departure date or hotel check-in (`YYYY-MM-DD`). Defaults to about 30 days from today. |\n| `returnDate` | String | — | Return date or hotel check-out (`YYYY-MM-DD`). Defaults to seven days after departure. |\n| `tripType` | String (select) | `round-trip` | `one-way` or `round-trip`. |\n| `cabinClass` | String (select) | `economy` | `economy`, `premium-economy`, `business` or `first`. |\n| `adults` | Integer | 1 | Adult travellers (1-9). |\n| `children` | Integer | 0 | Children aged 2-17 (0-4). |\n| `maxStops` | String (select) | `any` | `any`, `0`, `1`, `2` or `3`. |\n| `airlines` | Array | – | Two-letter IATA airline codes. |\n| `minPrice` / `maxPrice` | Integer | – | Price range in the site currency. |\n| `maxDurationMinutes` | Integer | – | Maximum outbound flight duration. |\n| `redeyeOnly` | Boolean | false | Overnight flights only. |\n| `alliance` | String (select) | `any` | `any`, `STAR_ALLIANCE`, `ONEWORLD` or `SKYTEAM`. |\n| `wifiOnly` | Boolean | false | Flights advertising Wi-Fi only. |\n| `sortBy` | String (select) | `price` | `price`, `duration`, `departure`, `arrival` or `best`. |\n| `hotelStars` | Array | – | Star ratings to include (`1`-`5`). |\n| `rooms` | Integer | 1 | Hotel rooms (1-8). |\n| `minRating` | String (select) | `any` | `any`, `6`, `7`, `8` or `9`. |\n| `freeCancellation`, `freeBreakfast`, `freeInternet`, `freeParking`, `payLater` | Boolean | false | Rate/property filters. |\n| `amenities` | Array | – | Kayak amenity IDs (for example `wifi`, `pool`). |\n| `propertyType` | String (select) | `any` | `any`, `hotel` or `rental:apartment`. |\n| `dealsOnly` | Boolean | false | Member/private deals only. |\n| `hotelSortBy` | String (select) | `recommended` | `recommended`, `price_low`, `rating`, `distance` or `stars`. |\n| `maxBudget` | Integer | – | Maximum explore-deal price. |\n| `minTripDays` / `maxTripDays` | Integer | 1 / 30 | Explore trip-length range. |\n| `destinationCountry` | String | – | Keep explore deals in one country (name or ISO code). |\n| `urls` | Array | – | Kayak URLs for `byUrls` mode. |\n| `maxItems` | Integer | 50 | Maximum records for the whole run (1-1000). |\n\n### Example: round-trip flight search\n\n```json\n{\n  \"mode\": \"searchFlights\",\n  \"origin\": \"NYC\",\n  \"destination\": \"LON\",\n  \"departDate\": \"2026-12-10\",\n  \"returnDate\": \"2026-12-17\",\n  \"tripType\": \"round-trip\",\n  \"cabinClass\": \"economy\",\n  \"adults\": 1,\n  \"maxStops\": \"0\",\n  \"airlines\": [\"BA\", \"VS\"],\n  \"sortBy\": \"price\",\n  \"maxItems\": 50\n}\n```\n\n### Example: hotels with filters\n\n```json\n{\n  \"mode\": \"searchHotels\",\n  \"destination\": \"London\",\n  \"departDate\": \"2026-12-10\",\n  \"returnDate\": \"2026-12-17\",\n  \"adults\": 2,\n  \"rooms\": 1,\n  \"hotelStars\": [\"4\", \"5\"],\n  \"minRating\": \"8\",\n  \"freeCancellation\": true,\n  \"hotelSortBy\": \"price_low\",\n  \"maxItems\": 40\n}\n```\n\n### Example: cheap destinations under a budget\n\n```json\n{\n  \"mode\": \"exploreDeals\",\n  \"origin\": \"NYC\",\n  \"maxBudget\": 500,\n  \"maxStops\": \"0\",\n  \"minTripDays\": 4,\n  \"maxTripDays\": 10,\n  \"destinationCountry\": \"Spain\",\n  \"maxItems\": 30\n}\n```\n\n### Example: saved URLs\n\n```json\n{\n  \"mode\": \"byUrls\",\n  \"urls\": [\n    \"https://www.kayak.com/flights/NYC-LON/2026-12-10/2026-12-17\",\n    \"https://www.kayak.com/hotels/London/2026-12-10/2026-12-17/2adults\"\n  ],\n  \"maxItems\": 60\n}\n```\n\n## How live access works\n\nKayak renders search results with JavaScript and streams them from its own internal search API. The actor opens the search in a real browser, captures the page's own session, and then reads the result pages directly. No account, cookie or proxy setup is required. If the direct search is blocked, the actor automatically retries through the platform's datacenter proxy.\n\nWhen `origin` or `destination` is a city name such as `New York`, the actor resolves it to Kayak's metro or airport code (`NYC`) before searching. Three-letter IATA codes are used as-is.\n\nIf a **flight** search cannot be read live, the actor falls back to Kayak's public flight-route page for the same route. If that page is unavailable, it tries the Wayback Machine copy of the route page. Fallback records are real Kayak data but are **route-level snapshots, not date-specific live fares**; they carry `accessMethod` = `flight-routes` or `wayback` and a `priceNote` saying so. Hotel and explore searches have no such fallback and report the block in the run status message.\n\n## Limitations\n\n- Hotel and explore searches have no fallback when Kayak blocks live access; the run status message says when that happens.\n- Route-page and Wayback fallback records are route-level snapshots. Price and airline filters apply to them; stop, duration and cabin filters and sorting do not.\n- Kayak's hotel URL accepts adults and rooms, not child ages, so hotel searches use adults and rooms only.\n- Time-of-day flight filters are not exposed because Kayak rejects them in the filter syntax; use `sortBy` `departure` or `arrival` instead.\n\n## Use cases\n\n- **Fare comparison**: compare airlines and providers for a route and dates.\n- **Travel inspiration**: find cheap destinations from your home airport under a budget.\n- **Hotel rate checks**: pull nightly and total rates with ratings and amenities.\n- **Price tracking**: schedule the same search and store each run's dataset.\n- **URL re-scraping**: turn saved Kayak search links into structured data.\n\n## FAQ\n\n**Do I need a Kayak account or API key?**\nNo. The actor reads publicly available search results and needs no credentials.\n\n**Which currency will prices be in?**\nThe currency of the selected Kayak country site. Set `site` to `kayak.co.uk` for GBP, `kayak.de` for EUR, and so on.\n\n**Why do some records say `accessMethod: flight-routes`?**\nKayak blocked the live search for that route. The record comes from Kayak's flight-route page and is a snapshot, so treat its price as indicative and re-run later for a live fare.\n\n**What does `price` mean for hotels?**\n`price` is the nightly rate from the cheapest provider; `totalPrice` is the total for the stay.\n\n**Does `stops: 0` mean nonstop?**\nYes. Flights also have `returnStops` for the return leg.\n\n**Can I search one-way flights?**\nYes. Set `tripType` to `one-way`; `returnDate` is ignored.\n\n**How current are prices?**\n`live` records are read from Kayak during the run. Route-page and `wayback` records are snapshots and can be stale; see `priceNote` and `archivedAt`.\n\n**Is this affiliated with Kayak?**\nNo. This is an independent data extraction tool and is not affiliated with, endorsed by, or sponsored by Kayak Software Corporation.\n",
      "output": {
        "actorOutputSchemaVersion": 1,
        "title": "Kayak Flight, Hotel & Cheap Destination Finder Output",
        "description": "Flight itineraries, hotel rates and cheap-destination deals from Kayak. Every record is normalised and includes recordType (kayakFlight / kayakHotel / kayakExplore), accessMethod (live / flight-routes / wayback), and scrapedAt so archived or snapshot prices can be distinguished from live search results.",
        "properties": {
          "results": {
            "type": "string",
            "title": "Kayak results",
            "description": "Dataset containing all scraped flight, hotel and destination-deal records.",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          },
          "dataset": {
            "type": "string",
            "title": "Dataset (HTML)",
            "description": "Interactive view of the same records in the Apify Console.",
            "template": "{{links.consoleRunUrl}}"
          }
        }
      },
      "dockerfile": "./Dockerfile",
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "views": {
            "overview": {
              "title": "Kayak Results",
              "transformation": {
                "fields": [
                  "recordType",
                  "flightId",
                  "hotelName",
                  "origin",
                  "destination",
                  "destinationCountry",
                  "departDate",
                  "returnDate",
                  "price",
                  "currency",
                  "airline",
                  "stars",
                  "rating",
                  "stops",
                  "duration",
                  "providerName",
                  "deepLink",
                  "accessMethod",
                  "scrapedAt"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "recordType": {
                    "label": "Type",
                    "format": "text"
                  },
                  "flightId": {
                    "label": "ID",
                    "format": "text"
                  },
                  "hotelName": {
                    "label": "Hotel",
                    "format": "text"
                  },
                  "origin": {
                    "label": "Origin",
                    "format": "text"
                  },
                  "destination": {
                    "label": "Destination",
                    "format": "text"
                  },
                  "destinationCountry": {
                    "label": "Country",
                    "format": "text"
                  },
                  "departDate": {
                    "label": "Depart / check-in",
                    "format": "text"
                  },
                  "returnDate": {
                    "label": "Return / check-out",
                    "format": "text"
                  },
                  "price": {
                    "label": "Price",
                    "format": "number"
                  },
                  "currency": {
                    "label": "Currency",
                    "format": "text"
                  },
                  "airline": {
                    "label": "Airline / hotel",
                    "format": "text"
                  },
                  "stars": {
                    "label": "Stars",
                    "format": "number"
                  },
                  "rating": {
                    "label": "Guest rating",
                    "format": "number"
                  },
                  "stops": {
                    "label": "Stops",
                    "format": "number"
                  },
                  "duration": {
                    "label": "Duration",
                    "format": "text"
                  },
                  "providerName": {
                    "label": "Provider",
                    "format": "text"
                  },
                  "deepLink": {
                    "label": "Book URL",
                    "format": "link"
                  },
                  "accessMethod": {
                    "label": "Access",
                    "format": "text"
                  },
                  "scrapedAt": {
                    "label": "Scraped at",
                    "format": "text"
                  }
                }
              }
            }
          }
        }
      }
    },
    "buildNumber": "1.0.2",
    "imageDigest": "e7f0aaa1f55ae09345dc04335bb3532fb2953678e1e6e1b4639922d2ddbf19be",
    "actVersion": {
      "sourceType": "SOURCE_FILES",
      "buildTag": "latest",
      "versionNumber": "1.0"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.03181888888888889
    }
  }
}