Kiwi Flight Scraper API ✈️
Pricing
Pay per usage
Kiwi Flight Scraper API ✈️
Scrape Kiwi.com flight data with speed and accuracy. Extract routes, fares, airlines, departure and arrival times, durations, stopovers, and flight options for travel research, price monitoring, comparison tools, analytics, and travel datasets.
Pricing
Pay per usage
Rating
0.0
(0)
Developer
Shahid Irfan
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
4 days ago
Last modified
Categories
Share
What does Kiwi.com Flight Scraper API do?
Kiwi.com Flight Scraper API collects structured flight itineraries from public Kiwi.com search routes. Provide a Kiwi search URL, or enter an origin and destination, and the Actor saves flight prices, carriers, segments, airport details, baggage information, booking options, and search context in an Apify dataset.
It supports return searches, one-way searches, route dates, passenger counts, cabin class, sorting, stop limits, duration limits, result limits, and Apify Proxy settings. Empty, null, and undefined values are omitted from saved records so the dataset stays easier to use in applications and analysis.
Why use Kiwi.com Flight Scraper API?
- Flight price research - Compare current itinerary prices between cities or airports.
- Travel planning - Review departure times, arrival times, stopovers, carriers, baggage, and transfer details in one record.
- Route monitoring - Schedule repeat runs for selected routes and compare the resulting datasets over time.
- Structured exports - Download results as JSON, CSV, Excel, XML, or other Apify-supported formats.
- Automation-ready workflows - Connect completed runs to webhooks, Google Sheets, Make, Zapier, or your own service through the Apify API.
- URL-first setup - Reuse an existing Kiwi.com search URL without manually copying every route setting.
What data can you extract from Kiwi.com?
| Data | Description |
|---|---|
id and shareId | Kiwi itinerary identifiers. |
__typename | Itinerary type, such as ItineraryReturn or ItineraryOneWay. |
price | Amount, formatted value, and pre-discount price in the requested currency. |
priceEur | Comparable EUR amount when provided by Kiwi. |
provider | Kiwi.com or another available content provider. |
outbound | Outbound journey duration and sector segments. |
inbound | Return journey details for return itineraries. |
sector | Journey details for one-way itineraries. |
sectors | Journey details when a multi-city result is returned by Kiwi. |
| Segment route | Departure and arrival airports, cities, countries, coordinates, and local and UTC times. |
| Segment flight data | Flight number, carrier, operating carrier, cabin class, duration, and technical-stop flag. |
| Layovers | Layover duration, baggage recheck, walking-distance, and transfer information. |
bagsInfo | Included bags and available hand-bag, checked-bag, and personal-item tiers. |
bookingOptions | Booking URL, provider, price, Kiwi product, and disruption treatment. |
travelHack | Self-transfer, virtual interlining, hidden-city, and throwaway-ticket flags when supplied. |
duration | Total itinerary duration in seconds. |
pnrCount and partnerships | Reservation and partnership information when available. |
search_context | Resolved route, dates, currency, market, sort order, result count, and source status. |
How to use the Actor
- Open Kiwi.com Flight Scraper API in Apify Console.
- Paste a complete Kiwi.com search URL, or enter both
originanddestination. - Add dates and optional passenger, sorting, filtering, and result-limit values.
- Run the Actor.
- Open the default dataset to preview, export, or integrate the records.
When a user provides a value, that value takes priority over schema prefills and local development input. INPUT.json is only a local run input file and is not used to override values supplied through Apify.
Input Parameters
All parameters are optional at schema level. You must provide either a valid Kiwi search URL or both an origin and a destination.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
url | String | No | Schema example URL | Kiwi.com search results URL. Route locations and dates are read from the URL when present. |
origin | String | No | From url | City, airport name, airport code, Kiwi location ID, or Kiwi route slug. Overrides the URL origin. |
destination | String | No | From url | City, airport name, airport code, Kiwi location ID, or Kiwi route slug. Overrides the URL destination. |
date | String | No | From url | Departure date in YYYY-MM-DD format. A departure date without return_date runs a one-way search. |
return_date | String | No | From url | Return date in YYYY-MM-DD format. Add it for a return search. |
adults | Integer | No | 1 | Number of adult passengers, from 1 to 9. |
children | Integer | No | 0 | Number of children, from 0 to 8. |
infants | Integer | No | 0 | Number of infants, from 0 to 8. |
cabin_class | String | No | ECONOMY | ECONOMY, PREMIUM_ECONOMY, BUSINESS, or FIRST. |
sort_by | String | No | QUALITY | Kiwi result ordering, including PRICE, DURATION, DATE, and POPULARITY. An explicit value overrides sortBy in the URL. |
currency | String | No | usd | Three-letter display currency such as usd or eur. |
locale | String | No | en-US | Locale used for location matching and formatted values. |
market | String | No | Origin country | Optional two-letter market code. |
max_stops | Integer | No | Source default | Maximum number of stops. Use 0 for nonstop results where available. |
max_duration_hours | Number | No | Source default | Maximum total itinerary duration in hours. |
| results_wanted | Integer | No | 20 | Number of itinerary records to save, or the source result count if fewer are available. |
| max_pages | Integer | No | Automatic | Optional safety cap for cumulative Kiwi GraphQL pages. If omitted, the Actor derives enough pages from results_wanted. There is no schema maximum. |
| proxyConfiguration | Object | No | Apify Proxy | Optional Apify Proxy configuration for request reliability. |
Output Data
The Actor normally saves one dataset record per itinerary. The exact nested fields depend on what Kiwi supplies for that itinerary.
| Field | Type | Description |
|---|---|---|
id | String | Itinerary identifier. |
__typename | String | Return or one-way itinerary type. |
price | Object | Requested-currency price data. |
priceEur | Object | EUR comparison price when available. |
provider | Object | Provider identity and content source. |
outbound | Object | Outbound sector and segment data for return itineraries. |
inbound | Object | Inbound sector and segment data for return itineraries. |
sector | Object | Sector and segment data for one-way itineraries. |
sectors | Array | Sectors for multi-city results when returned. |
bagsInfo | Object | Included and optional baggage data. |
bookingOptions | Object | Booking links and associated prices and products. |
travelHack | Object | Travel-hack flags supplied by Kiwi. |
duration | Number | Total duration in seconds. |
pnrCount | Number | Number of reservation records when supplied. |
partnerships | Array | Partnership values when supplied. |
search_context | Object | Input and source metadata for the search. |
Fields with null, undefined, empty-string, empty-array, or empty-object values are left out of the final dataset item.
Usage Examples
Basic URL search
Use an existing Kiwi.com route URL for a return search:
{"url": "https://www.kiwi.com/en/search/results/lahore-pakistan/manchester-united-kingdom/","results_wanted": 20}
One-way airport search
Provide airport codes and one departure date. Without a return date, the Actor requests one-way itineraries:
{"origin": "LHE","destination": "MAN","date": "2026-09-21","sort_by": "PRICE","results_wanted": 5}
Return search with dates and passengers
Use explicit dates, passengers, cabin class, and a nonstop preference:
{"origin": "Lahore","destination": "Manchester","date": "2026-09-21","return_date": "2026-09-28","adults": 2,"children": 1,"cabin_class": "ECONOMY","max_stops": 0,"currency": "eur","results_wanted": 10}
URL with route dates and filters
Kiwi route dates can be read directly from a URL. Additional inputs override matching URL values:
{"url": "https://www.kiwi.com/en/search/results/lahore-pakistan/manchester-united-kingdom/2026-09-21/2026-09-28/","sort_by": "DURATION","max_duration_hours": 30,"proxyConfiguration": {"useApifyProxy": true},"results_wanted": 20}
Sample Output
This shortened example shows the normal return-itinerary shape. Real records may contain more segments and additional non-empty fields.
{"__typename": "ItineraryReturn","id": "ItineraryReturn:example","shareId": "example-share-id","price": {"amount": "496","roundedFormattedValue": "$496","priceBeforeDiscount": "496"},"priceEur": {"amount": "427.94"},"provider": {"id": "ItineraryProvider:KIWI-BASIC","name": "Kiwi.com","code": "KIWI-BASIC","hasHighProbabilityOfPriceChange": false,"contentProvider": {"code": "KIWI-BASIC"}},"bagsInfo": {"includedCheckedBags": 0,"includedHandBags": 0,"includedPersonalItem": 1,"handBagTiers": [{"tierPrice": {"amount": "104.15"},"bags": [{"weight": {"value": 7}}]}]},"bookingOptions": {"edges": [{"node": {"bookingUrl": "/en/booking/?direct=true¤cy=usd","itineraryProvider": {"id": "ItineraryProvider:KIWI-BASIC","name": "Kiwi.com","code": "KIWI-BASIC"},"price": {"amount": "496"},"priceEur": {"amount": "427.94"},"kiwiProduct": "KIWI_BASIC","disruptionTreatment": "CONNECTION_PROTECTION"}}]},"travelHack": {"isVirtualInterlining": true,"isTrueHiddenCity": false,"isThrowawayTicket": false},"duration": 168000,"pnrCount": 6,"partnerships": ["ryanair"],"outbound": {"id": "Sector:outbound-example","duration": 84600,"sectorSegments": [{"segment": {"id": "Segment:example","source": {"localTime": "2026-09-21T18:20:00","utcTimeIso": "2026-09-21T13:20:00Z","station": {"code": "LHE","name": "Allama Iqbal International","city": {"name": "Lahore","slug": "lahore-pakistan"},"country": {"code": "PK"}}},"destination": {"localTime": "2026-09-22T13:50:00","utcTimeIso": "2026-09-22T12:50:00Z","station": {"code": "MAN","name": "Manchester","city": {"name": "Manchester","slug": "manchester-united-kingdom"},"country": {"code": "GB"}}},"duration": 84600,"type": "FLIGHT","code": "3223","carrier": {"name": "Ryanair","code": "FR"},"cabinClass": "ECONOMY"}}]},"search_context": {"origin": {"id": "City:lahore_pk","name": "Lahore","code": "LHE","countryCode": "PK"},"destination": {"id": "City:manchester_gb","name": "Manchester","code": "MAN","countryCode": "GB"},"departure_date": "2026-09-21","return_date": "2026-09-28","currency": "usd","sort_by": "QUALITY","itineraries_count": 20,"has_more_pending": false}}
Tips for best results
- Use a complete public Kiwi.com search URL when you want Kiwi route settings to be reused.
- Use airport codes such as
LHEandMANwhen you want an unambiguous airport route. - Use a departure date without
return_datefor one-way results. - Use both
dateandreturn_datefor a fixed-date return search. - Start with
results_wanted: 1or5while checking a new route, then increase the limit. - Use
max_stops: 0only when nonstop options are important. Some routes may return fewer results or none. - The Actor requests additional cumulative Kiwi pages when needed, increases the GraphQL result limit, removes duplicate itineraries, and stops when
results_wantedrecords are saved or the source ends. Usemax_pagesas an optional safety cap. - Prices and availability can change after a run. Treat booking URLs and prices as time-sensitive.
- When a field is absent, check whether Kiwi supplied it for that itinerary. The Actor omits empty and null values by design.
Integrations
- Apify API - Read the default dataset or start runs from your application.
- Webhooks - Notify another service when a route search finishes.
- Google Sheets - Export itinerary data for planning and comparison.
- Make and Zapier - Send new datasets into no-code workflows.
- CSV, Excel, JSON, and XML - Download data for analysis, reporting, or storage.
- Scheduled runs - Refresh selected routes on a recurring schedule in Apify Console.
Frequently Asked Questions
Can I use a Kiwi.com search URL?
Yes. Put the URL in url. The Actor reads route slugs and route dates when they are present. Explicit origin, destination, date, and return_date values override corresponding URL values.
How do I request a one-way flight search?
Provide date and leave return_date empty. If no date is supplied, the Actor keeps the URL-only search behavior and uses the available Kiwi search result mode.
Does the Actor support return searches?
Yes. Provide both date and return_date, or use a Kiwi URL containing both route dates.
Can I search by airport code?
Yes. Airport codes such as LHE, MAN, JFK, and DXB are accepted. City names and Kiwi location IDs are also supported.
Why did I receive fewer records than requested?
Kiwi may have fewer matching itineraries for the selected dates and filters, or the source may still be preparing more results. The Actor follows Kiwi's cumulative continuation pages when a server token is available, then stops when the source ends or the requested count is reached. The search_context object includes the available result count and pending status when supplied.
Are null fields included in the dataset?
No. Null, undefined, empty strings, empty arrays, and empty objects are removed recursively before a record is saved.
Can I export the dataset to CSV or Excel?
Yes. Apify dataset exports include JSON, CSV, Excel, XML, and other supported formats.
Can I run this Actor on a schedule?
Yes. Create an Apify schedule and provide the route and filters you want refreshed.
Is the Actor an official Kiwi.com API?
No. It is an independent Apify Actor for collecting publicly available Kiwi.com search results. It is not affiliated with or endorsed by Kiwi.com.
Is it legal to collect Kiwi.com flight data?
You are responsible for complying with applicable law, Kiwi.com terms, intellectual-property rights, access restrictions, and any contractual requirements. Use the Actor only for legitimate purposes and respect the source website's rules.
Related Actors
Support
For a bug report or feature request, use the Issues tab on the Actor page and include the input shape, route pattern, run ID, and a short description of the result. Do not include private credentials, proxy URLs, or booking tokens in a public issue.
Legal Notice
This Actor is intended for responsible collection of publicly available flight-search data. Kiwi.com names, trademarks, prices, routes, and availability belong to their respective owners. The Actor developer does not guarantee ticket availability, price accuracy, booking completion, or continued availability of any source field. Users are responsible for their own use of the data and for complying with applicable laws and website terms.