Kayak Scraper
Pricing
from $3.00 / 1,000 results
Kayak Scraper
Get structured flight data from Kayak.com including prices, baggage fees, and booking links. Want to avoid OTAs? Filter for airline-only tickets and book direct.
Pricing
from $3.00 / 1,000 results
Rating
0.0
(0)
Developer
Richard
Actor stats
0
Bookmarked
11
Total users
5
Monthly active users
16 days ago
Last modified
Categories
Share
✈️ Kayak Flights Scraper
Scrapes flight search results from Kayak.com and returns structured booking data including prices, baggage fees, segment details, and direct booking links.
🎫 Unlike most flight scrapers, this actor shows airline-direct booking options — tickets sold directly by the airline rather than through OTAs like Expedia, Orbitz, or CheapOair. Booking direct means no third-party fees, easier rebooking, and direct access to airline customer support. Toggle this with the airline_direct flag.
Input
Required fields
| Field | Type | Description |
|---|---|---|
origin | string | 🛫 3-letter IATA departure airport code (e.g. JFK) |
destination | string | 🛬 3-letter IATA arrival airport code (e.g. LAX) |
departure_date | string | 📅 Departure date in YYYY-MM-DD format |
Optional fields
| Field | Type | Default | Description |
|---|---|---|---|
return_date | string | — | 📅 Return date (YYYY-MM-DD). Leave empty for one-way. |
adults | integer | 1 | 🧑 Number of adult passengers (age 12+) |
children | integer | 0 | 👦 Number of child passengers (age 2–11) |
infants | integer | 0 | 👶 Number of infant passengers (under 2, lap seat) |
seat | string | economy | 💺 Cabin class: economy, premium economy, business, first |
outbound_flex | string | exact | 🔄 Date flexibility for the outbound leg: exact, ±1, ±2, ±3, +1, -1 |
return_flex | string | exact | 🔄 Date flexibility for the return leg (round trips only): same options as outbound_flex |
stops | integer | — | 🛑 Maximum number of stops: 0 = nonstop only, 1 = up to 1 stop, 2 = 2+ stops included. Leave empty for all. |
airlines | array | — | ✈️ Filter by airline IATA codes (e.g. ["AA", "DL", "B6"]). Leave empty for all airlines. |
locale | string | en-US | 🌍 Kayak regional site to search on. Determines language and default currency. ⚠️ Must match the departure country — e.g. use en-US for flights departing from the US, en-GB for UK departures. Using a locale that doesn't match the departure country will result in errors. |
currency | string | USD | 💰 Currency for prices (ISO 4217 code, e.g. EUR, GBP, CAD) |
airline_direct | boolean | false | 🎫 When true, returns only tickets sold directly by the airline. Filters out OTAs such as Expedia, Orbitz, and CheapOair. |
debug | boolean | false | 🐛 When true, runs the browser in visible (headed) mode for debugging. |
Sample input
{"origin": "JFK","destination": "LAX","departure_date": "2026-06-15","return_date": "2026-06-22","adults": 1,"seat": "economy","outbound_flex": "±1","return_flex": "exact","locale": "en-US","currency": "USD","airline_direct": true}
Output
Each item in the dataset represents one booking option for a flight itinerary.
Output fields
| Field | Type | Description |
|---|---|---|
price | number | Displayed ticket price |
currency | string | Currency code (e.g. USD) |
pricing.base | number | Base fare before taxes/fees |
pricing.total | number | Total price including all fees |
provider | string | Booking provider IATA code (e.g. AA) |
providerName | string | Booking provider full name (e.g. American Airlines) |
isAirlineDirect | boolean | true if the ticket is sold directly by the airline |
bookingUrl | string | Direct link to complete the booking on Kayak |
baggage.carryOn.included | boolean | Whether carry-on is included in the fare |
baggage.carryOn.fee | number|null | Carry-on fee if not included |
baggage.checked.fee | number|null | First checked bag fee (null if included or unavailable) |
legs | array | One entry per flight leg (outbound + return for round trips) |
legs[].departureTime | string | ISO 8601 departure datetime |
legs[].arrivalTime | string | ISO 8601 arrival datetime |
legs[].durationMinutes | number | Total leg duration in minutes |
legs[].segments | array | Individual flight segments within the leg (for connections) |
legs[].segments[].airline | string | Operating airline IATA code |
legs[].segments[].airlineName | string | Operating airline full name |
legs[].segments[].flightNumber | string | Flight number |
legs[].segments[].origin | string | Departure airport IATA code |
legs[].segments[].destination | string | Arrival airport IATA code |
legs[].segments[].departureTime | string | ISO 8601 segment departure datetime |
legs[].segments[].arrivalTime | string | ISO 8601 segment arrival datetime |
legs[].segments[].durationMinutes | number | Segment duration in minutes |
legs[].segments[].aircraft | string | Aircraft type (e.g. Airbus A321neo) |
legs[].segments[].cabin | string | Cabin class name (e.g. Economy) |
legs[].segments[].cabinCode | string | Cabin class code (e.g. e) |
legs[].segments[].amenities | array | List of { icon, message } amenity items |
Sample output item
{"price": 422,"currency": "USD","pricing": {"base": 422,"total": 422},"provider": "B6","providerName": "JetBlue Airways","isAirlineDirect": true,"bookingUrl": "https://www.kayak.com/book/flight?code=...","baggage": {"carryOn": { "included": true, "fee": null },"checked": { "fee": 70 }},"legs": [{"departureTime": "2026-04-13T09:59:00","arrivalTime": "2026-04-13T13:15:00","durationMinutes": 376,"segments": [{"airline": "B6","airlineName": "JetBlue Airways","flightNumber": "223","origin": "JFK","destination": "LAX","departureTime": "2026-04-13T09:59:00","arrivalTime": "2026-04-13T13:15:00","durationMinutes": 376,"aircraft": "Airbus A321neo","cabin": "Economy","cabinCode": "e","amenities": [{ "icon": "WIFI", "message": "Wi-Fi available" },{ "icon": "ENTERTAINMENT", "message": "Live TV available" },{ "icon": "TIMER", "message": "Flight stats: 3% delayed 30+ mins, 3% canceled" }]}]},{"departureTime": "2026-04-20T15:30:00","arrivalTime": "2026-04-20T23:56:00","durationMinutes": 326,"segments": [...]}]}
Notes
- The page load often triggers a retry due to Kayak's bot protection — this is expected and handled automatically.
- Prices reflect what Kayak displays at the time of the run and may differ from final checkout prices.