{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Flights Scraper - Fares, Prices & Booking",
    "description": "Scrape Google Flights by route and date: every itinerary with price, airlines, flight numbers, times, stops, layovers, CO2 and Google's price level. One-way, round trip, multi-city, return flights, booking options and a cheapest-date calendar. No login, no browser. From $0.60 per 1,000 flights.",
    "version": "0.1",
    "x-build-id": "EPzFsu3SMKJAqXHYL"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/eiv~google-flights-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-eiv-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/eiv~google-flights-scraper/runs": {
      "post": {
        "operationId": "runs-sync-eiv-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/eiv~google-flights-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-eiv-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": {
          "searches": {
            "title": "✈️ Searches",
            "type": "array",
            "description": "One route per line, with IATA airport codes: \"LAX-JFK\" (dates from the fields below), \"LAX-JFK 2026-12-01\" (one-way), \"LAX-JFK 2026-12-01 2026-12-08\" (round trip), \"JFK,EWR-LHR\" (several airports), \"NYC-LON\" (city codes), \"LAX-JFK +30\" (30 days from today). Multi-city: legs separated by \";\", each with its date. Google Flights links (with tfs=) work too.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Google Flights links (for chaining Actors)",
            "type": "array",
            "description": "The same searches in the URL-list shape other Actors output: Google Flights search links (google.com/travel/flights/search?tfs=…). Use this or the field above.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "departureDate": {
            "title": "📅 Departure date",
            "type": "string",
            "description": "For routes without their own date: a date (YYYY-MM-DD) or a time from today, such as \"30 days\" or \"2 weeks\". Relative dates keep scheduled runs pointing at the future.",
            "default": "30 days"
          },
          "returnDate": {
            "title": "Return date",
            "type": "string",
            "description": "Optional, for routes without their own date: a date or a time from today. Set it (or \"Trip length\") for round trips; leave both empty for one-way."
          },
          "tripLengthDays": {
            "title": "Trip length",
            "minimum": 1,
            "maximum": 60,
            "type": "integer",
            "description": "Optional: return this many days after departure (used when no return date is set). Handy on schedules: \"30 days\" departure + 7 days = a week-long trip a month out."
          },
          "adults": {
            "title": "👥 Adults",
            "minimum": 1,
            "maximum": 9,
            "type": "integer",
            "description": "Travellers aged 12 and over. Prices are the total for all travellers.",
            "default": 1
          },
          "children": {
            "title": "Children",
            "minimum": 0,
            "maximum": 8,
            "type": "integer",
            "description": "Travellers aged 2-11. Google applies child fares where the airline has them.",
            "default": 0
          },
          "infantsInSeat": {
            "title": "Infants in a seat",
            "minimum": 0,
            "maximum": 8,
            "type": "integer",
            "description": "Under 2, with their own seat.",
            "default": 0
          },
          "infantsOnLap": {
            "title": "Infants on a lap",
            "minimum": 0,
            "maximum": 8,
            "type": "integer",
            "description": "Under 2, on an adult's lap (at most one per adult).",
            "default": 0
          },
          "cabinClass": {
            "title": "Cabin",
            "enum": [
              "economy",
              "premium_economy",
              "business",
              "first"
            ],
            "type": "string",
            "description": "Cabin class to price.",
            "default": "economy"
          },
          "maxStops": {
            "title": "🎛️ Stops",
            "enum": [
              "any",
              "0",
              "1",
              "2"
            ],
            "type": "string",
            "description": "Most stops allowed per direction.",
            "default": "any"
          },
          "airlines": {
            "title": "Airlines",
            "type": "array",
            "description": "Only these airlines: two-character IATA codes (DL, BA, LH) and/or alliances (ONEWORLD, SKYTEAM, STAR_ALLIANCE).",
            "items": {
              "type": "string"
            }
          },
          "excludeAirlines": {
            "title": "Exclude airlines",
            "type": "array",
            "description": "Leave out these airlines or alliances, same codes as above (e.g. NK, F9).",
            "items": {
              "type": "string"
            }
          },
          "maxPrice": {
            "title": "Max price",
            "minimum": 1,
            "type": "integer",
            "description": "Only itineraries at or below this total price, in the currency below."
          },
          "maxDurationHours": {
            "title": "Max flight duration",
            "minimum": 1,
            "maximum": 72,
            "type": "integer",
            "description": "Longest journey per direction, layovers included."
          },
          "departureTimeRange": {
            "title": "Departure time",
            "type": "string",
            "description": "Hour window for leaving, local time, 24-hour clock: \"6-12\" for mornings, \"18-23\" for evenings. Applies to the outbound (and every multi-city leg)."
          },
          "arrivalTimeRange": {
            "title": "Arrival time",
            "type": "string",
            "description": "Hour window for arriving, local time, e.g. \"8-20\". Applies to the outbound."
          },
          "returnDepartureTimeRange": {
            "title": "Return departure time",
            "type": "string",
            "description": "Round trips: hour window for the return's departure, e.g. \"12-23\"."
          },
          "returnArrivalTimeRange": {
            "title": "Return arrival time",
            "type": "string",
            "description": "Round trips: hour window for the return's arrival, e.g. \"0-22\"."
          },
          "connectVia": {
            "title": "Connect only in",
            "type": "array",
            "description": "Connections must be at one of these airports (codes such as ORD, DFW). Nonstop flights still show.",
            "items": {
              "type": "string"
            }
          },
          "avoidConnectingIn": {
            "title": "Never connect in",
            "type": "array",
            "description": "Drop itineraries with a layover at any of these airports (codes such as JFK). Dropped flights are not charged.",
            "items": {
              "type": "string"
            }
          },
          "minLayoverMinutes": {
            "title": "Min layover",
            "minimum": 1,
            "maximum": 1440,
            "type": "integer",
            "description": "Shortest connection time allowed."
          },
          "maxLayoverMinutes": {
            "title": "Max layover",
            "minimum": 1,
            "maximum": 1440,
            "type": "integer",
            "description": "Longest connection time allowed."
          },
          "checkedBags": {
            "title": "Checked bags",
            "minimum": 0,
            "maximum": 2,
            "type": "integer",
            "description": "Price fares including this many checked bags per traveller, as Google's Bags filter does.",
            "default": 0
          },
          "carryOnBag": {
            "title": "Include a carry-on bag",
            "type": "boolean",
            "description": "Price fares with a carry-on bag included (drops fares that charge for one).",
            "default": false
          },
          "excludeBasicEconomy": {
            "title": "Exclude basic economy",
            "type": "boolean",
            "description": "Leave out basic economy fares (mostly US airlines).",
            "default": false
          },
          "lessEmissionsOnly": {
            "title": "Less emissions only",
            "type": "boolean",
            "description": "Only flights Google marks as lower emissions.",
            "default": false
          },
          "sortBy": {
            "title": "📊 Sort by",
            "enum": [
              "best",
              "price",
              "departure",
              "arrival",
              "duration",
              "emissions"
            ],
            "type": "string",
            "description": "Order of the flights: Google's best ranking, or by price, departure time, arrival time, duration or emissions.",
            "default": "best"
          },
          "maxResultsPerSearch": {
            "title": "Flights per search",
            "minimum": 1,
            "maximum": 300,
            "type": "integer",
            "description": "Most flights to return per search, in the order above. Google lists up to ~150 on busy routes (300 for city-to-city searches).",
            "default": 100
          },
          "maxItems": {
            "title": "Max results",
            "minimum": 1,
            "maximum": 1000000,
            "type": "integer",
            "description": "Stop after this many flight rows in total. You pay per flight, so this is also your cost cap for the run.",
            "default": 1000
          },
          "currency": {
            "title": "Currency",
            "type": "string",
            "description": "ISO currency code for prices: USD, EUR, GBP, CAD, AUD, INR, JPY…",
            "default": "USD"
          },
          "market": {
            "title": "Country (point of sale)",
            "type": "string",
            "description": "Two-letter country code Google prices from: US, GB, DE, IN… Fares and availability differ by country.",
            "default": "US"
          },
          "language": {
            "title": "Language",
            "type": "string",
            "description": "Language of airport and airline names: en, de, fr, es…",
            "default": "en"
          },
          "includePriceInsights": {
            "title": "➕ Price insights",
            "type": "boolean",
            "description": "Add Google's price level (low / typical / high) and the typical price range to every flight. Included in the price; adds about a second per search. Not available for multi-city trips.",
            "default": true
          },
          "returnFlightsTop": {
            "title": "Return flights for the top N",
            "minimum": 0,
            "maximum": 50,
            "type": "integer",
            "description": "Round trips: list the return flights for the first N departing flights, each with the round-trip total. Multi-city: Google's best flight on each later leg for the first N first-leg flights. Each row is charged as a flight. 0 = off.",
            "default": 0
          },
          "returnFlightsPerOutbound": {
            "title": "Return flights per departing flight",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "How many return flights to keep for each departing flight above, in the sort order.",
            "default": 10
          },
          "includeBookingOptions": {
            "title": "Booking options",
            "type": "boolean",
            "description": "For the first itineraries of each search, who sells the fare: the airline and travel agencies, each with its fare name (Basic Economy, Main…), price and a booking link. Included in the flight price; adds about a second per itinerary. Needs a complete trip: one-way flights, round-trip return flights, the last multi-city leg.",
            "default": false
          },
          "maxBookingItineraries": {
            "title": "Booking options for the first N",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "How many itineraries per search get booking options, from the top of the list. Each is one extra lookup.",
            "default": 10
          },
          "priceCalendarDays": {
            "title": "Cheapest-date calendar",
            "minimum": 0,
            "maximum": 90,
            "type": "integer",
            "description": "Also return the cheapest flight for each of this many departure dates, starting at the search's date (round trips keep their length). One row per date, charged as a flight. 0 = off.",
            "default": 0
          },
          "includeSearchSummary": {
            "title": "Search summary row",
            "type": "boolean",
            "description": "Add one free row per search: flights found, lowest price, cheapest nonstop, Google's price level, typical range and ~60 days of price history.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "⚙️ Proxy",
            "type": "object",
            "description": "Leave as it is: the Actor uses Apify's own address (no proxy needed, no proxy cost) and moves to datacenter proxy if Google refuses it. Apify's datacenter proxy as your setting is slower and often refused by Google Flights; your own proxy is tried first, then Apify's address.",
            "default": {
              "useApifyProxy": false
            }
          },
          "maxConcurrency": {
            "title": "Concurrency",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "How many searches run at the same time.",
            "default": 5
          },
          "requestTimeoutSecs": {
            "title": "Request timeout",
            "minimum": 5,
            "maximum": 120,
            "type": "integer",
            "description": "How long to wait for one answer. Google can take up to a minute on big city-to-city searches (NYC-LON); a full list that misses this falls back to Google's short list.",
            "default": 60
          },
          "maxRetries": {
            "title": "Retries per request",
            "minimum": 0,
            "maximum": 5,
            "type": "integer",
            "description": "Retries for refused or failed requests, each from a fresh address. Timeouts are not retried.",
            "default": 2
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}