Ryanair Flights Scraper: Fares, Seats & Schedules avatar

Ryanair Flights Scraper: Fares, Seats & Schedules

Pricing

from $11.54 / 1,000 results

Go to Apify Store
Ryanair Flights Scraper: Fares, Seats & Schedules

Ryanair Flights Scraper: Fares, Seats & Schedules

Scrape Ryanair fares and flight availability between 230+ European airports by IATA code and date. Extract price, currency, flight number, seats left, duration, stops and booking deep link. Export to JSON, CSV or Excel.

Pricing

from $11.54 / 1,000 results

Rating

0.0

(0)

Developer

Scrapers Lat

Scrapers Lat

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

0.22 hours

Issues response

21 hours ago

Last modified

Share

Ryanair Flights Scraper: Fares, Seats & Schedules

Ryanair Flights Scraper: Fares, Seats & Schedules

Here is one real result, with every field the actor returns:

{
"origin": "DUB",
"originName": "Dublin",
"destination": "STN",
"destinationName": "London Stansted",
"departureDateTime": "2026-09-22T06:30:00",
"arrivalDateTime": "2026-09-22T07:50:00",
"departureDateTimeUtc": null,
"arrivalDateTimeUtc": null,
"flightNumber": "FR30",
"fareType": "Value",
"cabin": "Economy",
"price": 16.99,
"publishedPrice": null,
"currency": "EUR",
"previousPrice": null,
"priceUpdated": "2026-08-15T23:03:22.000Z",
"seatsLeft": null,
"duration": "1h 20m",
"stops": 0,
"operatedBy": null,
"soldOut": false,
"fareClass": null,
"fareKey": null,
"fareOptions": null,
"seatMap": null,
"departureCity": null,
"arrivalCity": null,
"departureCountry": null,
"arrivalCountry": null,
"flightKey": null,
"direction": "inbound",
"source": "schedule+fare",
"isLowestFareOfDay": true,
"deepLink": "https://www.ryanair.com/gb/en/trip/flights/select?adults=1&teens=0&children=0&infants=0&dateOut=2026-09-22&dateIn=&isReturn=false&originIata=DUB&destinationIata=STN",
"observedAt": "2026-08-16T01:26:20.863Z",
"error": null
}

The most complete Ryanair flight scraper available. It returns every flight Ryanair publishes on your route for each day you scan, not just the cheapest one, prices each day by the day's lowest available fare, and gives you filters for route, date range, one-way or round trip, currency, and passenger count so you get exactly the flights you need.

📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples

Apify Coverage Output Billing

Table of contents

What it does

The actor scans a Ryanair route between two airports over the date range you pass, and returns every flight Ryanair publishes on that route for each day, not only the cheapest departure. It reads the public Ryanair timetable for the full list of daily flights, and prices each day using that day's lowest available fare (the source field tells you whether a row came from schedule, fare, or schedule+fare, and isLowestFareOfDay marks the priced flight for the day).

By default each fare of a flight is its own dataset row, with fareType and cabin telling the fares apart. Set collapseFares to true to instead get one row per flight with every fare nested in a fareOptions array. Set includeReturn to true to also scan the return leg (destination back to origin) over the return date range in the same run; return-leg rows are tagged direction inbound.

Ryanair does not expose a per-flight seat map or live seat availability through public endpoints (those are session and Akamai protected), so seatMap and seatsLeft are returned as null rather than invented. Every row carries a deepLink that opens the exact route and date on ryanair.com so a buyer can complete the booking.

Quickstart

Open the actor, paste this into the input, and press Run. It scans the STN to DUB route for a near-future week and returns every published flight, priced by the day's lowest fare.

{
"origin": "STN",
"destination": "DUB",
"departureDateFrom": "2026-09-15",
"departureDateTo": "2026-09-21",
"currency": "EUR",
"maxFlights": 50
}

Only origin and destination are required. Leave the dates empty to have the actor pick a near-future date automatically. Set tripType to round with returnDateFrom / returnDateTo, or set includeReturn to true, to also scan the way back.

Input reference

FieldTypeRequiredDefaultDescription
originstringyesSTNDeparture airport IATA code (for example STN, DUB, BCN). One of 224 Ryanair airports.
destinationstringyesDUBArrival airport IATA code. One of 224 Ryanair airports.
departureDateFromstringno(auto)Earliest outbound date (YYYY-MM-DD). Leave empty to search a near-future date automatically. Past dates are moved forward.
departureDateTostringno(= from)Latest outbound date (YYYY-MM-DD). Leave empty to use the same day as departureDateFrom.
tripTypeenumnooneWayoneWay or round. Round trips also scan the return leg using the return date fields.
returnDateFromstringno(empty)Earliest inbound date (YYYY-MM-DD). Round trips only.
returnDateTostringno(empty)Latest inbound date (YYYY-MM-DD). Round trips only.
includeReturnbooleannofalseAlso scan the return leg (destination back to origin) over the return date range in the same run. Return-leg rows are tagged direction inbound.
collapseFaresbooleannofalseBy default every fare of a flight is a separate row (each price and cabin its own record). Enable this to get one row per flight with all fares nested in a fareOptions array instead.
currencyenumnoEURCurrency for the fare prices. One of EUR, GBP, USD, PLN, SEK, DKK, NOK, CHF, HUF, RON, BGN, CZK.
adultsintegerno1Number of adult passengers (affects seat availability counts).
maxFlightsintegerno10Maximum number of flight fare records to collect. Free Apify accounts are capped at 10 per run.

Output reference

One dataset item per fare by default, or one per flight when collapseFares is true. Types: string, number, integer, boolean, array, object, or null when the source value is absent.

FieldTypeDescription
originstringDeparture airport IATA code.
originNamestringDeparture airport or city name.
destinationstringArrival airport IATA code.
destinationNamestringArrival airport or city name.
departureDateTimestringLocal scheduled departure (YYYY-MM-DDTHH:mm:ss).
arrivalDateTimestringLocal scheduled arrival (YYYY-MM-DDTHH:mm:ss).
departureDateTimeUtcstringDeparture in UTC when Ryanair exposes it, otherwise null.
arrivalDateTimeUtcstringArrival in UTC when Ryanair exposes it, otherwise null.
flightNumberstringRyanair flight number, for example FR30.
fareTypestringFare label for this row, for example Value, Regular, or Scheduled when only the timetable is available.
cabinstringCabin for this fare. Ryanair is Economy.
pricenumberFare price in currency, or null when only the timetable slot is known.
publishedPricenumberPublished pre-discount price when exposed, otherwise null.
currencystringISO currency code of the prices.
previousPricenumberPrior price when a change is exposed, otherwise null.
priceUpdatedstringISO timestamp of when Ryanair last updated the fare, or null.
seatsLeftintegerLive seats remaining. Returned as null; Ryanair does not expose live availability publicly.
durationstringFlight duration, for example 1h 20m.
stopsintegerNumber of stops. Ryanair point-to-point flights are 0.
operatedBystringOperating carrier when different, otherwise null.
soldOutbooleantrue when the day is sold out for the requested party size.
fareClassstringRyanair fare class code when exposed, otherwise null.
fareKeystringInternal fare identifier when exposed, otherwise null.
fareOptionsarrayAll fares of the flight (only populated when collapseFares is true), otherwise null.
seatMapobjectSeat map. Returned as null; Ryanair does not expose a public per-flight seat map.
departureCitystringDeparture city when exposed, otherwise null.
arrivalCitystringArrival city when exposed, otherwise null.
departureCountrystringDeparture country when exposed, otherwise null.
arrivalCountrystringArrival country when exposed, otherwise null.
flightKeystringInternal flight identifier when exposed, otherwise null.
directionstringoutbound for the requested leg, inbound for a return-leg row.
sourcestringWhere the row came from: schedule (timetable only), fare (priced fare), or schedule+fare (timetable slot priced by fare).
isLowestFareOfDaybooleantrue when this flight carries the day's lowest available fare.
deepLinkstringRyanair booking URL for the exact route and date.
observedAtstringISO 8601 timestamp of when the record was collected.
errorstringnull on success. On a failed run, a single item with a populated error field is written instead.

Example output record

Real record from a live run (route DUB to STN, includeReturn true). This is the day's lowest priced flight, so isLowestFareOfDay is true:

{
"origin": "DUB",
"originName": "Dublin",
"destination": "STN",
"destinationName": "London Stansted",
"departureDateTime": "2026-09-22T06:30:00",
"arrivalDateTime": "2026-09-22T07:50:00",
"departureDateTimeUtc": null,
"arrivalDateTimeUtc": null,
"flightNumber": "FR30",
"fareType": "Value",
"cabin": "Economy",
"price": 16.99,
"publishedPrice": null,
"currency": "EUR",
"previousPrice": null,
"priceUpdated": "2026-08-15T23:03:22.000Z",
"seatsLeft": null,
"duration": "1h 20m",
"stops": 0,
"operatedBy": null,
"soldOut": false,
"fareClass": null,
"fareKey": null,
"fareOptions": null,
"seatMap": null,
"departureCity": null,
"arrivalCity": null,
"departureCountry": null,
"arrivalCountry": null,
"flightKey": null,
"direction": "inbound",
"source": "schedule+fare",
"isLowestFareOfDay": true,
"deepLink": "https://www.ryanair.com/gb/en/trip/flights/select?adults=1&teens=0&children=0&infants=0&dateOut=2026-09-22&dateIn=&isReturn=false&originIata=DUB&destinationIata=STN",
"observedAt": "2026-08-16T01:26:20.863Z",
"error": null
}

Run via API and CLI

Start a run and wait for it to finish, then read the dataset. Replace <TOKEN> with your Apify API token.

Run synchronously and get dataset items in one call:

curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~ryanair-flights-scraper/run-sync-get-dataset-items?token=<TOKEN>" \
-H "Content-Type: application/json" \
-d '{"origin":"STN","destination":"DUB","departureDateFrom":"2026-09-15","departureDateTo":"2026-09-21","currency":"EUR","maxFlights":50}'

Start a run asynchronously:

curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~ryanair-flights-scraper/runs?token=<TOKEN>" \
-H "Content-Type: application/json" \
-d '{"origin":"DUB","destination":"STN","includeReturn":true,"collapseFares":true}'

Apify CLI:

apify call scrapers_lat/ryanair-flights-scraper \
--input '{"origin":"STN","destination":"DUB","tripType":"round","returnDateFrom":"2026-09-22","returnDateTo":"2026-09-28"}'

Fetch results

Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:

# JSON
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"
# CSV
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"
# Paginate large datasets
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"

<DATASET_ID> is returned as defaultDatasetId in the run object. Use offset and limit to page through large result sets. clean=true drops empty and internal fields.

Billing and limits

  • Pay per result. You are charged per record returned (result event). See the pricing tab for the current per-result price.
  • No charge on failure. If a run errors, the actor writes a single item with a populated error field and does not charge for it. Empty runs cost nothing.
  • Spend cap respected. Set maxTotalChargeUsd on the run; once reached, the actor stops emitting and charging further billable results.
  • Free Apify plans are capped at 10 records per run. Upgrade for a higher maxFlights.
  • Row count. By default each fare is one row, so a flight with several fares produces several rows. Set collapseFares to true for one row per flight.

FAQ and troubleshooting

Does it return every flight or only the cheapest? Every flight Ryanair publishes on the route for each day you scan. Each day is priced by its lowest available fare, and the flight carrying that fare is marked with isLowestFareOfDay set to true.

Why are price and fareType sometimes empty? Those rows come from the timetable only (source is schedule) when Ryanair does not return a live fare for that slot. The flight is real; only the price is not yet available for the requested party size and date.

Why is seatMap and seatsLeft always null? Ryanair does not expose a public per-flight seat map or live seat availability. Those endpoints are session and Akamai protected, so we return null rather than invent values.

How do I get the return leg too? Set tripType to round with returnDateFrom / returnDateTo, or set includeReturn to true. Return-leg rows are tagged direction inbound.

How do I get one row per flight instead of per fare? Set collapseFares to true. Each flight becomes a single row with all its fares in the fareOptions array.

A run returned 0 records. Why? Ryanair may not fly the requested route, or there are no flights in the date range. Confirm both airports are on the Ryanair network and widen the date range. Zero-result runs are not charged.

Is this an official Ryanair tool? No. This actor is independent and has no affiliation with Ryanair. It reads only data that is publicly available on ryanair.com. Use it in accordance with Ryanair's terms.

More scrapers at scrapers.lat

Built and maintained by scrapers.lat, where we publish scrapers for public platforms: company registries, government data, finance, travel, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.


Independent tool, not affiliated with Ryanair. Accesses only publicly available data. Use in accordance with Ryanair's terms of service.