Ryanair Flight Availability Scraper
Pricing
from $1.70 / 1,000 flights
Ryanair Flight Availability Scraper
Delivers structured Ryanair flight availability, fare, and calendar records for origin/destination routes, queried by IATA codes and travel dates.
Pricing
from $1.70 / 1,000 flights
Rating
0.0
(0)
Developer
Farhan Ali
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Ryanair Flight Availability Scraper creates a structured dataset of Ryanair flight availability, priced fares, and calendar dates for origin/destination routes. Each dataset item can include the flight number, origin and destination airports, scheduled times, duration, fare amount and currency, remaining seat count, and a booking URL. Query the source using IATA codes and travel dates or a Ryanair flight-select URL, control the result limit with maxItems, and retrieve records through the Apify Dataset API or export them as JSON, CSV, Excel, or XML.
Dataset at a glance
| Property | Value |
|---|---|
| Source | ryanair.com |
| Record unit | One flight or one available calendar date |
| Input methods | IATA codes and dates, or Ryanair start URLs |
| Main identifiers | flightKey, flightNumber, bookingUrl |
| Delivery | Apify Dataset and API |
| Export formats | JSON, CSV, Excel, XML |
| Update model | Fresh records per Actor run |
| Pricing | Pay per event, $2 per 1,000 flights |
Coverage and available records
The Actor returns two record types, controlled by scrapeMode:
flight— priced flight legs with departure/arrival times, duration, fare amount, currency, and remaining inventory.availableDate— calendar days on which a flight operates, without fare details.
Supported behavior includes:
- Return and one-way trips via
tripType(auto,return,oneway). - All destinations from one origin by leaving
destinationIataempty. - Date ranges via
dateOutEnd/dateInEndandflexDays(±0–6 days, matching the site calendar). - Multiple routes through the
routesarray, and start URLs parsed from the query string. - Passenger mix (adults, teens, children, infants) and optional
promoCode, connecting flights, and Prime fares.
Data dictionary
| Field | Type | Nullable | Description | Example |
|---|---|---|---|---|
recordType | string | No | flight or availableDate | flight |
flightKey | string | No | Ryanair flight key | FR~2527 |
flightNumber | string | No | Marketing flight number | FR 2527 |
origin | string | No | Origin IATA code | BER |
originName | string | No | Origin airport name | Berlin |
destination | string | No | Destination IATA code | MAD |
destinationName | string | No | Destination airport name | Madrid |
direction | string | No | outbound or inbound | outbound |
departureDate | string | No | Local departure date YYYY-MM-DD | 2026-11-28 |
departureTime | string | No | Local departure datetime | 2026-11-28T06:45:00 |
arrivalTime | string | No | Local arrival datetime | 2026-11-28T10:10:00 |
departureUtc | string | No | Departure datetime in UTC | ... |
arrivalUtc | string | No | Arrival datetime in UTC | ... |
duration | string | No | Scheduled duration HH:MM | 03:25 |
faresLeft | integer | No | Remaining fare inventory; -1 when unknown | 9 |
infantsLeft | integer | No | Remaining infant seats | 0 |
operatedBy | string | Yes | Operating carrier when not Ryanair | — |
fareAmount | number | No | Cheapest regular fare amount | 29.99 |
publishedFare | number | No | Published fare before discounts | 34.99 |
currency | string | No | Fare currency | EUR |
passengerType | string | No | Fare passenger type such as ADT | ADT |
hasDiscount | boolean | No | Whether a discount is applied | false |
discountAmount | number | No | Discount amount | 0.0 |
isPrime | boolean | No | Whether the fare is a Prime fare | false |
fareKey | string | No | Fare identifier from the booking response | — |
stops | integer | No | Number of stops | 0 |
segmentCount | integer | No | Number of flight segments | 1 |
segments | array | No | Segment list with times and flight numbers | [...] |
isRoundTrip | boolean | No | Whether the search was a return trip | true |
market | string | No | Ryanair market such as de-de | de-de |
adults | integer | No | Adult passengers in the search | 1 |
teens | integer | No | Teen passengers in the search | 0 |
children | integer | No | Child passengers in the search | 0 |
infants | integer | No | Infant passengers in the search | 0 |
promoCode | string | No | Promo code applied to the search | — |
bookingUrl | string | No | Ryanair flight-select URL | https://www.ryanair.com/... |
Example dataset record
{"recordType": "flight","flightNumber": "FR 2527","origin": "BER","destination": "MAD","direction": "outbound","departureDate": "2026-11-28","departureTime": "2026-11-28T06:45:00","arrivalTime": "2026-11-28T10:10:00","duration": "03:25","fareAmount": 29.99,"currency": "EUR","faresLeft": 9,"market": "de-de","adults": 1,"bookingUrl": "https://www.ryanair.com/de/de/trip/flights/select?..."}
The record above was produced by the input in the next section: BER to MAD on 2026-11-28, return trip, scrapeMode: "both".
Query and input reference
| Input | Type | Required | Default | Accepted values | Description |
|---|---|---|---|---|---|
originIata | string | No | — | 3-letter IATA code | Departure airport |
destinationIata | string | No | — | 3-letter IATA code | Arrival airport; empty expands all destinations from origin |
dateOut | string | No | — | YYYY-MM-DD | Outbound date |
dateIn | string | No | — | YYYY-MM-DD | Return date; omit for one-way |
dateOutEnd | string | No | — | YYYY-MM-DD | Last outbound date when walking the calendar |
dateInEnd | string | No | — | YYYY-MM-DD | Last return date when browsing inbound dates |
tripType | string | No | auto | auto, return, oneway | Trip type |
routes | array | No | — | Route objects | Extra routes with the same fields |
startUrls | array | No | — | Ryanair flight-select URLs | URLs parsed from the query string |
adults | integer | No | 1 | 1–25 | Adult passengers |
teens | integer | No | 0 | 0–24 | Teen passengers |
children | integer | No | 0 | 0–24 | Child passengers |
infants | integer | No | 0 | 0–24 | Infant passengers |
promoCode | string | No | — | Ryanair promo code | Promo code applied to the search |
includeConnectingFlights | boolean | No | false | true / false | Include connecting itineraries |
includePrimeFares | boolean | No | false | true / false | Request Prime fares |
flexDays | integer | No | 2 | 0–6 | Days before and after requested dates |
market | string | No | en-ie | e.g. en-ie, de-de, es-es | Market/locale |
scrapeMode | string | No | flights | flights, availableDates, both | What to scrape |
maxItems | integer | No | 0 | 0 = unlimited | Maximum records |
proxyConfiguration | object | No | Residential | Apify proxy settings | Proxy configuration |
Minimal request:
{"originIata": "BER","destinationIata": "MAD","dateOut": "2026-11-28"}
Advanced request:
{"originIata": "BER","destinationIata": "MAD","dateOut": "2026-11-28","dateIn": "2026-12-01","tripType": "return","adults": 1,"market": "de-de","flexDays": 2,"scrapeMode": "both","maxItems": 100}
Retrieve the data through the API
- Start the Actor with a JSON input containing
originIata,destinationIata, anddateOut. - Wait for the run to finish, or use the synchronous dataset endpoint for smaller jobs.
- Read records from the run's default dataset.
- Paginate or export the dataset.
from apify_client import ApifyClientclient = ApifyClient("YOUR_API_TOKEN")run = client.actor("datascrapers/ryanair-scraper").call(run_input={"originIata": "BER","destinationIata": "MAD","dateOut": "2026-11-28","dateIn": "2026-12-01","scrapeMode": "both","maxItems": 50,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["recordType"], item["flightNumber"], item.get("fareAmount"))
Apify's generated API tab documents the equivalent calls for other languages.
Data quality and record handling
- Completeness —
fareAmountis present only onflightrecords;availableDaterecords carry dates only. - Source changes — fares and availability reflect the response at scrape time and can change between runs.
- Deduplication — the Actor does not deduplicate across runs; each run writes to a new dataset.
- Recommended dedup key —
flightKey+direction+departureDate(+fareAmount) for fare history;origin|destination|departureDatefor calendar days. - Retry/error behavior — per-window extraction fails soft, so a single bad date does not stop the run.
Export and pipeline examples
| Destination | Recommended method | Typical use |
|---|---|---|
| PostgreSQL/Supabase | Dataset API or webhook consumer | Fare history and route research |
| Google Sheets | Apify integration | Deal tracking |
| S3/cloud storage | Scheduled export or integration | Price snapshots |
Pricing and cost examples
Billing is pay per event: each dataset record pushed is one charge. Platform compute is included in the actor usage fee.
| Records | Estimated base cost |
|---|---|
| 1,000 | $2.00 |
| 10,000 | $20.00 |
| 100,000 | $200.00 |
Apify plan discounts reduce the per-event rate (for example Gold plans pay about $1.70 per 1,000 flights). Estimates depend on the verified pricing model and scrapeMode.
Limitations and responsible data use
- Only publicly available Ryanair flight data is returned.
- Fares and availability change frequently; records reflect the moment of collection.
- Fields such as
fareAmountandfaresLeftare conditional on the record type and response. - No historical snapshots are stored unless you keep them yourself.
- You are responsible for complying with Ryanair's terms and applicable laws.
Dataset questions
What does one dataset item represent?
One priced flight or one available calendar date, depending on scrapeMode.
Which field should I use as a unique identifier?
Use flightKey plus direction and departureDate for flights; for calendar days use origin|destination|departureDate.
Are fields nullable or conditional?
Yes. fareAmount and related fare fields are only present on flight records; availableDate records carry no fares.
Can I retrieve the records as CSV or JSON?
Yes. Export the default dataset as JSON, CSV, Excel, or XML, or read it through the Apify Dataset API.
How do I paginate large datasets?
Set maxItems to cap output, or paginate the dataset through the Dataset API.
What counts as a billable result?
Each flight or available-date record pushed to the dataset is one event charge.
Related datasets from Data Scrapers
- Booking.com Scraper — hotel availability and pricing for the same travel-intelligence workflows.
- Skyscanner Scraper — flight search records that join with Ryanair route data for fare comparison.
- HRS Scraper — hotel records for end-to-end trip planning.
- TripAdvisor Reviews Scraper — destination and property review data for travel research.
Data Scrapers support
Need an additional field, record type, or export workflow? Contact Data Scrapers at stardustspotlight@gmail.com. Include a sample source URL, required fields, expected record volume, and preferred delivery format.