Kiwi Flight Scraper API ✈️ avatar

Kiwi Flight Scraper API ✈️

Pricing

Pay per usage

Go to Apify Store
Kiwi Flight Scraper API ✈️

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

Shahid Irfan

Maintained by Community

Actor 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?

DataDescription
id and shareIdKiwi itinerary identifiers.
__typenameItinerary type, such as ItineraryReturn or ItineraryOneWay.
priceAmount, formatted value, and pre-discount price in the requested currency.
priceEurComparable EUR amount when provided by Kiwi.
providerKiwi.com or another available content provider.
outboundOutbound journey duration and sector segments.
inboundReturn journey details for return itineraries.
sectorJourney details for one-way itineraries.
sectorsJourney details when a multi-city result is returned by Kiwi.
Segment routeDeparture and arrival airports, cities, countries, coordinates, and local and UTC times.
Segment flight dataFlight number, carrier, operating carrier, cabin class, duration, and technical-stop flag.
LayoversLayover duration, baggage recheck, walking-distance, and transfer information.
bagsInfoIncluded bags and available hand-bag, checked-bag, and personal-item tiers.
bookingOptionsBooking URL, provider, price, Kiwi product, and disruption treatment.
travelHackSelf-transfer, virtual interlining, hidden-city, and throwaway-ticket flags when supplied.
durationTotal itinerary duration in seconds.
pnrCount and partnershipsReservation and partnership information when available.
search_contextResolved route, dates, currency, market, sort order, result count, and source status.

How to use the Actor

  1. Open Kiwi.com Flight Scraper API in Apify Console.
  2. Paste a complete Kiwi.com search URL, or enter both origin and destination.
  3. Add dates and optional passenger, sorting, filtering, and result-limit values.
  4. Run the Actor.
  5. 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.

ParameterTypeRequiredDefaultDescription
urlStringNoSchema example URLKiwi.com search results URL. Route locations and dates are read from the URL when present.
originStringNoFrom urlCity, airport name, airport code, Kiwi location ID, or Kiwi route slug. Overrides the URL origin.
destinationStringNoFrom urlCity, airport name, airport code, Kiwi location ID, or Kiwi route slug. Overrides the URL destination.
dateStringNoFrom urlDeparture date in YYYY-MM-DD format. A departure date without return_date runs a one-way search.
return_dateStringNoFrom urlReturn date in YYYY-MM-DD format. Add it for a return search.
adultsIntegerNo1Number of adult passengers, from 1 to 9.
childrenIntegerNo0Number of children, from 0 to 8.
infantsIntegerNo0Number of infants, from 0 to 8.
cabin_classStringNoECONOMYECONOMY, PREMIUM_ECONOMY, BUSINESS, or FIRST.
sort_byStringNoQUALITYKiwi result ordering, including PRICE, DURATION, DATE, and POPULARITY. An explicit value overrides sortBy in the URL.
currencyStringNousdThree-letter display currency such as usd or eur.
localeStringNoen-USLocale used for location matching and formatted values.
marketStringNoOrigin countryOptional two-letter market code.
max_stopsIntegerNoSource defaultMaximum number of stops. Use 0 for nonstop results where available.
max_duration_hoursNumberNoSource defaultMaximum 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.

FieldTypeDescription
idStringItinerary identifier.
__typenameStringReturn or one-way itinerary type.
priceObjectRequested-currency price data.
priceEurObjectEUR comparison price when available.
providerObjectProvider identity and content source.
outboundObjectOutbound sector and segment data for return itineraries.
inboundObjectInbound sector and segment data for return itineraries.
sectorObjectSector and segment data for one-way itineraries.
sectorsArraySectors for multi-city results when returned.
bagsInfoObjectIncluded and optional baggage data.
bookingOptionsObjectBooking links and associated prices and products.
travelHackObjectTravel-hack flags supplied by Kiwi.
durationNumberTotal duration in seconds.
pnrCountNumberNumber of reservation records when supplied.
partnershipsArrayPartnership values when supplied.
search_contextObjectInput 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

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
}

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&currency=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 LHE and MAN when you want an unambiguous airport route.
  • Use a departure date without return_date for one-way results.
  • Use both date and return_date for a fixed-date return search.
  • Start with results_wanted: 1 or 5 while checking a new route, then increase the limit.
  • Use max_stops: 0 only 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_wanted records are saved or the source ends. Use max_pages as 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.

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.

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.

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.

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.