{
  "openapi": "3.0.1",
  "info": {
    "title": "Skyscanner Flight Scraper",
    "description": "Scrape Skyscanner flights with prices, airlines, segments, baggage, CO2, and per-agent booking links. MCP-ready.",
    "version": "0.1",
    "x-build-id": "yKm8KyLpzjt1fxQT7"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/khadinakbar~skyscanner-flight-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-khadinakbar-skyscanner-flight-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/khadinakbar~skyscanner-flight-scraper/runs": {
      "post": {
        "operationId": "runs-sync-khadinakbar-skyscanner-flight-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/khadinakbar~skyscanner-flight-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-khadinakbar-skyscanner-flight-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",
        "properties": {
          "departureAirport": {
            "title": "Departure airport or city",
            "type": "string",
            "description": "Where the trip starts, as a city name or 3-letter IATA code (e.g. 'Los Angeles' or 'LAX'). The scraper resolves it to a Skyscanner place via autosuggest, so codes are most precise. Used only in filter mode and ignored when a Skyscanner flights URL is supplied in Start URLs. This is the origin, NOT the destination."
          },
          "arrivalAirport": {
            "title": "Arrival airport or city",
            "type": "string",
            "description": "Where the trip ends, as a city name or 3-letter IATA code (e.g. 'Tokyo' or 'NRT'). Resolved the same way as the departure. Required together with departureAirport and departureDate in filter mode; ignored when a flights URL is used. This is the destination, NOT the origin."
          },
          "departureDate": {
            "title": "Departure date",
            "type": "string",
            "description": "Outbound flight date in YYYY-MM-DD format (e.g. '2026-06-15'). Must be today or later — Skyscanner returns no fares for past dates. Required in filter mode. This is the leave date, not the return date."
          },
          "returnDate": {
            "title": "Return date (optional)",
            "type": "string",
            "description": "Inbound flight date in YYYY-MM-DD format for a round trip. Leave empty for a one-way search. Must be on or after the departure date. When set, results include both outbound and inbound legs."
          },
          "startUrls": {
            "title": "Skyscanner flights URLs (alternative to filters)",
            "type": "array",
            "description": "Optional list of full Skyscanner flights URLs like 'https://www.skyscanner.net/transport/flights/lax/nrt/260615/260622/'. Route and dates are read from each URL, overriding the filter fields for that search. Use this to replay an exact search you ran in the browser. Leave empty to use the departure/arrival/date filters instead.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "cabinClass": {
            "title": "Cabin class",
            "enum": [
              "economy",
              "premium_economy",
              "business",
              "first"
            ],
            "type": "string",
            "description": "Travel class applied to every search in this run. One of economy, premium_economy, business, or first. Defaults to economy. Affects which fares Skyscanner returns, not the route.",
            "default": "economy"
          },
          "adults": {
            "title": "Adults",
            "minimum": 1,
            "maximum": 9,
            "type": "integer",
            "description": "Number of adult passengers aged 16+. Minimum 1, maximum 9. Defaults to 1. Prices returned are the total for all passengers as Skyscanner reports them.",
            "default": 1
          },
          "children": {
            "title": "Children",
            "minimum": 0,
            "maximum": 8,
            "type": "integer",
            "description": "Number of child passengers (roughly ages 2-15). Defaults to 0, maximum 8. Combined with adults and infants to size the search. Not the same as infants, who travel on a lap.",
            "default": 0
          },
          "infants": {
            "title": "Infants (on lap)",
            "minimum": 0,
            "maximum": 8,
            "type": "integer",
            "description": "Number of lap infants under ~2 years with no seat of their own. Defaults to 0, maximum 8. Some carriers limit infants per adult. Distinct from children, who occupy a seat.",
            "default": 0
          },
          "market": {
            "title": "Market / country",
            "type": "string",
            "description": "Skyscanner market as a 2-letter ISO country code (e.g. 'US', 'GB', 'DE'). Controls regional pricing, available agents, and deep-link booking sites. Defaults to US. Use the buyer's country for the most relevant fares.",
            "default": "US"
          },
          "currency": {
            "title": "Currency",
            "type": "string",
            "description": "ISO 4217 currency code for prices (e.g. 'USD', 'EUR', 'GBP'). Defaults to USD. All price fields in the output are expressed in this currency. Does not change which flights are returned.",
            "default": "USD"
          },
          "locale": {
            "title": "Locale (language)",
            "type": "string",
            "description": "BCP-47 language tag for localized place and carrier names (e.g. 'en-US', 'de-DE'). Defaults to en-US. Affects text labels only, not prices or routes. Leave default for English output.",
            "default": "en-US"
          },
          "resultSort": {
            "title": "Sort results",
            "enum": [
              "best",
              "cheapest",
              "fastest",
              "shortest"
            ],
            "type": "string",
            "description": "Order itineraries are delivered and capped by maxResults. 'best' uses Skyscanner's blended score, 'cheapest' by price, 'fastest'/'shortest' by total duration. Defaults to best. Sorting is applied after results are fetched.",
            "default": "best"
          },
          "maxResults": {
            "title": "Max flights to return",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Hard cap on itineraries delivered (and billed) per run, across all searches. Defaults to 100, maximum 5000. Lower it to control cost; you are charged per delivered flight. This caps output, not how many Skyscanner finds internally.",
            "default": 100
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Proxy used to reach Skyscanner. Residential proxies are strongly recommended and on by default — Skyscanner uses PerimeterX anti-bot, and datacenter IPs are blocked. Leave the default unless you have a specific residential provider configured on Apify.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ]
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}