{
  "openapi": "3.0.1",
  "info": {
    "title": "Skyscanner Flight Price Calendar Scraper",
    "description": "A full year of daily flight prices for any route. Find the cheapest date and the cheapest month, see how prices move across the calendar, and compare the same route across 52 country storefronts where fares genuinely differ. No account or login needed.",
    "version": "0.0",
    "x-build-id": "c1jJ63ErkO4FXUCPS"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/apt_marble~skyscanner-flight-price-calendar-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-apt_marble-skyscanner-flight-price-calendar-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-flight-price-calendar-scraper/runs": {
      "post": {
        "operationId": "runs-sync-apt_marble-skyscanner-flight-price-calendar-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-flight-price-calendar-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-apt_marble-skyscanner-flight-price-calendar-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",
          "destination"
        ],
        "properties": {
          "origin": {
            "title": "Departure place",
            "type": "string",
            "description": "Where the trip starts. Use an airport code (LHR), a city code (LON, NYC) or just the place name (London). Codes are used exactly as you type them; names are matched for you."
          },
          "destination": {
            "title": "Arrival place",
            "type": "string",
            "description": "Where the trip ends. Use an airport code (JFK), a city code (NYC) or the place name (New York)."
          },
          "additionalRoutes": {
            "title": "More routes (optional)",
            "maxItems": 20,
            "type": "array",
            "description": "Extra routes to collect in the same run, one per line, written as \"LHR-JFK\" or \"London > New York\". Each route is collected in every market you selected. Up to 20.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "placeMatching": {
            "title": "Match names to",
            "enum": [
              "city",
              "airport"
            ],
            "type": "string",
            "description": "How a place NAME is matched. \"Whole city\" covers every airport serving that city, which is what most travellers compare. \"Single airport\" picks one airport instead. Codes you type yourself are always used as given.",
            "default": "city"
          },
          "market": {
            "title": "Market",
            "enum": [
              "US",
              "UK",
              "IE",
              "CA",
              "AU",
              "NZ",
              "IN",
              "SG",
              "DE",
              "FR",
              "ES",
              "IT",
              "NL",
              "PL",
              "JP",
              "KR",
              "AE",
              "SA",
              "QA",
              "KW",
              "IL",
              "TR",
              "BR",
              "MX",
              "AR",
              "CL",
              "CO",
              "ZA",
              "NG",
              "EG",
              "MA",
              "HK",
              "TW",
              "CN",
              "MY",
              "TH",
              "PH",
              "ID",
              "VN",
              "PK",
              "SE",
              "NO",
              "DK",
              "FI",
              "CH",
              "AT",
              "BE",
              "PT",
              "GR",
              "CZ",
              "HU",
              "RO"
            ],
            "type": "string",
            "description": "The country storefront to price the route in. This chooses which fares you see, not just the currency — the same route can have a different cheapest date in different markets.",
            "default": "US"
          },
          "currency": {
            "title": "Currency",
            "enum": [
              "auto",
              "USD",
              "GBP",
              "EUR",
              "CAD",
              "AUD",
              "NZD",
              "INR",
              "SGD",
              "JPY",
              "KRW",
              "CNY",
              "HKD",
              "TWD",
              "MYR",
              "THB",
              "PHP",
              "IDR",
              "VND",
              "PKR",
              "AED",
              "SAR",
              "QAR",
              "KWD",
              "ILS",
              "TRY",
              "BRL",
              "MXN",
              "ARS",
              "CLP",
              "COP",
              "ZAR",
              "NGN",
              "EGP",
              "MAD",
              "SEK",
              "NOK",
              "DKK",
              "CHF",
              "PLN",
              "CZK",
              "HUF",
              "RON"
            ],
            "type": "string",
            "description": "The currency prices are shown in. Leave it on \"Match the market\" and each market is priced the way travellers there see it; pick a single currency only when you need every market in one unit. Whatever you pick, every result is labelled with the currency that actually came back.",
            "default": "auto"
          },
          "locale": {
            "title": "Language",
            "enum": [
              "auto",
              "en-US",
              "en-GB",
              "en-CA",
              "en-AU",
              "de-DE",
              "de-AT",
              "de-CH",
              "fr-FR",
              "es-ES",
              "es-MX",
              "es-AR",
              "es-CL",
              "es-CO",
              "it-IT",
              "nl-NL",
              "nl-BE",
              "pt-PT",
              "pt-BR",
              "pl-PL",
              "sv-SE",
              "nb-NO",
              "da-DK",
              "fi-FI",
              "cs-CZ",
              "hu-HU",
              "ro-RO",
              "el-GR",
              "tr-TR",
              "ja-JP",
              "ko-KR",
              "zh-CN",
              "zh-TW",
              "id-ID"
            ],
            "type": "string",
            "description": "The language the market is browsed in. It does not change the prices; it is recorded on every result so you can tell runs apart.",
            "default": "auto"
          },
          "compareMarkets": {
            "title": "Compare other markets (optional)",
            "maxItems": 7,
            "type": "array",
            "description": "Collect the same route from other country storefronts as well, one per line. Write just the country (\"UK\") to use its own currency, or \"UK:USD\" to price it in a currency you choose. Markets are separate sets of fares, so the cheapest date can genuinely differ between them. Up to 7.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "startDate": {
            "title": "Earliest departure date (optional)",
            "type": "string",
            "description": "Only keep dates on or after this day, written as YYYY-MM-DD. Leave empty to start from the first date the source publishes."
          },
          "endDate": {
            "title": "Latest departure date (optional)",
            "type": "string",
            "description": "Only keep dates on or before this day, written as YYYY-MM-DD. Leave empty to run to the end of the published year."
          },
          "maxDaysPerMarket": {
            "title": "Maximum dates per route and market",
            "minimum": 1,
            "maximum": 400,
            "type": "integer",
            "description": "Caps how many departure dates are kept for each route in each market, counting from the earliest. The source publishes about 360 dates; lower it to keep runs small.",
            "default": 400
          },
          "onlyCheapestPerMonth": {
            "title": "Only the cheapest date in each month",
            "type": "boolean",
            "description": "Turn this on for a compact seasonality view: about a dozen results per route and market instead of a full year of days.",
            "default": false
          },
          "includeUnpricedDays": {
            "title": "Include dates with no published price",
            "type": "boolean",
            "description": "Keep dates the source published no price for, with an empty price. Useful when you want to see gaps in a thin route rather than a shorter list. These blank dates are delivered as results and are billed the same as priced ones, so a thin route can cost several times more with this on. Prices are never estimated or carried over from another date.",
            "default": false
          },
          "includeSeasonality": {
            "title": "Add seasonality columns",
            "type": "boolean",
            "description": "Adds the cheapest and typical price for each month, how far above the cheapest date each date sits, and a cheapest-to-priciest ranking.",
            "default": 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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}