Flight Price Scraper avatar

Flight Price Scraper

Pricing

from $1.25 / 1,000 results

Go to Apify Store
Flight Price Scraper

Flight Price Scraper

Search live flight prices by route and date across Google Flights, Kiwi and Ryanair, merged into one result per flight. Get per-source pricing, cheapest source, airlines, times, stops, duration and booking links. Round trips, flexible dates, cabin class. No login, export to JSON, CSV or Excel.

Pricing

from $1.25 / 1,000 results

Rating

0.0

(0)

Developer

SilentFlow

SilentFlow

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

0

Monthly active users

5 days ago

Last modified

Share

Compare real flight prices across Kiwi, Ryanair and Google Flights in one call. The same flight, priced by three sources side by side, with direct booking links. Most searches finish in under 2 seconds.

Stop running one scraper per site and stitching the results together yourself. This actor queries three flight data sources at once, merges the same physical flight into a single row, and shows you which source is cheapest, so you always see the real lowest price and where to book it.

How it works

How it works

โœจ Why teams choose this over other flight scrapers

Running flight scrapers that fail half the time? Getting one price per flight when three sources disagree by 20%? Paying for a browser to render a page that has an API behind it?

  • ๐Ÿ”€ Three sources in one call, not one. Kiwi (a metasearch covering 700+ airlines including majors and low-cost carriers), Ryanair direct, and Google Flights. The same flight is priced by every source that has it, so you see the real spread. In testing, Dublin to London Stansted returned the FR290 flight at 16.99 on Ryanair, 18 on Kiwi and 17 on Google Flights, all in one row.
  • ๐ŸŽฏ The cheapest source is picked for you. Every merged flight has a bestPrice, a cheapestSource, and a prices map so you can see all three and book the lowest. No manual comparison.
  • โšก No browser, so it is fast and it does not break. Pure API and server-rendered data. A three-source search typically returns in 1 to 2 seconds. Browser-based scrapers are slower and fail when a page layout shifts.
  • ๐Ÿ›ซ Majors and low-cost carriers together. Kiwi surfaces low-cost and self-transfer combinations, Google Flights brings the major network carriers (British Airways, Iberia, Lufthansa, Air France and more). You get both in the same result set.
  • ๐Ÿงญ Filters applied on the server, not after. Set maxStops, maxPrice, nonstopOnly or preferredAirlines and get back only what matches. No post-processing, no throwing away rows you paid to receive.
  • ๐Ÿ“… Flexible-date price calendar. Set flexDays to search a range around your date and get the cheapest fare per day, so you can move a trip a day to save.
  • ๐Ÿ”— Direct booking links per source. Every itinerary ships with the link to book it, on Kiwi, on Ryanair, or on Google Flights.
  • ๐Ÿงณ Deep itinerary detail. Segments, layovers, self-transfer flags, cabin class, flight numbers and baggage, not just a price and a time.
  • ๐ŸŒ Any route, any currency. Airport or metro codes worldwide, prices in the ISO currency you ask for.
  • ๐Ÿ”“ No login, no API key, no setup. Type a route and run it.

๐ŸŽฏ What you can do with flight data

TeamWhat they build
Fare-alert and deal appsTrack a route daily and push a notification when the best price drops below a threshold
OTA and travel startupsPower a metasearch results page without signing eight airline contracts
Corporate travelCheck the real lowest fare on a route before approving a booking, across three sources
Travel content and blogsBuild "cheapest month to fly" and "cheapest day" tables from the flexible-date calendar
Data and pricing analystsCompare how Kiwi, Ryanair and Google price the same seat, and track the spread over time
Revenue and competitive teamsMonitor a competitor route's public fares and stops over weeks
Affiliate and cashback sitesShow live fares with booking links and earn on the click through

๐Ÿ“ฅ Input parameters

Route and dates

FieldTypeDescription
originstringDeparture IATA code (e.g. LHR, JFK, LON). Required.
destinationstringArrival IATA code (e.g. BCN, CDG, NYC). Required.
departDatestringOutbound date, YYYY-MM-DD. Required.
returnDatestringInbound date for round trips, YYYY-MM-DD. Optional.
flexDaysintegerSearch this many days before and after each date for a cheapest-per-day calendar. 0 to 7. Default 0.

Passengers and cabin

FieldTypeDescription
adultsintegerAdult passengers, 1 to 9. Default 1.
childrenintegerChild passengers, 0 to 9. Default 0.
infantsintegerInfant passengers, 0 to 9. Default 0.
cabinClassstringECONOMY, PREMIUM_ECONOMY, BUSINESS or FIRST. Default ECONOMY.
currencystringISO currency code for prices. Default USD.

Filters and output

FieldTypeDescription
maxStopsintegerMaximum stops, 0 to 3. Leave empty for any.
maxPriceintegerOnly return itineraries at or below this price, in the chosen currency.
nonstopOnlybooleanReturn only direct flights. Default false.
preferredAirlinesarrayKeep only flights operated by these IATA carrier codes (e.g. FR, VY, BA).
sourcesarrayWhich sources to query: kiwi, ryanair, googleFlights. Default all three.
maxItemsintegerMaximum number of itineraries to return. Default 50.

๐Ÿ“Š Output data

Every itinerary is one dataset item. A flight found by more than one source is merged into a single row with a prices map.

A flight priced by three sources

{
"id": "kiwi-...",
"from": { "airport": "DUB", "name": "Dublin", "city": "Dublin", "country": "Ireland" },
"to": { "airport": "STN", "name": "London Stansted", "city": "London", "country": "United Kingdom" },
"departTime": "2026-08-15T18:00:00",
"arriveTime": "2026-08-15T19:20:00",
"durationMinutes": 80,
"durationText": "1h 20m",
"stops": 0,
"nonstop": true,
"airlines": [{ "code": "FR", "name": "Ryanair" }],
"primaryAirline": "FR",
"cabinClass": "ECONOMY",
"segments": [
{
"from": { "airport": "DUB" },
"to": { "airport": "STN" },
"departTime": "2026-08-15T18:00:00",
"arriveTime": "2026-08-15T19:20:00",
"carrier": { "code": "FR", "name": "Ryanair" },
"flightNumber": "FR290",
"durationMinutes": 80
}
],
"layovers": [],
"baggage": { "personalItem": 0, "handBag": 0, "checkedBag": 0 },
"isSelfTransfer": false,
"price": 16.99,
"currency": "EUR",
"prices": { "ryanair": 16.99, "kiwi": 18, "googleFlights": 17 },
"bestPrice": 16.99,
"cheapestSource": "ryanair",
"sources": ["googleFlights", "kiwi", "ryanair"],
"bookingLinks": {
"ryanair": "https://www.ryanair.com/gb/en/trip/flights/select?...",
"kiwi": "https://www.kiwi.com/en/booking/?...",
"googleFlights": "https://www.google.com/travel/flights/search?tfs=..."
},
"date": "2026-08-15",
"scrapedAt": "2026-07-05T09:00:00Z"
}

A self-transfer combination from Kiwi

{
"id": "kiwi-...",
"from": { "airport": "LHR", "name": "Heathrow" },
"to": { "airport": "BCN", "name": "Barcelona" },
"departTime": "2026-08-15T22:25:00",
"arriveTime": "2026-08-16T09:40:00",
"durationMinutes": 615,
"durationText": "10h 15m",
"stops": 1,
"nonstop": false,
"airlines": [{ "code": "EI", "name": "Aer Lingus" }, { "code": "FR", "name": "Ryanair" }],
"primaryAirline": "EI",
"segments": [ { "carrier": { "code": "EI" }, "flightNumber": "EI..." }, { "carrier": { "code": "FR" }, "flightNumber": "FR..." } ],
"layovers": [ { "station": "DUB", "durationMinutes": 120, "selfTransfer": true } ],
"isSelfTransfer": true,
"price": 115,
"currency": "EUR",
"prices": { "kiwi": 115 },
"bestPrice": 115,
"cheapestSource": "kiwi",
"sources": ["kiwi"],
"bookingLinks": { "kiwi": "https://www.kiwi.com/en/booking/?..." },
"scrapedAt": "2026-07-05T09:00:00Z"
}

๐Ÿ—‚๏ธ Data fields

CategoryFields
Routefrom, to (each with airport, name, city, country)
ScheduledepartTime, arriveTime, durationMinutes, durationText, date
Routingstops, nonstop, isSelfTransfer, segments, layovers
TriptripType (oneWay or roundTrip)
Return leg (round trips)returnDepartTime, returnArriveTime, returnDurationMinutes, returnStops, returnSegments, returnLayovers
Airlinesairlines, primaryAirline, cabinClass, per-segment carrier and flightNumber
Baggagebaggage (personalItem, handBag, checkedBag)
Pricingprice, currency, prices (per source), bestPrice, cheapestSource, sources
BookingbookingLinks (per source)
Metaid, scrapedAt

๐Ÿš€ Examples

Find the cheapest way to fly London to Barcelona

{ "origin": "LHR", "destination": "BCN", "departDate": "2026-08-15", "currency": "EUR" }

Round trip in business class for two adults

{ "origin": "JFK", "destination": "CDG", "departDate": "2026-09-10", "returnDate": "2026-09-17", "adults": 2, "cabinClass": "BUSINESS" }

Direct flights only, under 120 EUR

{ "origin": "DUB", "destination": "STN", "departDate": "2026-08-15", "nonstopOnly": true, "maxPrice": 120, "currency": "EUR" }

Cheapest day to fly across a week (price calendar)

{ "origin": "BER", "destination": "LIS", "departDate": "2026-08-15", "flexDays": 7, "currency": "EUR" }

Only Ryanair fares on a route

{ "origin": "DUB", "destination": "STN", "departDate": "2026-08-15", "preferredAirlines": ["FR"], "sources": ["ryanair", "kiwi"] }

๐Ÿค– Copy to your AI assistant

I am using the Flight Price Scraper on Apify. It takes origin, destination and departDate
(YYYY-MM-DD), plus optional returnDate, adults, cabinClass, currency, flexDays, maxStops,
maxPrice, nonstopOnly, preferredAirlines and sources. It returns flight itineraries, each
with a prices map per source (kiwi, ryanair, googleFlights), a bestPrice, a cheapestSource,
segments, layovers, baggage and bookingLinks. Write me an input to find the cheapest nonstop
flight from <ORIGIN> to <DESTINATION> on <DATE>, and explain how to read the prices map to
find the lowest fare and where to book it.

๐Ÿ’ป Integrations

Python

from apify_client import ApifyClient
client = ApifyClient("<APIFY_TOKEN>")
run = client.actor("silentflow/flight-price-scraper").call(run_input={
"origin": "LHR",
"destination": "BCN",
"departDate": "2026-08-15",
"currency": "EUR",
"nonstopOnly": True
})
for it in client.dataset(run["defaultDatasetId"]).iterate_items():
print(it["bestPrice"], it["currency"], it["primaryAirline"], "via", it["cheapestSource"])

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<APIFY_TOKEN>' });
const run = await client.actor('silentflow/flight-price-scraper').call({
origin: 'JFK',
destination: 'CDG',
departDate: '2026-09-10',
returnDate: '2026-09-17',
cabinClass: 'BUSINESS',
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach(f => console.log(f.bestPrice, f.currency, f.cheapestSource, f.bookingLinks));

Daily fare monitor

Schedule the actor to run each morning on your routes, then compare the new bestPrice against yesterday's dataset. When the price drops, send yourself the row's bookingLinks so you can book in one click.

๐Ÿ“ˆ Performance

MetricValue
Sources queried per runUp to 3 (Kiwi, Ryanair, Google Flights) in parallel
Typical search time1 to 2 seconds
Results per searchDozens of itineraries per route, merged across sources
EnginePure API and server-rendered data, no browser
ReliabilityA slow or unavailable source is skipped, the run still returns results from the others

๐Ÿ’พ Data export

Results are available as JSON, CSV, Excel, XML and RSS through the Apify dataset, via the API or the Console. Pull them into a sheet, a database or your app with one request.

๐Ÿ’ก Tips for best results

  • Use airport codes for precision, metro codes for breadth. LHR searches Heathrow only; LON searches all London airports. NYC, PAR, MIL and other metro codes are supported too.
  • Read the prices map, not just price. The bestPrice and cheapestSource tell you the lowest fare and where to book it. The full prices map shows every source that had the flight.
  • Set flexDays to find a cheaper day. Moving a trip by one or two days often cuts the fare. The date field on each row tells you which day it is for.
  • Ryanair returns its cheapest direct fare on a route. On routes Ryanair does not serve from your origin, it returns nothing, and Kiwi and Google Flights still cover the route.
  • Narrow with filters before you scale. nonstopOnly, maxStops and preferredAirlines cut the result set to what you actually want, so every returned row is useful.

โ“ FAQ

Which sources does it use? Kiwi (a metasearch that resells 700+ airlines including low-cost and major carriers), Ryanair direct, and Google Flights.

Do I need a login or API key for the airlines? No. You only need your Apify token to run the actor. No airline account, no API key.

How can three sources appear in one row? When Kiwi, Ryanair and Google Flights all have the same physical flight (same carrier and the same departure and arrival times), the actor merges them into one itinerary and lists each source's price in the prices map.

What if a source is down or slow? The run still succeeds. Each source has its own timeout and runs independently, so a slow source is skipped and you get results from the others. Kiwi is the broadest source and usually carries the search on its own.

Does it support round trips? Yes. Add returnDate and each row becomes a round-trip itinerary with tripType set to roundTrip, the outbound leg in segments and the inbound leg in returnSegments, priced as one combined round-trip fare.

Can I search a whole month for the cheapest day? Use flexDays up to 7 to search a window around your date and get the cheapest fare per day.

Does it return connecting and self-transfer flights? Yes. Kiwi surfaces connecting and self-transfer combinations. Each row shows stops, layovers and an isSelfTransfer flag so you know when two separate tickets are involved.

Which currency will prices be in? The ISO currency you pass in currency. Default is USD.

Can I limit results to specific airlines? Yes. Pass IATA codes in preferredAirlines (for example ["FR", "VY"]) and only those carriers are returned.

How many results do I get? As many as the sources return for your route, up to maxItems (default 50), sorted from cheapest to most expensive.

This actor collects publicly available flight pricing and schedule information. It does not require or collect any personal data. Use the data in line with the source sites' terms and with applicable regulations such as GDPR and CCPA. You are responsible for how you use the data you collect, particularly for any onward publication or commercial redistribution.

Building travel and price monitoring tools? Pair this with an accommodation or ground-transport scraper to cover a full trip. Browse the other actors on this account for hotels, vacation rentals and marketplace pricing.

๐Ÿ“ฌ Support

Run it, check the output against your route, and adjust the filters to fit your use case. If a route returns fewer results than expected, widen flexDays or remove nonstopOnly and run again.