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
3 days ago
Last modified
Categories
Share
Ryanair Flights Scraper: Fares, Seats & Schedules
Here is one real result, with every field a fare record returns:
{"origin": "STN","originName": "London Stansted","destination": "DUB","destinationName": "Dublin","departureDateTime": "2026-09-09T22:45:00","arrivalDateTime": "2026-09-10T00:05:00","flightNumber": "FR256","price": 18.99,"currency": "EUR","previousPrice": null,"priceUpdated": "2026-08-10T14:02:33.000Z","departureCity": "London","arrivalCity": "Dublin","departureCountry": "United Kingdom","arrivalCountry": "Ireland","flightKey": "FR~ 256~ ~~STN~09/09/2026 22:45~DUB~09/10/2026 00:05~~","newRoute": false,"direction": "outbound","deepLink": "https://www.ryanair.com/gb/en/trip/flights/select?adults=1&teens=0&children=0&infants=0&dateOut=2026-09-09&dateIn=&isReturn=false&originIata=STN&destinationIata=DUB","observedAt": "2026-08-10T14:04:41.832Z","error": null}
The most complete Ryanair fare scraper available. It returns every field the fare scan exposes between two airports, from price and currency to flight number, city and country names, a price-change comparison and a ready-to-use booking deep link, and can add a per-flight availability pass with seats left, duration and stops. Works across the Ryanair network by IATA code and date, one-way or round trip.
📥 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 Ryanair fares between an origin and destination airport (by IATA code) across the dates you give, one-way or round trip, and writes one fare record per flight to the run's dataset. Each fare record includes the price and currency, flight number, full departure and arrival date and times, origin and destination city and country names, a previous-price comparison when available, a new-route flag, the trip direction, and a booking deep link. When withDetails is on, the actor makes a second availability request per day and emits an additional details record per flight with seats left, duration, stops, operating carrier and published fare.
Data covers the Ryanair network across 230+ European airports. Prices are returned in the currency you choose.
Quickstart
Open the actor, paste this into the input, and press Run. It scans one-way fares from London Stansted to Dublin.
{"maxFlights": 10,"withDetails": true,"origin": "STN","destination": "DUB","tripType": "oneWay","currency": "EUR","adults": 1}
Leave departureDateFrom and departureDateTo empty to scan a near-future date automatically, or set a date range to scan several days. For round trips, set tripType to round and provide the return dates.
Input reference
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
origin | string | no | STN | Departure airport IATA code, for example STN, DUB, BCN. |
destination | string | no | DUB | Arrival airport IATA code. |
departureDateFrom | string | no | (auto) | Earliest outbound date (YYYY-MM-DD). Leave empty to search a near-future date automatically. |
departureDateTo | string | no | (same as from) | Latest outbound date (YYYY-MM-DD). Leave empty to use the same day as departureDateFrom. |
tripType | enum | no | oneWay | oneWay for one-way or round for round trip. |
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. |
currency | string | no | EUR | Currency for the fare scan prices, for example EUR, GBP, USD. |
adults | integer | no | 1 | Number of adult passengers (affects seat availability counts). |
withDetails | boolean | no | true | When on, make a second request per day to retrieve every flight with seats left, duration, operating carrier and fare types. Adds a separate details record per flight. |
maxFlights | integer | no | 10 | Maximum fare records to collect. Range 1 to 1000000. |
Output reference
The actor emits two kinds of records. Fare records (the result event) always. Availability records (the details event) only when withDetails is on. Types: string, number, integer, boolean, or null when a value is absent.
Fare record fields:
| Field | Type | Description |
|---|---|---|
origin | string | Departure airport IATA code. |
originName | string | Departure airport name. |
destination | string | Arrival airport IATA code. |
destinationName | string | Arrival airport name. |
departureDateTime | string | Local departure date and time. |
arrivalDateTime | string | Local arrival date and time. |
flightNumber | string | Ryanair flight number, for example FR256. |
price | number | Fare amount for the selected passengers. |
currency | string | Currency of the price. |
previousPrice | number | Prior fare for change comparison, or null. |
priceUpdated | string | ISO timestamp Ryanair last updated the price. |
departureCity | string | Departure city name. |
arrivalCity | string | Arrival city name. |
departureCountry | string | Departure country name. |
arrivalCountry | string | Arrival country name. |
flightKey | string | Ryanair internal flight key. |
newRoute | boolean | Whether Ryanair flags this as a new route. |
direction | string | outbound or return. |
deepLink | string | Ready-to-use Ryanair booking URL for this trip. |
observedAt | string | ISO 8601 timestamp of when the record was collected. |
error | string | null on success. |
Availability record fields (details event, present when withDetails is on). These carry the same route, flight and pricing fields as a fare record, plus:
| Field | Type | Description |
|---|---|---|
publishedPrice | number | Published fare before discounts, or null. |
fareClass | string | Fare class, for example Regular. |
seatsLeft | integer | Seats left on the flight, or null when Ryanair reports plenty available. |
duration | string | Flight duration, for example 1:20. |
stops | integer | Number of stops (0 for direct). |
operatedBy | string | Operating carrier, or null. |
sold_out | boolean | Whether the flight is sold out. |
departureDateTimeUtc | string | Departure time in UTC, or null. |
arrivalDateTimeUtc | string | Arrival time in UTC, or null. |
Example output record
Real fare record from a live run (input {"origin":"STN","destination":"DUB","tripType":"oneWay","currency":"EUR"}):
{"origin": "STN","originName": "London Stansted","destination": "DUB","destinationName": "Dublin","departureDateTime": "2026-09-14T06:30:00","arrivalDateTime": "2026-09-14T07:50:00","flightNumber": "FR271","price": 19.99,"currency": "EUR","previousPrice": null,"priceUpdated": "2026-08-15T07:05:36.000Z","departureCity": "London","arrivalCity": "Dublin","departureCountry": "United Kingdom","arrivalCountry": "Ireland","flightKey": "FR~ 271~ ~~STN~09/14/2026 06:30~DUB~09/14/2026 07:50~~","newRoute": false,"direction": "outbound","deepLink": "https://www.ryanair.com/gb/en/trip/flights/select?adults=1&teens=0&children=0&infants=0&dateOut=2026-09-14&dateIn=&isReturn=false&originIata=STN&destinationIata=DUB","observedAt": "2026-08-15T09:53:03.488Z","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","tripType":"oneWay","currency":"EUR","maxFlights":25}'
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":"BCN","destination":"CIA","tripType":"round","departureDateFrom":"2026-10-01","returnDateFrom":"2026-10-08","maxFlights":100}'
Apify CLI:
apify call scrapers_lat/ryanair-flights-scraper \--input '{"origin":"STN","destination":"DUB","withDetails":true}'
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 fare record returned (
resultevent). See the pricing tab for the current per-result price. - Details billing. When
withDetailsis on, each availability record is billed as a separatedetailsevent. Turn it off to scan fares only. - No charge on failure. A run that finds no fares does not push billable records, so empty runs cost nothing. Error records are written without an event name and are not charged.
- 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 fares per run. Upgrade for higher
maxFlights.
FAQ and troubleshooting
A run returned no fares. Why? Ryanair may not fly that route on the chosen date, or the date range was empty of scheduled flights. Try another date, confirm both IATA codes, or widen the date range. Runs with no fares are not charged.
How do I scan a round trip?
Set tripType to round and provide returnDateFrom (and optionally returnDateTo). Return-leg records have direction set to return.
What is the deepLink?
It is a ready-to-use Ryanair booking URL preloaded with your route, dates and passenger count, so you can open the exact trip on ryanair.com.
Why is seatsLeft null on a details record?
Ryanair reports a sentinel value when plenty of seats are available rather than an exact count. In that case seatsLeft is returned as null instead of a made-up number.
Why did I only get fare records and no details records?
Details records are only emitted when withDetails is on and Ryanair returns per-flight availability for the day. When availability is unavailable, the fare scan still returns.
Is this an official Ryanair tool? No. This actor is independent and has no affiliation with Ryanair. It reads only publicly available fare and availability data. Use it in accordance with Ryanair's terms.
Related scrapers
- FlixBus Scraper: coach fares and schedules across Europe.
- Deutsche Bahn Scraper: German rail connections and prices.
- Booking Hotels Scraper: hotel prices and availability.
- Booking Reviews Scraper: guest reviews from Booking.com hotels.
- Eventbrite Scraper: events with dates, venues and prices.
- Exchange Rates Scraper: daily currency exchange rates.
More scrapers at scrapers.lat
Built and maintained by scrapers.lat, where we publish scrapers for US and Latin American public platforms: company registries, government data, finance, 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 fare and availability data. Use in accordance with Ryanair's terms of service.
