{
  "openapi": "3.0.1",
  "info": {
    "title": "Ryanair Scraper [Only $1.5] Flight Fares & Cheapest Routes",
    "description": "[Only $1.5] Scrape Ryanair fares — cheapest one-way and round-trip prices by route and flexible date window, plus an explore mode that finds the cheapest fare to every destination from an origin. Returns price, flight number, schedule, duration, airports and booking links. Open data, no proxy",
    "version": "0.0",
    "x-build-id": "8EW66RW1EDHXfAluF"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/memo23~ryanair-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-memo23-ryanair-scraper",
        "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/memo23~ryanair-scraper/runs": {
      "post": {
        "operationId": "runs-sync-memo23-ryanair-scraper",
        "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/memo23~ryanair-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-memo23-ryanair-scraper",
        "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": [
          "origin"
        ],
        "properties": {
          "origin": {
            "title": "Origin airport(s)",
            "type": "string",
            "description": "Origin airport IATA code. Comma-separate for several origins (e.g. `DUB,STN`)."
          },
          "destination": {
            "title": "Destination airport(s)",
            "type": "string",
            "description": "Destination airport IATA code(s), comma-separated. **Leave empty for Explore mode** — the cheapest one-way fare to every destination from the origin."
          },
          "tripType": {
            "title": "Trip type",
            "enum": [
              "oneWay",
              "roundTrip"
            ],
            "type": "string",
            "description": "`oneWay` (default) or `roundTrip`. Round-trip combines the cheapest outbound + inbound fares and needs a destination + return date window.",
            "default": "oneWay"
          },
          "departDateFrom": {
            "title": "Outbound date from",
            "type": "string",
            "description": "Earliest outbound date (YYYY-MM-DD). Defaults to today."
          },
          "departDateTo": {
            "title": "Outbound date to",
            "type": "string",
            "description": "Latest outbound date (YYYY-MM-DD). Defaults to 7 days after the start."
          },
          "returnDateFrom": {
            "title": "Return date from (round-trip)",
            "type": "string",
            "description": "Earliest inbound date (YYYY-MM-DD). Required for round-trip."
          },
          "returnDateTo": {
            "title": "Return date to (round-trip)",
            "type": "string",
            "description": "Latest inbound date (YYYY-MM-DD)."
          },
          "currency": {
            "title": "Currency",
            "type": "string",
            "description": "Currency code for prices, e.g. `EUR`, `USD`, `GBP`.",
            "default": "EUR"
          },
          "market": {
            "title": "Market / locale",
            "type": "string",
            "description": "Ryanair market the fares are priced for, e.g. `en-gb`, `en-ie`, `es-es`, `de-de`.",
            "default": "en-gb"
          },
          "maxPrice": {
            "title": "Max price",
            "type": "integer",
            "description": "Keep only fares at or below this price (in the chosen currency). Leave empty for no limit."
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "sourceOrder",
              "cheapest",
              "earliestDeparture",
              "shortestDuration"
            ],
            "type": "string",
            "description": "Order the saved fares.",
            "default": "sourceOrder"
          },
          "includeUnavailable": {
            "title": "Include sold-out / unavailable dates",
            "type": "boolean",
            "description": "Also emit a row (with `price: null`, `available: false`) for dates that have no Ryanair fare — useful for a complete date calendar.",
            "default": false
          },
          "adults": {
            "title": "Adults",
            "minimum": 1,
            "type": "integer",
            "description": "Number of adults (used for the booking deep-link).",
            "default": 1
          },
          "teens": {
            "title": "Teens",
            "minimum": 0,
            "type": "integer",
            "description": "Number of teens (12–15).",
            "default": 0
          },
          "children": {
            "title": "Children",
            "minimum": 0,
            "type": "integer",
            "description": "Number of children (2–11).",
            "default": 0
          },
          "infants": {
            "title": "Infants",
            "minimum": 0,
            "type": "integer",
            "description": "Number of infants (under 2).",
            "default": 0
          },
          "maxResults": {
            "title": "Maximum fares",
            "minimum": 1,
            "type": "integer",
            "description": "Hard cap on the total number of fare rows returned.",
            "default": 1000
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Optional. Ryanair's fares API is open, so a proxy isn't required — but for very large multi-route or wide-window runs you can route requests through a proxy to avoid IP rate-limits. Paying users are automatically routed through premium rotating residential proxies.",
            "default": {
              "useApifyProxy": true
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}