{
  "openapi": "3.0.1",
  "info": {
    "title": "Skyscanner Route Intelligence Scraper",
    "description": "Profile any flight route from Skyscanner: the airlines flying it non-stop, flights per week, typical flight time, cheapest month, a twelve-month price curve, and what the same trip costs from nearby airports. One row per route per market, with several countries compared in one run.",
    "version": "0.0",
    "x-build-id": "LRsUpnJhCsiwHnSPw"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/apt_marble~skyscanner-route-intelligence-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-apt_marble-skyscanner-route-intelligence-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/apt_marble~skyscanner-route-intelligence-scraper/runs": {
      "post": {
        "operationId": "runs-sync-apt_marble-skyscanner-route-intelligence-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/apt_marble~skyscanner-route-intelligence-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-apt_marble-skyscanner-route-intelligence-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": {
          "routes": {
            "title": "Routes",
            "type": "array",
            "description": "The city pairs to profile, one per line. Write them as two place codes — a city code such as LON, NYC or PAR, or an airport code such as LHR, JFK or CDG. \"LON-NYC\", \"LHR > JFK\" and \"CDG to BCN\" are all accepted. You can also paste a Skyscanner route page address: the two places are taken from it and the route is then collected for the market you choose below, which may be a different country from the address you pasted. Pick that country as the market, or add it to the comparison markets, to collect the one you pasted.",
            "default": [
              "LON-NYC"
            ],
            "items": {
              "type": "string"
            }
          },
          "market": {
            "title": "Market",
            "enum": [
              "GB",
              "US",
              "DE",
              "FR",
              "ES",
              "IT",
              "NL",
              "PL",
              "CA",
              "AU",
              "IN"
            ],
            "type": "string",
            "description": "The country you are selling into. Skyscanner runs a separate storefront per country, and they are genuinely different: the same route can be cheapest in November for one country and in September for another, priced in that country's own currency, and some storefronts price a one-way trip where others price the return — every result says which in \"priceTripType\", so compare that before comparing prices. Every result is also labelled with the market and currency it was actually served in. Two figures — \"bookAheadDays\" and \"airportsServingDestination\" — exist only inside the route's written answers and are read in English only, so they are empty on every route on a storefront that answers in another language: Germany, France, Spain, Italy, the Netherlands and Poland always, and any other storefront on a run where it answers for a different country. Each result says which happened in \"writtenAnswerFiguresAvailable\".",
            "default": "GB"
          },
          "compareMarkets": {
            "title": "Also collect these markets",
            "type": "array",
            "description": "Collect the same routes for extra countries as well, so you can compare what a route costs and when it is cheapest in each one. You get one result per route per market. Leave empty to collect only the market above. Up to 6 extra markets.",
            "items": {
              "type": "string",
              "enum": [
                "GB",
                "US",
                "DE",
                "FR",
                "ES",
                "IT",
                "NL",
                "PL",
                "CA",
                "AU",
                "IN"
              ],
              "enumTitles": [
                "United Kingdom (GBP)",
                "United States (USD)",
                "Germany (EUR)",
                "France (EUR)",
                "Spain (EUR)",
                "Italy (EUR)",
                "Netherlands (EUR)",
                "Poland (PLN)",
                "Canada (CAD)",
                "Australia (AUD)",
                "India (INR)"
              ]
            },
            "default": []
          },
          "findRoutesForMe": {
            "title": "Find routes for me",
            "type": "boolean",
            "description": "Instead of listing every route yourself, let the actor work through the routes Skyscanner publishes for the chosen market, in the order it publishes them, until the route limit is reached. Combine this with the two filters below to sweep everything out of, or everything into, the airports you care about.",
            "default": false
          },
          "seedOrigins": {
            "title": "Only routes departing from",
            "type": "array",
            "description": "Used only when \"Find routes for me\" is on. Keep only discovered routes that leave from these places, for example LHR, LGW, STN. Leave empty for any departure point.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "seedDestinations": {
            "title": "Only routes arriving at",
            "type": "array",
            "description": "Used only when \"Find routes for me\" is on. Keep only discovered routes that arrive at these places, for example JFK, EWR. Leave empty for any destination.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "maxRoutes": {
            "title": "Maximum routes",
            "minimum": 1,
            "maximum": 2000,
            "type": "integer",
            "description": "The most routes to profile in one run, counting both the routes you listed and any the actor found for you. Each route produces one result per market.",
            "default": 25
          },
          "includeNearbyAirports": {
            "title": "Compare nearby airports",
            "type": "boolean",
            "description": "Add the alternative-airport comparison to every result: the other airports serving the destination, how far each one is from the city, the cheapest airline into it and what that costs. This is the part that tells you whether the traffic on a route is really going somewhere else. Charged separately — see pricing.",
            "default": true
          },
          "includeMonthlyPrices": {
            "title": "Include the twelve-month price curve",
            "type": "boolean",
            "description": "Add the month-by-month cheapest price for the year ahead, so you can see the seasonal shape of the route rather than a single headline number.",
            "default": true
          },
          "includeDeals": {
            "title": "Include priced examples",
            "type": "boolean",
            "description": "Add the sample dated fares the route page publishes — date, airline, airports and price — each with a direct link to the trip. Some country storefronts price these one way and others price the return trip; every example says which in its own \"tripType\", and the result says which its headline figures are in \"priceTripType\".",
            "default": true
          },
          "includeFaqs": {
            "title": "Include the published route questions",
            "type": "boolean",
            "description": "Add the questions and answers Skyscanner publishes for the route, such as how many airports serve the destination and how far ahead to book. Useful as ready-made copy for travel content.",
            "default": true
          },
          "minFlightsPerWeek": {
            "title": "Minimum flights per week",
            "minimum": 0,
            "maximum": 200000,
            "type": "integer",
            "description": "Keep only routes with at least this many flights a week, so a large sweep returns real trunk routes rather than thin ones. A route where this figure is not published is left out when this filter is set. Leave at 0 to keep every route.",
            "default": 0
          },
          "minDirectAirlines": {
            "title": "Minimum direct airlines",
            "minimum": 0,
            "maximum": 200,
            "type": "integer",
            "description": "Keep only routes flown non-stop by at least this many airlines. Useful for finding competitive routes, or — set to 1 — for excluding connection-only city pairs. Leave at 0 to keep every route.",
            "default": 0
          },
          "onlyRoutesWithAPrice": {
            "title": "Only routes with a published price",
            "type": "boolean",
            "description": "Leave out routes where no headline price is published. Turn this on when you are building a pricing model and a route without a price is noise.",
            "default": false
          },
          "onlyRequestedMarket": {
            "title": "Only results served in the market I chose",
            "type": "boolean",
            "description": "A few country storefronts answer with the market of wherever the run happens to read from rather than their own. Turn this on to discard those results instead of keeping them labelled with the market that was actually served.",
            "default": false
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}