Ryanair Fare Calendar Scraper avatar

Ryanair Fare Calendar Scraper

Pricing

from $1.00 / 1,000 fare date collecteds

Go to Apify Store
Ryanair Fare Calendar Scraper

Ryanair Fare Calendar Scraper

Day-by-day cheapest fares for every date on any Ryanair route, up to a year ahead. Each date comes back with its fare, the currency it was filed in, the flight number and departure time, plus the cheapest and dearest day of every month, in one clean table.

Pricing

from $1.00 / 1,000 fare date collecteds

Rating

0.0

(0)

Developer

Hamza

Hamza

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Get the cheapest fare for every single date on any Ryanair route, up to a year ahead, as one clean table. Pick a route, pick how far ahead to look, and every date comes back with its cheapest published fare, the currency it was filed in, the flight number and departure time behind that fare, and the cheapest and dearest day of each month already worked out for you. No account and no login are needed — just run it.

One row per date, one table, no gaps. Built for price-alert products, travel apps, route analysts and anyone who needs Europe's largest low-cost carrier in a spreadsheet rather than on a booking screen.


What you can do with it

  • Find the cheapest day to fly on a route across the next twelve months, and see how much cheaper it is than the month's average.
  • Power a price-alert or fare-watch product by running it on a schedule and comparing each day's fare with the last run.
  • Compare a route in several currencies — on routes between two currency zones the airline sets its own price in each one, so the cheapest day can move depending on which you sell in.
  • Feed a seasonality model with a full year of day-level fares, so you can show when a route gets expensive and by how much.
  • Build route-level dashboards with the monthly low, the monthly high and the day each one falls on, already computed.
  • Check what is actually operating — every route-month the airline had nothing on sale in is named in the run summary, with the reason and whether the airline flies the route at all, so a seasonal gap is never mistaken for a missing answer.

What you get

One row per route, direction and date. A real record, abridged:

{
"carrier": "Ryanair",
"carrierCode": "FR",
"routeId": "DUB-STN",
"origin": "DUB",
"originName": "Dublin Airport",
"originCountry": "IE",
"destination": "STN",
"destinationName": "London Stansted Airport",
"destinationCountry": "GB",
"direction": "outbound",
"date": "2026-11-01",
"price": 23.99,
"currency": "EUR",
"isUnavailable": false,
"isCheapestOfMonth": true,
"flightNumber": "FR30",
"departureLocalTime": "2026-11-01T06:20",
"arrivalLocalTime": "2026-11-01T07:40",
"departureTimeZone": "Europe/Dublin",
"flightsThatDay": 10,
"monthMinFare": 23.99,
"monthMinFareDate": "2026-11-01",
"monthMaxFare": 24.99,
"monthMaxFareDate": "2026-11-06",
"routeStatus": "operated",
"searchMonth": "2026-11",
"collectedAt": "2026-08-16T12:00:00.000Z"
}

Input reference

FieldTypeDefaultWhat it does
originstringDUBThree-letter code of the departure airport. City-wide codes such as LON are not accepted — the airline sells fares per airport.
destinationstringSTNThree-letter code of the arrival airport.
routesarray[]Extra routes for the same run, written as DUB-STN. Up to 50 routes per run.
tripTypeselectoneWayoneWay collects the outbound calendar. roundTrip also collects the journey home, so each date appears once per direction.
monthsAheadinteger3How many calendar months to collect, counting the current one. Maximum 12.
startDatedatetodayCollect from this date instead of today.
endDatedateStop at this date. Replaces monthsAhead when set.
currencyselectEURThe currency fares are collected in: EUR, GBP, USD, PLN, CZK, SEK, DKK, NOK, HUF, CHF or MAD.
includeFlightNumbersbooleantrueAdds the flight number behind each cheapest fare, and confirms the route is operated that month.
includeUnavailableDatesbooleantrueKeeps a row for every date in range, including those with nothing on sale, so the calendar has no gaps.
maxRouteMonthsinteger200Safety cap on run size. One route-month is one route and one calendar month. Maximum 600.
maxRowsinteger20000Stop after this many dates. The run stops searching at that point, so nothing beyond the limit is collected or charged. Maximum 200,000.

Output fields

FieldTypeDescription
carrier, carrierCodestringAlways Ryanair and FR.
routeIdstringThe route this row belongs to, as DUB-STN.
origin, originName, originCity, originCountrystringDeparture airport code and its details.
destination, destinationName, destinationCity, destinationCountrystringArrival airport code and its details.
directionstringoutbound or inbound.
tripTypestringWhether this row came from a one-way or a return collection.
datestringThe departure date, as YYYY-MM-DD.
pricenumber | nullThe cheapest fare published for that date. null when nothing is on sale.
currencystring | nullThe currency the fare was actually published in — read back from the airline's own answer, never assumed from what was asked for.
requestedCurrencystringThe currency you chose for the collection.
isUnavailablebooleanTrue when that date has no fare on sale.
isCheapestOfMonthbooleanTrue when this date matches the month's lowest fare.
routeStatusstringAlways operated on a row, because a row only exists for a date the airline was selling — which is proof it flies the route that month. Months with nothing on sale produce no rows at all; each one is named in the run summary instead, with its reason and its route status.
flightNumberstring | nullThe flight behind the cheapest fare. null when flight numbers were not collected, or when no departure that day matched.
departureLocalTime, arrivalLocalTimestring | nullLocal airport times, as YYYY-MM-DDTHH:mm.
departureTimeUtcstring | nullThe same departure as a UTC timestamp.
departureTimeZone, arrivalTimeZonestring | nullThe zone each local time belongs to.
flightsThatDaynumber | nullHow many departures the airline lists that day, when flight numbers were collected.
monthMinFare, monthMinFareDatenumber | stringThe cheapest fare of that month and the date it falls on, as the airline publishes it for the whole month.
monthMaxFare, monthMaxFareDatenumber | stringThe dearest fare of that month and the date it falls on, on the same basis.
searchMonthstringThe month this row belongs to, as YYYY-MM.
isEstimatedbooleanAlways false. Every fare here is one the airline published; nothing is modelled or filled in.
collectedAtstringWhen the row was collected.

Alongside the table, every run writes a summary you can read: dates collected, routes the airline does not fly, and — kept strictly separate — searches that could not be completed. It also lists every route-month the airline had nothing on sale in, by name, each with its month, the reason, and whether the airline flies that route at all:

{
"route": "DUB-CFU",
"month": "2027-01",
"routeStatus": "operated",
"reason": "no_fares_published",
"explanation": "the airline had nothing on sale in this month"
}

That is where a seasonal gap shows up: the route is flown, January simply has nothing on sale. A route the airline does not fly at all reads not_operated / route_not_served, and one that could not be established either way reads unknown — never guessed.


Pricing

Pay per event. You pay for the fare dates you receive, plus a small amount for each route-month searched.

What you pay forPrice
Fare date collected — one date, with its fare and everything attached to it$1.00 per 1,000
Route month searched — one route, one calendar month$0.010 each

A worked example. You collect Dublin → London Stansted three months ahead, one way — the prefilled input this actor opens with.

  • That is 3 route-months (1 route × 3 months) = $0.03
  • All three months are selling, so about 90 dates come back = $0.09
  • Total: about $0.12

Scaling up: ten routes over twelve months is 120 route-months ($1.20) and roughly 3,600 dates ($3.60) — about $4.80 for a full year of day-level fares on ten routes.

A route the airline does not fly is dropped before anything is searched, and costs nothing.

Maximum rows is a hard cost cap, not just a cap on the table: once that many dates have been collected the run stops searching, so no further route-month is searched or charged.

A month where the airline genuinely has nothing on sale still counts as a route-month searched, because finding that out is real work and the answer is worth having. A search that could not be completed is never charged, and is reported in the run summary as a failed search rather than as an empty month.


Limits & what this actor cannot do

  • Fares are a snapshot. Airline pricing changes continuously, and a fare collected now may be gone minutes later.
  • It reports what the airline publishes to the public. It does not hold seats, does not book, and cannot guarantee a fare is still available.
  • One fare per date, not every flight. Each date carries the cheapest fare the airline is publishing for that day. Other departures on the same day are usually dearer and are not priced separately.
  • The fare is the airline's own headline price for one adult with no extras. Baggage, seat selection, priority boarding and card fees are extra and are not included.
  • Do not re-convert the fares yourself. On most routes the airline quotes one price and shows it to you converted at a single rate, so converting it back gains you nothing and loses the rounding. But where a route crosses two currency zones — Ireland to the United Kingdom, for example — the airline sets its own price in each currency, and those prices move independently: the same day can be a round 23.99 in one and 21.99 in the other, and the cheapest day of the month can differ between them. Collect in the currency you sell in; collect the route twice if you need to compare two, and compare the collected figures rather than a conversion.
  • The currency choice is a fixed list — EUR, GBP, USD, PLN, CZK, SEK, DKK, NOK, HUF, CHF and MAD. Those are the currencies the airline was verified to price this calendar in. Every row also carries the currency its fare was actually published in, read back from the airline's own answer rather than assumed, so you can always tell.
  • Roughly a year ahead, no further. The airline publishes about twelve months of fares; dates beyond that are trimmed and the run tells you it trimmed them.
  • Routes are seasonal. A route with nothing on sale in the months you asked for is reported in the run summary as having nothing on sale, with the reason, rather than as an error — and separately from a route the airline does not fly at all, which is judged against the airline's own route list rather than against one month's timetable. A month with no fares carries no rows in the table, because the airline published no dates to build them from and none are invented.
  • A search the airline refuses to complete is reported as a failed search, never as "no fares found". This is deliberate: an empty result that is really a refusal is the one outcome that would quietly mislead you.
  • City-wide codes are not supported. The airline sells per airport, so LON or MIL are rejected with the list of airports to use instead.
  • Flight numbers are optional and matched, never guessed. The flight number attached to a date is the departure whose own time matches the cheapest fare. Where no departure matches, the field is left empty rather than filled with the first flight of the day.
  • Speed depends on the size of the job and on how quickly the airline answers. No fixed throughput is promised.
  • The airline's terms govern automated access. You are responsible for using the data lawfully and in line with those terms.

FAQ

Do I need an account with the airline? No. Nothing is signed in to and no booking is ever started.

Does it need my login or password? No. There is nothing to configure beyond the route and the dates.

Can I schedule it? Yes. It is built for it — run it daily or weekly on a list of routes and compare each run with the last to spot drops. Day-to-day comparison is honest; minute-to-minute is not, because these fares simply do not move that fast.

Are these fares bookable? They are the fares the airline was publishing at the moment of collection, for one adult with no extras. Prices change continuously and availability is not held, so treat a fare as a snapshot rather than a guarantee.

Why does a date have no price? Because the airline had nothing on sale for that date — a day the route does not operate, or a day that has sold out. Those dates are kept with an empty fare so your calendar has no gaps; turn off Keep dates with no fare if you only want priced dates.

Why can I not choose any currency I like? Because only the listed ones are priced honestly. Others are answered without any error at all, but with euro amounts or with an empty month, which would put a wrong number or a wrong verdict in your table. The list is closed so that cannot happen.

Can I get every flight on a route, not just the cheapest one per day? Not from this one. It is a fare calendar: one cheapest fare per date. The number of departures that day is included so you know how much choice there is.

What happens if one route fails and the others work? The successful routes are still collected and returned. The failed ones are counted separately in the run summary, so you always know whether an empty result means "no fares" or "could not be read".