{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Flights Scraper API - Date Range & Price Drop Monitor",
    "description": "For fare alerts and airfare dashboards: Google Flights prices for one route across up to 31 departure dates in one run, every flight with price, airline, times, stops and CO2. 5-7 dates took 6.8-9.8 s (2026-09-24). Monitor returns only new flights and price changes. Unreadable dates are free.",
    "version": "0.1",
    "x-build-id": "TiyQ8kJCzl32OfyPO"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/neverempty~google-flights-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-neverempty-google-flights-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/neverempty~google-flights-scraper/runs": {
      "post": {
        "operationId": "runs-sync-neverempty-google-flights-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/neverempty~google-flights-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-neverempty-google-flights-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": {
          "origin": {
            "title": "From (airport code)",
            "type": "string",
            "description": "IATA airport code of the departure airport, for example JFK. Several airports separated by commas search them together, like Google Flights does (JFK, EWR, LGA). Leave both From and To empty to run the example route JFK to LAX."
          },
          "destination": {
            "title": "To (airport code)",
            "type": "string",
            "description": "IATA airport code of the arrival airport, for example LAX. Several airports separated by commas are searched together (LAX, BUR, SNA)."
          },
          "departureDate": {
            "title": "Departure date",
            "type": "string",
            "description": "First departure date to search: YYYY-MM-DD (for example 2026-11-12), or +N for N days from today in UTC (+30 = 30 days from today, so a schedule never runs out of dates). Empty = +30. Google Flights sells up to about 330 days ahead."
          },
          "departureDateTo": {
            "title": "Last departure date (date range)",
            "type": "string",
            "description": "Optional. Search every departure date from Departure date to this date, one Google Flights search per date (up to 31 dates in one run). YYYY-MM-DD or +N days from today. Empty = only the Departure date."
          },
          "returnDate": {
            "title": "Return date (round trip)",
            "type": "string",
            "description": "Optional. Makes the search a round trip: rows are the outbound flights with the round-trip total price, as Google Flights shows them before you pick a return flight (return flights are not listed). With a date range, the length of stay is kept: a trip departing one day later returns one day later. YYYY-MM-DD or +N days from today. Empty = one way."
          },
          "adults": {
            "title": "Adults",
            "minimum": 1,
            "maximum": 9,
            "type": "integer",
            "description": "Number of adult travelers (1 to 9). The price is the total for all travelers, as Google Flights shows it. Empty = 1."
          },
          "children": {
            "title": "Children",
            "minimum": 0,
            "maximum": 8,
            "type": "integer",
            "description": "Number of children (2 to 11 years). Empty = 0. Infants are not supported: Google Flights returns incomplete results for searches with infants."
          },
          "cabinClass": {
            "title": "Cabin class",
            "enum": [
              "economy",
              "premium-economy",
              "business",
              "first"
            ],
            "type": "string",
            "description": "Cabin class, as in Google Flights.",
            "default": "economy"
          },
          "maxStops": {
            "title": "Stops",
            "enum": [
              "any",
              "nonstop",
              "1",
              "2"
            ],
            "type": "string",
            "description": "Google Flights' Stops filter.",
            "default": "any"
          },
          "airlines": {
            "title": "Airlines (only these)",
            "type": "array",
            "description": "Optional. 2-character IATA airline codes, for example DL, B6, UA. Only flights of these airlines are searched (Google Flights' Airlines filter). Empty = all airlines.",
            "items": {
              "type": "string"
            }
          },
          "currency": {
            "title": "Currency",
            "type": "string",
            "description": "Currency of the prices, one of the currencies Google Flights offers (USD, EUR, GBP, JPY, CAD, AUD, INR and more). The row shows the currency Google actually answered in; if it differs, nothing from that answer is returned.",
            "default": "USD"
          },
          "maxPrice": {
            "title": "Maximum price",
            "minimum": 1,
            "type": "number",
            "description": "Optional. Return only flights at or under this total price (in the chosen currency). Flights above it are not returned and not charged."
          },
          "maxFlightsPerDate": {
            "title": "Flights per date",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "At most this many flights are returned per departure date, in the order chosen below. Google Flights usually lists 10 to 60 flights per route and date. Empty = 20."
          },
          "sortBy": {
            "title": "Order",
            "enum": [
              "cheapest",
              "google",
              "departure",
              "duration"
            ],
            "type": "string",
            "description": "Which flights come first (and are kept when Flights per date cuts the list).",
            "default": "cheapest"
          },
          "onlyChanges": {
            "title": "Monitor: only new flights and price changes",
            "type": "boolean",
            "description": "On = return only flights that are new or whose price moved since this watch last returned them (same search and watch name), with previousPrice and priceChange. The first run returns the current flights. A date with nothing to report comes back as a free no-change row. The run start fee is still charged on a run with no changes (it pays for the check). Off (or empty) = return the flights every run; the change columns are still filled."
          },
          "minPriceChangePercent": {
            "title": "Monitor: smallest price change to report (%)",
            "minimum": 0,
            "maximum": 50,
            "type": "number",
            "description": "With Monitor on, a price move smaller than this percentage of the price this watch last returned is not returned and not charged (prices shown in a currency other than the fare's own move by small amounts with exchange rates). Small moves add up: once the price is this far from the last returned price, it is returned. 0 = report every change. Empty = 1."
          },
          "watchName": {
            "title": "Watch name",
            "type": "string",
            "description": "Optional. Runs with the same search and the same watch name share what they have seen. Give different names to two schedules of the same search, so each gets every change. Letters, digits, dot, dash and underscore."
          },
          "resetMonitoringState": {
            "title": "Reset monitoring state",
            "type": "boolean",
            "description": "Forget what this watch remembered for this search at the start of this run, so every flight is a first check again. Turn it off again for scheduled runs."
          }
        }
      },
      "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}