Ryanair Flights Scraper: Fares, Seats & Schedules
Pricing
from $11.54 / 1,000 results
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
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
0.22 hours
Issues response
21 hours ago
Last modified
Categories
Share
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
Table of contents
- What it does
- Quickstart
- Input reference
- Output reference
- Example output record
- Run via API and CLI
- Fetch results
- Billing and limits
- FAQ and troubleshooting
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
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
origin | string | yes | STN | Departure airport IATA code (for example STN, DUB, BCN). One of 224 Ryanair airports. |
destination | string | yes | DUB | Arrival airport IATA code. One of 224 Ryanair airports. |
departureDateFrom | string | no | (auto) | Earliest outbound date (YYYY-MM-DD). Leave empty to search a near-future date automatically. Past dates are moved forward. |
departureDateTo | string | no | (= from) | Latest outbound date (YYYY-MM-DD). Leave empty to use the same day as departureDateFrom. |
tripType | enum | no | oneWay | oneWay or round. Round trips also scan the return leg using the return date fields. |
returnDateFrom | string | no | (empty) | Earliest inbound date (YYYY-MM-DD). Round trips only. |
returnDateTo | string | no | (empty) | Latest inbound date (YYYY-MM-DD). Round trips only. |
includeReturn | boolean | no | false | 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. |
collapseFares | boolean | no | false | By 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. |
currency | enum | no | EUR | Currency for the fare prices. One of EUR, GBP, USD, PLN, SEK, DKK, NOK, CHF, HUF, RON, BGN, CZK. |
adults | integer | no | 1 | Number of adult passengers (affects seat availability counts). |
maxFlights | integer | no | 10 | Maximum 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.
| Field | Type | Description |
|---|---|---|
origin | string | Departure airport IATA code. |
originName | string | Departure airport or city name. |
destination | string | Arrival airport IATA code. |
destinationName | string | Arrival airport or city name. |
departureDateTime | string | Local scheduled departure (YYYY-MM-DDTHH:mm:ss). |
arrivalDateTime | string | Local scheduled arrival (YYYY-MM-DDTHH:mm:ss). |
departureDateTimeUtc | string | Departure in UTC when Ryanair exposes it, otherwise null. |
arrivalDateTimeUtc | string | Arrival in UTC when Ryanair exposes it, otherwise null. |
flightNumber | string | Ryanair flight number, for example FR30. |
fareType | string | Fare label for this row, for example Value, Regular, or Scheduled when only the timetable is available. |
cabin | string | Cabin for this fare. Ryanair is Economy. |
price | number | Fare price in currency, or null when only the timetable slot is known. |
publishedPrice | number | Published pre-discount price when exposed, otherwise null. |
currency | string | ISO currency code of the prices. |
previousPrice | number | Prior price when a change is exposed, otherwise null. |
priceUpdated | string | ISO timestamp of when Ryanair last updated the fare, or null. |
seatsLeft | integer | Live seats remaining. Returned as null; Ryanair does not expose live availability publicly. |
duration | string | Flight duration, for example 1h 20m. |
stops | integer | Number of stops. Ryanair point-to-point flights are 0. |
operatedBy | string | Operating carrier when different, otherwise null. |
soldOut | boolean | true when the day is sold out for the requested party size. |
fareClass | string | Ryanair fare class code when exposed, otherwise null. |
fareKey | string | Internal fare identifier when exposed, otherwise null. |
fareOptions | array | All fares of the flight (only populated when collapseFares is true), otherwise null. |
seatMap | object | Seat map. Returned as null; Ryanair does not expose a public per-flight seat map. |
departureCity | string | Departure city when exposed, otherwise null. |
arrivalCity | string | Arrival city when exposed, otherwise null. |
departureCountry | string | Departure country when exposed, otherwise null. |
arrivalCountry | string | Arrival country when exposed, otherwise null. |
flightKey | string | Internal flight identifier when exposed, otherwise null. |
direction | string | outbound for the requested leg, inbound for a return-leg row. |
source | string | Where the row came from: schedule (timetable only), fare (priced fare), or schedule+fare (timetable slot priced by fare). |
isLowestFareOfDay | boolean | true when this flight carries the day's lowest available fare. |
deepLink | string | Ryanair booking URL for the exact route and date. |
observedAt | string | ISO 8601 timestamp of when the record was collected. |
error | string | null 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:
# JSONcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"# CSVcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"# Paginate large datasetscurl "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 (
resultevent). 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
errorfield and does not charge for it. Empty runs cost nothing. - Spend cap respected. Set
maxTotalChargeUsdon 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
collapseFaresto 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.
