# Ryanair Fare Finder (`trovevault/ryanair-fare-finder`) Actor

Find Ryanair fares by city, flexible dates, total price, route airports, booking link, and monthly fare deal signal.

- **URL**: https://apify.com/trovevault/ryanair-fare-finder.md
- **Developed by:** [Trove Vault](https://apify.com/trovevault) (community)
- **Categories:** Travel, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.70 / 1,000 routes

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

### What does Ryanair Fare Finder do?

**Ryanair Fare Finder** finds direct [Ryanair](https://www.ryanair.com/) fares by city, compares nearby dates, and returns a monthly fare signal for each option. It is a focused Ryanair fare API alternative for low-cost flight monitoring; it does not compare all airlines, OTAs, or connecting itineraries.

The actor resolves Ryanair city dropdowns into route airports, checks the monthly fare calendar, and outputs structured fare rows with departure times, price per passenger, total price, monthly benchmark, `dealSignal`, and booking link. If no fare is found, it still returns a `No matching fare` row explaining why.

### Why use Ryanair Fare Finder?

Use this actor when you need a fast way to monitor Ryanair fare opportunities without searching the Ryanair website manually for every date.

- Search by Ryanair city instead of airport code.
- Use dropdowns for active Ryanair cities.
- Find direct Ryanair routes between selected cities.
- Compare fares around a preferred date with `dateFlexibilityDays`.
- Return one-way or return-trip fare combinations.
- Calculate `pricePerPassenger` and `totalPrice`.
- Benchmark each fare against the same route and month.
- Get a simple `buy`, `wait`, `avoid`, or `no_result` signal.
- Use Apify scheduling, API access, dataset exports, webhooks, and integrations.

This actor is narrower than Skyscanner or Google Flights. Broad flight-search APIs often require paid credits, partner approval, or API keys. Ryanair Fare Finder focuses on one airline source and turns fare-calendar data into a useful monitoring dataset.

### Use cases and target users

- **Flight deal newsletters** - find cheap Ryanair dates for selected city pairs.
- **Travel planners** - compare nearby dates before choosing a weekend trip.
- **Travel dashboards** - schedule route checks and append results to a long-lived dataset.
- **Budget travel agencies** - monitor low-cost route opportunities for clients.
- **Developers and analysts** - use the Apify API to feed fare data into sheets, alerts, or BI tools.

### What data can Ryanair Fare Finder extract?

| Field | Type | Description |
|---|---:|---|
| `fareStatus` | string | `Fare found` or `No matching fare` |
| `tripType` | string | `one_way` or `return` |
| `originCity`, `destinationCity` | string | Resolved search cities |
| `outboundDepartureAirport`, `outboundArrivalAirport` | string/null | Route airport codes, for example `LIS` to `STN` |
| `outboundDepartureDate`, `outboundDepartureTime` | string/null | Outbound local date and time |
| `returnDepartureDate`, `returnDepartureTime` | string/null | Return date and time for return trips |
| `passengers` | number | Adult passengers used for total price |
| `pricePerPassenger`, `totalPrice` | number/null | Fare-calendar price before optional extras |
| `outboundMonthlyLowestPrice`, `outboundMonthlyMedianPrice` | number/null | Route/month benchmark values |
| `benchmarkPrice`, `priceVsBenchmarkPercent` | number/null | Monthly median comparison |
| `dealSignal`, `dealReason` | string | Fare recommendation and explanation |
| `bookingUrl` | string/null | Ryanair booking page URL when a fare is found |

Run-level diagnostics such as routes checked, calendars checked, and lookup status are stored in `RUN_SUMMARY`.

### How to scrape Ryanair fares

1. Open the actor on Apify.
2. Select `originCity` and `destinationCity` from the Ryanair city dropdowns.
3. Choose `departureDate`.
4. Leave `returnDate` blank for one-way fares, or add it for return trips.
5. Set `passengers`, `currency`, `dateFlexibilityDays`, and `maxResults`.
6. Click **Start**.
7. Download results as JSON, CSV, Excel, HTML, XML, or RSS.
8. For repeated checks, schedule the actor or append rows to your own dataset with `datasetId`.

The dropdowns include active Ryanair cities, but Apify does not support dependent dropdowns. The destination list cannot automatically hide cities that are not reachable from the selected origin. The actor validates the direct route during the run.

### Cost expectations

This actor uses lightweight HTTP requests rather than browser automation. A simple one-way route check normally needs one airport list request, one route list request, and one fare-calendar request.

In a cloud validation run for `Lisbon, Portugal` to `London, United Kingdom`, the actor returned 5 rows in about 3 seconds and Apify reported roughly `$0.001` of usage. Larger flexibility windows, return trips, or cities with multiple airport matches can use more requests.

### Input

```json
{
  "originCity": "Lisbon, Portugal",
  "destinationCity": "London, United Kingdom",
  "departureDate": "2026-09-12",
  "returnDate": "",
  "passengers": 1,
  "dateFlexibilityDays": 1,
  "currency": "EUR",
  "maxResults": 2
}
````

Key fields:

- `originCity`, `destinationCity` - Ryanair cities from the dropdown.
- `departureDate`, `returnDate` - outbound and optional return dates in `YYYY-MM-DD`.
- `passengers` - adult passengers used to calculate `totalPrice`.
- `dateFlexibilityDays` - days before and after the selected dates to compare.
- `currency` - requested fare currency.
- `maxResults` - maximum rows returned after sorting.
- `datasetId`, `runId` - optional workflow fields.

### Output

Example fare row:

```json
{
  "fareStatus": "Fare found",
  "tripType": "one_way",
  "originCity": "Lisbon",
  "destinationCity": "London",
  "outboundDepartureAirport": "LIS",
  "outboundArrivalAirport": "STN",
  "outboundDepartureDate": "2026-09-10",
  "outboundDepartureTime": "20:55",
  "passengers": 1,
  "pricePerPassenger": 38.99,
  "totalPrice": 38.99,
  "currency": "EUR",
  "outboundMonthlyLowestPrice": 32.99,
  "outboundMonthlyMedianPrice": 52.17,
  "benchmarkPrice": 52.17,
  "priceVsBenchmarkPercent": -25.3,
  "dealSignal": "buy",
  "dealReason": "Fare is at least 10% below the monthly median for this route.",
  "bookingUrl": "https://www.ryanair.com/gb/en/trip/flights/select?..."
}
```

Example no-results row:

```json
{
  "fareStatus": "No matching fare",
  "tripType": "return",
  "originCity": "Skiathos, Greece",
  "destinationCity": "Faro, Portugal",
  "outboundDepartureDate": "2026-06-30",
  "returnDepartureDate": "2026-07-24",
  "pricePerPassenger": null,
  "totalPrice": null,
  "benchmarkPrice": null,
  "dealSignal": "no_result",
  "bookingUrl": null
}
```

### API access

```bash
curl "https://api.apify.com/v2/acts/trovevault~ryanair-fare-finder/runs" \
  -X POST \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -d '{
    "originCity": "Lisbon, Portugal",
    "destinationCity": "London, United Kingdom",
    "departureDate": "2026-09-12",
    "returnDate": "",
    "passengers": 1,
    "dateFlexibilityDays": 1,
    "currency": "EUR",
    "maxResults": 2
  }'
```

Fetch results:

```bash
curl "https://api.apify.com/v2/datasets/DATASET_ID/items?clean=true" \
  -H "Authorization: Bearer $APIFY_TOKEN"
```

You can also use schedules, webhooks, Make, Zapier, Google Sheets exports, or Apify-compatible MCP workflows.

### Deal signal logic

- `buy` - fare is at least 10% below the monthly median, or close to the monthly low.
- `wait` - fare is near the monthly median.
- `avoid` - fare is at least 25% above the monthly median.
- `no_result` - no direct route or fare matched the selected date window.

This is a route-and-month benchmark, not a long-term historical average or a guarantee that the fare will rise or fall.

### Troubleshooting and support

#### Why did my selected city pair return No matching fare?

Ryanair may not operate a direct route between the selected cities, or no fare may exist in the selected date window. Try a larger `dateFlexibilityDays`, a different month, or a nearby Ryanair city.

#### Are prices final checkout prices?

No. Prices are fare-calendar snapshots before baggage, priority boarding, seats, payment fees, and other optional extras.

#### Does it need my Ryanair login or API key?

No. The actor does not require a Ryanair account or user API key.

#### Is this legal to use?

The actor reads publicly reachable route and fare-calendar information. It does not extract private user data. Use it ethically, avoid excessive request volumes, and make sure your use complies with applicable laws and terms. If unsure, consult your lawyers.

#### Where can I get help?

Use the Issues tab on the Apify actor page. Include your input and run ID when reporting an empty, failed, or surprising run.

### Limitations

- Covers direct Ryanair routes only.
- Does not compare all airlines, OTAs, or connecting flights.
- Fare-calendar prices may change after the run.
- Final checkout totals may differ after optional extras.
- If public Ryanair endpoints change, extraction may need maintenance.

### Related actors

- Hotel Stay Price Comparison
- Ticketing Comparison, planned
- Broader Airline Flight Price Comparison, parked until a reliable multi-airline source is available

### Changelog

- `0.1.0` - Initial Ryanair fare finder with city dropdowns, route discovery, flexible dates, monthly benchmarks, return trips, booking links, and no-results rows.

# Actor input Schema

## `originCity` (type: `string`):

Ryanair city to depart from. The dropdown is generated from currently active Ryanair airport cities (212 cities).

## `destinationCity` (type: `string`):

Ryanair destination city. The dropdown is generated from currently active Ryanair airport cities (212 cities). The actor checks whether a direct Ryanair route exists from the selected origin.

## `departureDate` (type: `string`):

Preferred outbound date in YYYY-MM-DD format. If the default date becomes past, the actor automatically uses a future test date.

## `returnDate` (type: `string`):

Optional return date in YYYY-MM-DD format. Leave blank for one-way fare results.

## `passengers` (type: `integer`):

Number of adult passengers used to calculate total fare from the per-passenger Ryanair fare shown in the calendar.

## `dateFlexibilityDays` (type: `integer`):

Number of days before and after the selected dates to compare. Larger windows can reveal cheaper nearby dates but produce more combinations.

## `currency` (type: `string`):

Currency code for returned Ryanair fares.

## `maxResults` (type: `integer`):

Maximum fare options to return after sorting by total price and date proximity.

## `datasetId` (type: `string`):

Optional Apify dataset ID to append the same results to, in addition to the default dataset.

## `runId` (type: `string`):

Optional workflow identifier copied into output rows when provided.

## Actor input object example

```json
{
  "originCity": "Lisbon, Portugal",
  "destinationCity": "London, United Kingdom",
  "departureDate": "2026-09-12",
  "returnDate": "",
  "passengers": 1,
  "dateFlexibilityDays": 1,
  "currency": "EUR",
  "maxResults": 2
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

## `summary` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("trovevault/ryanair-fare-finder").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {}

# Run the Actor and wait for it to finish
run = client.actor("trovevault/ryanair-fare-finder").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call trovevault/ryanair-fare-finder --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=trovevault/ryanair-fare-finder",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Ryanair Fare Finder",
        "description": "Find Ryanair fares by city, flexible dates, total price, route airports, booking link, and monthly fare deal signal.",
        "version": "0.1",
        "x-build-id": "mlecKvFjNDhPupCBD"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/trovevault~ryanair-fare-finder/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-trovevault-ryanair-fare-finder",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/trovevault~ryanair-fare-finder/runs": {
            "post": {
                "operationId": "runs-sync-trovevault-ryanair-fare-finder",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/trovevault~ryanair-fare-finder/run-sync": {
            "post": {
                "operationId": "run-sync-trovevault-ryanair-fare-finder",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "originCity",
                    "destinationCity",
                    "departureDate"
                ],
                "properties": {
                    "originCity": {
                        "title": "Origin City",
                        "enum": [
                            "Aarhus, Denmark",
                            "Aberdeen, United Kingdom",
                            "Agadir, Morocco",
                            "Alghero, Italy",
                            "Alicante, Spain",
                            "Almeria, Spain",
                            "Amman, Jordan",
                            "Amsterdam, Netherlands",
                            "Ancona, Italy",
                            "Athens, Greece",
                            "Banja Luka, Bosnia & Herzegovina",
                            "Barcelona, Spain",
                            "Bari, Italy",
                            "Basel, Switzerland",
                            "Belfast, United Kingdom",
                            "Beni Mellal, Morocco",
                            "Bergamo, Italy",
                            "Bergerac, France",
                            "Berlin, Germany",
                            "Beziers, France",
                            "Biarritz, France",
                            "Birmingham, United Kingdom",
                            "Bodrum, Turkey",
                            "Bologna, Italy",
                            "Bournemouth, United Kingdom",
                            "Bratislava, Slovakia",
                            "Bremen, Germany",
                            "Brindisi, Italy",
                            "Bristol, United Kingdom",
                            "Brive, France",
                            "Brno, Czech Republic",
                            "Brussels, Belgium",
                            "Bucharest, Romania",
                            "Budapest, Hungary",
                            "Burgas, Bulgaria",
                            "Bydgoszcz, Poland",
                            "Cagliari, Italy",
                            "Carcassonne, France",
                            "Cardiff, United Kingdom",
                            "Castellon, Spain",
                            "Catania, Italy",
                            "Chania, Greece",
                            "Charleroi, Belgium",
                            "Cluj, Romania",
                            "Cologne, Germany",
                            "Copenhagen, Denmark",
                            "Corfu, Greece",
                            "Cork, Ireland",
                            "Crotone, Italy",
                            "Cuneo, Italy",
                            "Dakhla, Morocco",
                            "Dalaman, Turkey",
                            "Derry, United Kingdom",
                            "Dole, France",
                            "Dublin, Ireland",
                            "Dubrovnik, Croatia",
                            "Dusseldorf, Germany",
                            "East Midlands, United Kingdom",
                            "Edinburgh, United Kingdom",
                            "Eindhoven, Netherlands",
                            "Errachidia, Morocco",
                            "Essaouira, Morocco",
                            "Exeter, United Kingdom",
                            "Faro, Portugal",
                            "Fez, Morocco",
                            "Figari, France",
                            "Frankfurt, Germany",
                            "Friedrichshafen, Germany",
                            "Fuerteventura, Spain",
                            "Funchal, Portugal",
                            "Gdansk, Poland",
                            "Genoa, Italy",
                            "Girona, Spain",
                            "Glasgow, United Kingdom",
                            "Gothenburg, Sweden",
                            "Gran Canaria, Spain",
                            "Grenoble, France",
                            "Hamburg, Germany",
                            "Helsinki, Finland",
                            "Heraklion, Greece",
                            "IASI, Romania",
                            "Ibiza, Spain",
                            "Kalamata, Greece",
                            "Karlsruhe, Germany",
                            "Katowice, Poland",
                            "Kaunas, Lithuania",
                            "Kefalonia, Greece",
                            "Kerry, Ireland",
                            "Klagenfurt, Austria",
                            "Knock, Ireland",
                            "Kos, Greece",
                            "Kosice, Slovakia",
                            "Krakow, Poland",
                            "La Rochelle, France",
                            "Lamezia, Italy",
                            "Lanzarote, Spain",
                            "Larnaca, Cyprus",
                            "Leeds, United Kingdom",
                            "Lemnos, Greece",
                            "Lille, France",
                            "Limoges, France",
                            "Linz, Austria",
                            "Lisbon, Portugal",
                            "Liverpool, United Kingdom",
                            "Lodz, Poland",
                            "London, United Kingdom",
                            "Lourdes, France",
                            "Lublin, Poland",
                            "Luxembourg, Luxembourg",
                            "Madrid, Spain",
                            "Malaga, Spain",
                            "Malmo, Sweden",
                            "Malta, Malta",
                            "Manchester, United Kingdom",
                            "Marrakesh, Morocco",
                            "Marseille, France",
                            "Memmingen, Germany",
                            "Menorca, Spain",
                            "Milan, Italy",
                            "Münster, Germany",
                            "Murcia, Spain",
                            "Mykonos, Greece",
                            "Nador, Morocco",
                            "Nantes, France",
                            "Naples, Italy",
                            "Newcastle, United Kingdom",
                            "Newquay, United Kingdom",
                            "Nice, France",
                            "Nimes, France",
                            "Nis, Serbia",
                            "Norwich, United Kingdom",
                            "Nuremberg, Germany",
                            "Olbia, Italy",
                            "Olsztyn, Poland",
                            "Osijek, Croatia",
                            "Oslo, Norway",
                            "Ostrava, Czech Republic",
                            "Ouarzazate, Morocco",
                            "Oujda, Morocco",
                            "Paderborn, Germany",
                            "Palanga, Lithuania",
                            "Palermo, Italy",
                            "Palma, Spain",
                            "Paphos, Cyprus",
                            "Pardubice, Czech Republic",
                            "Paris, France",
                            "Parma, Italy",
                            "Perpignan, France",
                            "Perugia, Italy",
                            "Pescara, Italy",
                            "Pisa, Italy",
                            "Plovdiv, Bulgaria",
                            "Podgorica, Montenegro",
                            "Poitiers, France",
                            "Porto, Portugal",
                            "Poznan, Poland",
                            "Prague, Czech Republic",
                            "Preveza, Greece",
                            "Pula, Croatia",
                            "Rabat, Morocco",
                            "Reggio Calabria, Italy",
                            "Reus, Spain",
                            "Rhodes, Greece",
                            "Riga, Latvia",
                            "Rijeka, Croatia",
                            "Rimini, Italy",
                            "Rodez, France",
                            "Rome, Italy",
                            "Rovaniemi, Finland",
                            "Rzeszow, Poland",
                            "Saarbrücken, Germany",
                            "Salerno , Italy",
                            "Salzburg, Austria",
                            "Sandefjord, Norway",
                            "Santander, Spain",
                            "Santiago, Spain",
                            "Santorini, Greece",
                            "Sarajevo, Bosnia & Herzegovina",
                            "Seville, Spain",
                            "Shannon, Ireland",
                            "Skelleftea, Sweden",
                            "Skiathos, Greece",
                            "Sofia, Bulgaria",
                            "Split, Croatia",
                            "Stockholm, Sweden",
                            "Szczecin, Poland",
                            "Tallinn, Estonia",
                            "Tangier, Morocco",
                            "Tenerife, Spain",
                            "Tétouan, Morocco",
                            "Thessaloniki, Greece",
                            "Tirana, Albania",
                            "Toulouse, France",
                            "Tours, France",
                            "Trapani, Italy",
                            "Trieste, Italy",
                            "Turin, Italy",
                            "Valencia, Spain",
                            "Varna, Bulgaria",
                            "Växjö, Sweden",
                            "Venice, Italy",
                            "Verona, Italy",
                            "Vienna, Austria",
                            "Vilnius, Lithuania",
                            "Vitoria-Gasteiz, Spain",
                            "Volos, Greece",
                            "Warsaw, Poland",
                            "Wroclaw, Poland",
                            "Zadar, Croatia",
                            "Zagreb, Croatia",
                            "Zakynthos, Greece",
                            "Zaragoza, Spain"
                        ],
                        "type": "string",
                        "description": "Ryanair city to depart from. The dropdown is generated from currently active Ryanair airport cities (212 cities).",
                        "default": "Lisbon, Portugal"
                    },
                    "destinationCity": {
                        "title": "Destination City",
                        "enum": [
                            "Aarhus, Denmark",
                            "Aberdeen, United Kingdom",
                            "Agadir, Morocco",
                            "Alghero, Italy",
                            "Alicante, Spain",
                            "Almeria, Spain",
                            "Amman, Jordan",
                            "Amsterdam, Netherlands",
                            "Ancona, Italy",
                            "Athens, Greece",
                            "Banja Luka, Bosnia & Herzegovina",
                            "Barcelona, Spain",
                            "Bari, Italy",
                            "Basel, Switzerland",
                            "Belfast, United Kingdom",
                            "Beni Mellal, Morocco",
                            "Bergamo, Italy",
                            "Bergerac, France",
                            "Berlin, Germany",
                            "Beziers, France",
                            "Biarritz, France",
                            "Birmingham, United Kingdom",
                            "Bodrum, Turkey",
                            "Bologna, Italy",
                            "Bournemouth, United Kingdom",
                            "Bratislava, Slovakia",
                            "Bremen, Germany",
                            "Brindisi, Italy",
                            "Bristol, United Kingdom",
                            "Brive, France",
                            "Brno, Czech Republic",
                            "Brussels, Belgium",
                            "Bucharest, Romania",
                            "Budapest, Hungary",
                            "Burgas, Bulgaria",
                            "Bydgoszcz, Poland",
                            "Cagliari, Italy",
                            "Carcassonne, France",
                            "Cardiff, United Kingdom",
                            "Castellon, Spain",
                            "Catania, Italy",
                            "Chania, Greece",
                            "Charleroi, Belgium",
                            "Cluj, Romania",
                            "Cologne, Germany",
                            "Copenhagen, Denmark",
                            "Corfu, Greece",
                            "Cork, Ireland",
                            "Crotone, Italy",
                            "Cuneo, Italy",
                            "Dakhla, Morocco",
                            "Dalaman, Turkey",
                            "Derry, United Kingdom",
                            "Dole, France",
                            "Dublin, Ireland",
                            "Dubrovnik, Croatia",
                            "Dusseldorf, Germany",
                            "East Midlands, United Kingdom",
                            "Edinburgh, United Kingdom",
                            "Eindhoven, Netherlands",
                            "Errachidia, Morocco",
                            "Essaouira, Morocco",
                            "Exeter, United Kingdom",
                            "Faro, Portugal",
                            "Fez, Morocco",
                            "Figari, France",
                            "Frankfurt, Germany",
                            "Friedrichshafen, Germany",
                            "Fuerteventura, Spain",
                            "Funchal, Portugal",
                            "Gdansk, Poland",
                            "Genoa, Italy",
                            "Girona, Spain",
                            "Glasgow, United Kingdom",
                            "Gothenburg, Sweden",
                            "Gran Canaria, Spain",
                            "Grenoble, France",
                            "Hamburg, Germany",
                            "Helsinki, Finland",
                            "Heraklion, Greece",
                            "IASI, Romania",
                            "Ibiza, Spain",
                            "Kalamata, Greece",
                            "Karlsruhe, Germany",
                            "Katowice, Poland",
                            "Kaunas, Lithuania",
                            "Kefalonia, Greece",
                            "Kerry, Ireland",
                            "Klagenfurt, Austria",
                            "Knock, Ireland",
                            "Kos, Greece",
                            "Kosice, Slovakia",
                            "Krakow, Poland",
                            "La Rochelle, France",
                            "Lamezia, Italy",
                            "Lanzarote, Spain",
                            "Larnaca, Cyprus",
                            "Leeds, United Kingdom",
                            "Lemnos, Greece",
                            "Lille, France",
                            "Limoges, France",
                            "Linz, Austria",
                            "Lisbon, Portugal",
                            "Liverpool, United Kingdom",
                            "Lodz, Poland",
                            "London, United Kingdom",
                            "Lourdes, France",
                            "Lublin, Poland",
                            "Luxembourg, Luxembourg",
                            "Madrid, Spain",
                            "Malaga, Spain",
                            "Malmo, Sweden",
                            "Malta, Malta",
                            "Manchester, United Kingdom",
                            "Marrakesh, Morocco",
                            "Marseille, France",
                            "Memmingen, Germany",
                            "Menorca, Spain",
                            "Milan, Italy",
                            "Münster, Germany",
                            "Murcia, Spain",
                            "Mykonos, Greece",
                            "Nador, Morocco",
                            "Nantes, France",
                            "Naples, Italy",
                            "Newcastle, United Kingdom",
                            "Newquay, United Kingdom",
                            "Nice, France",
                            "Nimes, France",
                            "Nis, Serbia",
                            "Norwich, United Kingdom",
                            "Nuremberg, Germany",
                            "Olbia, Italy",
                            "Olsztyn, Poland",
                            "Osijek, Croatia",
                            "Oslo, Norway",
                            "Ostrava, Czech Republic",
                            "Ouarzazate, Morocco",
                            "Oujda, Morocco",
                            "Paderborn, Germany",
                            "Palanga, Lithuania",
                            "Palermo, Italy",
                            "Palma, Spain",
                            "Paphos, Cyprus",
                            "Pardubice, Czech Republic",
                            "Paris, France",
                            "Parma, Italy",
                            "Perpignan, France",
                            "Perugia, Italy",
                            "Pescara, Italy",
                            "Pisa, Italy",
                            "Plovdiv, Bulgaria",
                            "Podgorica, Montenegro",
                            "Poitiers, France",
                            "Porto, Portugal",
                            "Poznan, Poland",
                            "Prague, Czech Republic",
                            "Preveza, Greece",
                            "Pula, Croatia",
                            "Rabat, Morocco",
                            "Reggio Calabria, Italy",
                            "Reus, Spain",
                            "Rhodes, Greece",
                            "Riga, Latvia",
                            "Rijeka, Croatia",
                            "Rimini, Italy",
                            "Rodez, France",
                            "Rome, Italy",
                            "Rovaniemi, Finland",
                            "Rzeszow, Poland",
                            "Saarbrücken, Germany",
                            "Salerno , Italy",
                            "Salzburg, Austria",
                            "Sandefjord, Norway",
                            "Santander, Spain",
                            "Santiago, Spain",
                            "Santorini, Greece",
                            "Sarajevo, Bosnia & Herzegovina",
                            "Seville, Spain",
                            "Shannon, Ireland",
                            "Skelleftea, Sweden",
                            "Skiathos, Greece",
                            "Sofia, Bulgaria",
                            "Split, Croatia",
                            "Stockholm, Sweden",
                            "Szczecin, Poland",
                            "Tallinn, Estonia",
                            "Tangier, Morocco",
                            "Tenerife, Spain",
                            "Tétouan, Morocco",
                            "Thessaloniki, Greece",
                            "Tirana, Albania",
                            "Toulouse, France",
                            "Tours, France",
                            "Trapani, Italy",
                            "Trieste, Italy",
                            "Turin, Italy",
                            "Valencia, Spain",
                            "Varna, Bulgaria",
                            "Växjö, Sweden",
                            "Venice, Italy",
                            "Verona, Italy",
                            "Vienna, Austria",
                            "Vilnius, Lithuania",
                            "Vitoria-Gasteiz, Spain",
                            "Volos, Greece",
                            "Warsaw, Poland",
                            "Wroclaw, Poland",
                            "Zadar, Croatia",
                            "Zagreb, Croatia",
                            "Zakynthos, Greece",
                            "Zaragoza, Spain"
                        ],
                        "type": "string",
                        "description": "Ryanair destination city. The dropdown is generated from currently active Ryanair airport cities (212 cities). The actor checks whether a direct Ryanair route exists from the selected origin.",
                        "default": "London, United Kingdom"
                    },
                    "departureDate": {
                        "title": "Departure Date",
                        "type": "string",
                        "description": "Preferred outbound date in YYYY-MM-DD format. If the default date becomes past, the actor automatically uses a future test date.",
                        "default": "2026-09-12"
                    },
                    "returnDate": {
                        "title": "Return Date (optional)",
                        "type": "string",
                        "description": "Optional return date in YYYY-MM-DD format. Leave blank for one-way fare results.",
                        "default": ""
                    },
                    "passengers": {
                        "title": "Passengers",
                        "minimum": 1,
                        "maximum": 9,
                        "type": "integer",
                        "description": "Number of adult passengers used to calculate total fare from the per-passenger Ryanair fare shown in the calendar.",
                        "default": 1
                    },
                    "dateFlexibilityDays": {
                        "title": "Date Flexibility",
                        "minimum": 0,
                        "maximum": 15,
                        "type": "integer",
                        "description": "Number of days before and after the selected dates to compare. Larger windows can reveal cheaper nearby dates but produce more combinations.",
                        "default": 1
                    },
                    "currency": {
                        "title": "Currency",
                        "enum": [
                            "EUR",
                            "GBP",
                            "USD",
                            "PLN",
                            "CZK",
                            "HUF",
                            "SEK",
                            "DKK",
                            "NOK",
                            "CHF"
                        ],
                        "type": "string",
                        "description": "Currency code for returned Ryanair fares.",
                        "default": "EUR"
                    },
                    "maxResults": {
                        "title": "Max Results",
                        "minimum": 1,
                        "maximum": 50,
                        "type": "integer",
                        "description": "Maximum fare options to return after sorting by total price and date proximity.",
                        "default": 2
                    },
                    "datasetId": {
                        "title": "Dataset ID (optional)",
                        "type": "string",
                        "description": "Optional Apify dataset ID to append the same results to, in addition to the default dataset."
                    },
                    "runId": {
                        "title": "Run ID (optional)",
                        "type": "string",
                        "description": "Optional workflow identifier copied into output rows when provided."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
