Kayak Scraper
DeprecatedPricing
from $3.00 / 1,000 results
Kayak Scraper
DeprecatedGet 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
Maintained by CommunityActor stats
0
Bookmarked
18
Total users
1
Monthly active users
8 months ago
Last modified
Categories
Security
Limited permissionsShare
βοΈ 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.