Vexaloom Labs

Google Flights Fare & Itinerary Filter Scraper

Search Google Flights for one-way or round-trip fares across any cabin class, then narrow results by stops, total duration, airline, and price range, with an optional price-alert flag.

Input schema

Input fields, types, required flags, descriptions, defaults, and prefills come from the published definition. Prefill examples are distinct from defaults.

FieldTypeRequiredDescription
modestringrequiredSearch flights, or collect the cheapest fare for each date around your departure date.
originAirportstringoptionalThree-letter IATA airport or city code, e.g. JFK, LHR, NYC. One code per search; use `searches` for alternate airports.
destinationAirportstringoptionalThree-letter IATA airport or city code, e.g. LHR, HND, LON. One code per search; use `searches` for alternate airports.
Show all input fields
FieldTypeRequiredDescription
modestringrequiredSearch flights, or collect the cheapest fare for each date around your departure date.
originAirportstringoptionalThree-letter IATA airport or city code, e.g. JFK, LHR, NYC. One code per search; use `searches` for alternate airports.
destinationAirportstringoptionalThree-letter IATA airport or city code, e.g. LHR, HND, LON. One code per search; use `searches` for alternate airports.
outboundDatestringoptionalDeparture date in YYYY-MM-DD format. Leave empty to use 30 days from today (UTC); the chosen date is logged.
returnDatestringoptionalReturn date in YYYY-MM-DD format. Leave empty for a one-way search.
adultsintegeroptionalTravellers aged 12 and over (1-9).
childrenintegeroptionalTravellers aged 2-11 (0-8).
infantsintegeroptionalInfants under 2 travelling on an adult lap (0-8). Cannot exceed the number of adults.
infantsInSeatintegeroptionalInfants under 2 travelling in their own seat (0-8).
cabinClassstringoptionalCabin to search.
currencystringoptionalCurrency for every price.
languagestringoptionalLanguage Google Flights uses for airport and airline names.
countrystringoptionalCountry whose fares and availability Google should show.
maxStopsstringoptionalLargest number of stops allowed on any leg.
airlinesarrayoptionalTwo-letter IATA airline codes to keep, e.g. ["BA","AA"]. Flights marketed by or codesharing with these airlines are kept. Empty means all airlines.
excludeAirlinesarrayoptionalTwo-letter IATA airline codes to remove, e.g. ["FR"].
minPriceintegeroptionalDrop fares below this price, in the chosen currency.
maxPriceintegeroptionalDrop fares above this price, in the chosen currency.
maxDurationMinutesintegeroptionalDrop itineraries longer than this, including layovers.
departureTimeRangestringoptionalOnly departures in this local-time window.
arrivalTimeRangestringoptionalOnly arrivals in this local-time window.
lessEmissionsbooleanoptionalKeep itineraries Google marks as producing less CO2 than typical for the route.
sortBystringoptionalHow to order the returned flights.
maxResultsintegeroptionalMaximum number of flight or calendar rows to return; in calendar mode it also caps the number of days.
returnOptionsTopintegeroptionalFor round trips, fetch return flights for this many top outbound options. 0 turns this off.
returnOptionsPerOutboundintegeroptionalHow many return flights to attach to each selected outbound.
includePriceInsightsbooleanoptionalAdd Google's current, typical and historical price range when available.
priceGraphDaysintegeroptionalNumber of calendar days to return in price-calendar mode (1-61), starting on the departure date; also capped by maxResults.
priceAlertThresholdnumberoptionalWhen set, add a priceBelowThreshold flag to every fare in the chosen currency.
searchesarrayoptionalOptional list of searches to run in one go. Each item needs originAirport, destinationAirport, outboundDate and an optional returnDate. Up to 20.

Download the published input schema

View complete JSON
{
  "description": "Search Google Flights by route and date. Choose one-way or round-trip, filter fares, fetch return options, or collect a price calendar.",
  "properties": {
    "adults": {
      "default": 1,
      "description": "Travellers aged 12 and over (1-9).",
      "maximum": 9,
      "minimum": 1,
      "prefill": 1,
      "title": "Adults",
      "type": "integer"
    },
    "airlines": {
      "default": [],
      "description": "Two-letter IATA airline codes to keep, e.g. [\"BA\",\"AA\"]. Flights marketed by or codesharing with these airlines are kept. Empty means all airlines.",
      "editor": "stringList",
      "prefill": [],
      "title": "Only these airlines",
      "type": "array"
    },
    "arrivalTimeRange": {
      "default": "any",
      "description": "Only arrivals in this local-time window.",
      "editor": "select",
      "enum": [
        "any",
        "00-06",
        "06-12",
        "12-18",
        "18-24"
      ],
      "enumTitles": [
        "Any time",
        "00:00-06:00",
        "06:00-12:00",
        "12:00-18:00",
        "18:00-24:00"
      ],
      "prefill": "any",
      "title": "Arrival time",
      "type": "string"
    },
    "cabinClass": {
      "default": "economy",
      "description": "Cabin to search.",
      "editor": "select",
      "enum": [
        "economy",
        "premium_economy",
        "business",
        "first"
      ],
      "enumTitles": [
        "Economy",
        "Premium economy",
        "Business",
        "First"
      ],
      "prefill": "economy",
      "title": "Cabin class",
      "type": "string"
    },
    "children": {
      "default": 0,
      "description": "Travellers aged 2-11 (0-8).",
      "maximum": 8,
      "minimum": 0,
      "prefill": 0,
      "title": "Children",
      "type": "integer"
    },
    "country": {
      "default": "US",
      "description": "Country whose fares and availability Google should show.",
      "editor": "select",
      "enum": [
        "AF",
        "AL",
        "DZ",
        "AS",
        "AD",
        "AO",
        "AG",
        "AR",
        "AM",
        "AU",
        "AT",
        "AZ",
        "BS",
        "BH",
        "BD",
        "BY",
        "BE",
        "BZ",
        "BJ",
        "BT",
        "BO",
        "BA",
        "BW",
        "BR",
        "BN",
        "BG",
        "BF",
        "BI",
        "KH",
        "CM",
        "CA",
        "CV",
        "CF",
        "TD",
        "CL",
        "CN",
        "CO",
        "CG",
        "CD",
        "CK",
        "CR",
        "CI",
        "HR",
        "CU",
        "CY",
        "CZ",
        "DK",
        "DJ",
        "DM",
        "DO",
        "EC",
        "EG",
        "SV",
        "EE",
        "ET",
        "FJ",
        "FI",
        "FR",
        "GA",
        "GM",
        "GE",
        "DE",
        "GH",
        "GI",
        "GR",
        "GL",
        "GT",
        "GG",
        "GY",
        "HT",
        "HN",
        "HK",
        "HU",
        "IS",
        "IN",
        "ID",
        "IR",
        "IQ",
        "IE",
        "IM",
        "IL",
        "IT",
        "JM",
        "JP",
        "JE",
        "JO",
        "KZ",
        "KE",
        "KI",
        "KW",
        "KG",
        "LA",
        "LV",
        "LB",
        "LS",
        "LY",
        "LI",
        "LT",
        "LU",
        "MG",
        "MW",
        "MY",
        "MV",
        "ML",
        "MT",
        "MU",
        "MX",
        "FM",
        "MD",
        "MN",
        "ME",
        "MA",
        "MZ",
        "MM",
        "NA",
        "NR",
        "NP",
        "NL",
        "NZ",
        "NI",
        "NE",
        "NG",
        "NU",
        "MK",
        "NO",
        "OM",
        "PK",
        "PS",
        "PA",
        "PG",
        "PY",
        "PE",
        "PH",
        "PN",
        "PL",
        "PT",
        "PR",
        "QA",
        "RO",
        "RU",
        "RW",
        "WS",
        "SM",
        "ST",
        "SA",
        "SN",
        "RS",
        "SC",
        "SL",
        "SG",
        "SK",
        "SI",
        "SB",
        "SO",
        "ZA",
        "KR",
        "ES",
        "LK",
        "SH",
        "VC",
        "SR",
        "SE",
        "CH",
        "TW",
        "TJ",
        "TZ",
        "TH",
        "TL",
        "TG",
        "TO",
        "TT",
        "TN",
        "TR",
        "TM",
        "UG",
        "UA",
        "AE",
        "GB",
        "US",
        "UY",
        "UZ",
        "VU",
        "VE",
        "VN",
        "ZM",
        "ZW"
      ],
      "enumTitles": [
        "Afghanistan",
        "Albania",
        "Algeria",
        "American Samoa",
        "Andorra",
        "Angola",
        "Antigua & Barbuda",
        "Argentina",
        "Armenia",
        "Australia",
        "Austria",
        "Azerbaijan",
        "Bahamas",
        "Bahrain",
        "Bangladesh",
        "Belarus",
        "Belgium",
        "Belize",
        "Benin",
        "Bhutan",
        "Bolivia",
        "Bosnia & Herzegovina",
        "Botswana",
        "Brazil",
        "Brunei",
        "Bulgaria",
        "Burkina Faso",
        "Burundi",
        "Cambodia",
        "Cameroon",
        "Canada",
        "Cape Verde",
        "Central African Republic",
        "Chad",
        "Chile",
        "China",
        "Colombia",
        "Congo - Brazzaville",
        "Congo - Kinshasa",
        "Cook Islands",
        "Costa Rica",
        "Côte d’Ivoire",
        "Croatia",
        "Cuba",
        "Cyprus",
        "Czechia",
        "Denmark",
        "Djibouti",
        "Dominica",
        "Dominican Republic",
        "Ecuador",
        "Egypt",
        "El Salvador",
        "Estonia",
        "Ethiopia",
        "Fiji",
        "Finland",
        "France",
        "Gabon",
        "Gambia",
        "Georgia",
        "Germany",
        "Ghana",
        "Gibraltar",
        "Greece",
        "Greenland",
        "Guatemala",
        "Guernsey",
        "Guyana",
        "Haiti",
        "Honduras",
        "Hong Kong",
        "Hungary",
        "Iceland",
        "India",
        "Indonesia",
        "Iran",
        "Iraq",
        "Ireland",
        "Isle of Man",
        "Israel",
        "Italy",
        "Jamaica",
        "Japan",
        "Jersey",
        "Jordan",
        "Kazakhstan",
        "Kenya",
        "Kiribati",
        "Kuwait",
        "Kyrgyzstan",
        "Laos",
        "Latvia",
        "Lebanon",
        "Lesotho",
        "Libya",
        "Liechtenstein",
        "Lithuania",
        "Luxembourg",
        "Madagascar",
        "Malawi",
        "Malaysia",
        "Maldives",
        "Mali",
        "Malta",
        "Mauritius",
        "Mexico",
        "Micronesia",
        "Moldova",
        "Mongolia",
        "Montenegro",
        "Morocco",
        "Mozambique",
        "Myanmar (Burma)",
        "Namibia",
        "Nauru",
        "Nepal",
        "Netherlands",
        "New Zealand",
        "Nicaragua",
        "Niger",
        "Nigeria",
        "Niue",
        "North Macedonia",
        "Norway",
        "Oman",
        "Pakistan",
        "Palestine",
        "Panama",
        "Papua New Guinea",
        "Paraguay",
        "Peru",
        "Philippines",
        "Pitcairn Islands",
        "Poland",
        "Portugal",
        "Puerto Rico",
        "Qatar",
        "Romania",
        "Russia",
        "Rwanda",
        "Samoa",
        "San Marino",
        "São Tomé & Príncipe",
        "Saudi Arabia",
        "Senegal",
        "Serbia",
        "Seychelles",
        "Sierra Leone",
        "Singapore",
        "Slovakia",
        "Slovenia",
        "Solomon Islands",
        "Somalia",
        "South Africa",
        "South Korea",
        "Spain",
        "Sri Lanka",
        "St. Helena",
        "St. Vincent & Grenadines",
        "Suriname",
        "Sweden",
        "Switzerland",
        "Taiwan",
        "Tajikistan",
        "Tanzania",
        "Thailand",
        "Timor-Leste",
        "Togo",
        "Tonga",
        "Trinidad & Tobago",
        "Tunisia",
        "Türkiye",
        "Turkmenistan",
        "Uganda",
        "Ukraine",
        "United Arab Emirates",
        "United Kingdom",
        "United States",
        "Uruguay",
        "Uzbekistan",
        "Vanuatu",
        "Venezuela",
        "Vietnam",
        "Zambia",
        "Zimbabwe"
      ],
      "prefill": "US",
      "title": "Country",
      "type": "string"
    },
    "currency": {
      "default": "USD",
      "description": "Currency for every price.",
      "editor": "select",
      "enum": [
        "ALL",
        "DZD",
        "ARS",
        "AMD",
        "AWG",
        "AUD",
        "AZN",
        "BSD",
        "BHD",
        "BYN",
        "BMD",
        "BAM",
        "BRL",
        "GBP",
        "CAD",
        "XPF",
        "CLP",
        "CNY",
        "COP",
        "CRC",
        "CUP",
        "CZK",
        "DKK",
        "DOP",
        "EGP",
        "EUR",
        "GEL",
        "HKD",
        "HUF",
        "ISK",
        "INR",
        "IDR",
        "IRR",
        "ILS",
        "JMD",
        "JPY",
        "JOD",
        "KZT",
        "KWD",
        "LBP",
        "MKD",
        "MYR",
        "MXN",
        "MDL",
        "MAD",
        "TWD",
        "NZD",
        "NGN",
        "NOK",
        "OMR",
        "PKR",
        "PAB",
        "PEN",
        "PHP",
        "PLN",
        "QAR",
        "RON",
        "RUB",
        "SAR",
        "RSD",
        "SGD",
        "ZAR",
        "KRW",
        "SEK",
        "CHF",
        "THB",
        "TRY",
        "UAH",
        "AED",
        "USD",
        "VND"
      ],
      "enumTitles": [
        "Albanian Lek",
        "Algerian Dinar",
        "Argentine Peso",
        "Armenian Dram",
        "Aruban Florin",
        "Australian Dollar",
        "Azerbaijani Manat",
        "Bahamian Dollar",
        "Bahraini Dinar",
        "Belarusian Ruble",
        "Bermudan Dollar",
        "Bosnia-Herzegovina Convertible Mark",
        "Brazilian Real",
        "British Pound",
        "Canadian Dollar",
        "CFP Franc",
        "Chilean Peso",
        "Chinese Yuan",
        "Colombian Peso",
        "Costa Rican Colón",
        "Cuban Peso",
        "Czech Koruna",
        "Danish Krone",
        "Dominican Peso",
        "Egyptian Pound",
        "Euro",
        "Georgian Lari",
        "Hong Kong Dollar",
        "Hungarian Forint",
        "Icelandic Króna",
        "Indian Rupee",
        "Indonesian Rupiah",
        "Iranian Rial",
        "Israeli New Shekel",
        "Jamaican Dollar",
        "Japanese Yen",
        "Jordanian Dinar",
        "Kazakhstani Tenge",
        "Kuwaiti Dinar",
        "Lebanese Pound",
        "Macedonian Denar",
        "Malaysian Ringgit",
        "Mexican Peso",
        "Moldovan Leu",
        "Moroccan Dirham",
        "New Taiwan Dollar",
        "New Zealand Dollar",
        "Nigerian Naira",
        "Norwegian Krone",
        "Omani Rial",
        "Pakistani Rupee",
        "Panamanian Balboa",
        "Peruvian Sol",
        "Philippine Peso",
        "Polish Zloty",
        "Qatari Riyal",
        "Romanian Leu",
        "Russian Ruble",
        "Saudi Riyal",
        "Serbian Dinar",
        "Singapore Dollar",
        "South African Rand",
        "South Korean Won",
        "Swedish Krona",
        "Swiss Franc",
        "Thai Baht",
        "Turkish Lira",
        "Ukrainian Hryvnia",
        "United Arab Emirates Dirham",
        "US Dollar",
        "Vietnamese Dong"
      ],
      "prefill": "USD",
      "title": "Currency",
      "type": "string"
    },
    "departureTimeRange": {
      "default": "any",
      "description": "Only departures in this local-time window.",
      "editor": "select",
      "enum": [
        "any",
        "00-06",
        "06-12",
        "12-18",
        "18-24"
      ],
      "enumTitles": [
        "Any time",
        "00:00-06:00",
        "06:00-12:00",
        "12:00-18:00",
        "18:00-24:00"
      ],
      "prefill": "any",
      "title": "Departure time",
      "type": "string"
    },
    "destinationAirport": {
      "default": "LHR",
      "description": "Three-letter IATA airport or city code, e.g. LHR, HND, LON. One code per search; use `searches` for alternate airports.",
      "editor": "textfield",
      "prefill": "LHR",
      "title": "Destination airport or city",
      "type": "string"
    },
    "excludeAirlines": {
      "default": [],
      "description": "Two-letter IATA airline codes to remove, e.g. [\"FR\"].",
      "editor": "stringList",
      "prefill": [],
      "title": "Exclude these airlines",
      "type": "array"
    },
    "includePriceInsights": {
      "default": true,
      "description": "Add Google's current, typical and historical price range when available.",
      "prefill": false,
      "title": "Include price insights",
      "type": "boolean"
    },
    "infants": {
      "default": 0,
      "description": "Infants under 2 travelling on an adult lap (0-8). Cannot exceed the number of adults.",
      "maximum": 8,
      "minimum": 0,
      "prefill": 0,
      "title": "Infants on lap",
      "type": "integer"
    },
    "infantsInSeat": {
      "default": 0,
      "description": "Infants under 2 travelling in their own seat (0-8).",
      "maximum": 8,
      "minimum": 0,
      "prefill": 0,
      "title": "Infants in a seat",
      "type": "integer"
    },
    "language": {
      "default": "en",
      "description": "Language Google Flights uses for airport and airline names.",
      "editor": "select",
      "enum": [
        "af",
        "bs",
        "ca",
        "cs",
        "da",
        "de",
        "et",
        "en-GB",
        "en-US",
        "es",
        "es-419",
        "eu",
        "fil",
        "fr",
        "gl",
        "hr",
        "id",
        "is",
        "it",
        "sw",
        "lv",
        "lt",
        "hu",
        "ms",
        "nl",
        "no",
        "pl",
        "pt-BR",
        "pt-PT",
        "ro",
        "sq",
        "sk",
        "sl",
        "sr-Latn",
        "fi",
        "sv",
        "vi",
        "tr",
        "el",
        "bg",
        "mk",
        "mn",
        "ru",
        "sr",
        "uk",
        "ka",
        "iw",
        "ur",
        "ar",
        "fa",
        "am",
        "ne",
        "mr",
        "hi",
        "as",
        "bn",
        "pa",
        "gu",
        "or",
        "ta",
        "te",
        "kn",
        "ml",
        "si",
        "th",
        "lo",
        "km",
        "ko",
        "zh-HK",
        "ja",
        "zh-CN",
        "zh-TW",
        "en"
      ],
      "enumTitles": [
        "Afrikaans",
        "Bosnian",
        "Catalan",
        "Czech",
        "Danish",
        "German",
        "Estonian",
        "English (United Kingdom)",
        "English (United States)",
        "Spanish (Spain)",
        "Spanish (Latin America)",
        "Basque",
        "Filipino",
        "French",
        "Galician",
        "Croatian",
        "Indonesian",
        "Icelandic",
        "Italian",
        "Swahili",
        "Latvian",
        "Lithuanian",
        "Hungarian",
        "Malay",
        "Dutch",
        "Norwegian",
        "Polish",
        "Portuguese (Brazil)",
        "Portuguese (Portugal)",
        "Romanian",
        "Albanian",
        "Slovak",
        "Slovenian",
        "Serbian (Latin)",
        "Finnish",
        "Swedish",
        "Vietnamese",
        "Turkish",
        "Greek",
        "Bulgarian",
        "Macedonian",
        "Mongolian",
        "Russian",
        "Serbian (Cyrillic)",
        "Ukrainian",
        "Georgian",
        "Hebrew",
        "Urdu",
        "Arabic",
        "Persian",
        "Amharic",
        "Nepali",
        "Marathi",
        "Hindi",
        "Assamese",
        "Bangla",
        "Punjabi",
        "Gujarati",
        "Odia",
        "Tamil",
        "Telugu",
        "Kannada",
        "Malayalam",
        "Sinhala",
        "Thai",
        "Lao",
        "Khmer",
        "Korean",
        "Chinese (Hong Kong)",
        "Japanese",
        "Chinese (Simplified)",
        "Chinese (Traditional)",
        "English"
      ],
      "prefill": "en",
      "title": "Language",
      "type": "string"
    },
    "lessEmissions": {
      "default": false,
      "description": "Keep itineraries Google marks as producing less CO2 than typical for the route.",
      "prefill": false,
      "title": "Lower-emission flights only",
      "type": "boolean"
    },
    "maxDurationMinutes": {
      "description": "Drop itineraries longer than this, including layovers.",
      "maximum": 4320,
      "minimum": 30,
      "title": "Maximum total duration (minutes)",
      "type": "integer"
    },
    "maxPrice": {
      "description": "Drop fares above this price, in the chosen currency.",
      "maximum": 100000,
      "minimum": 0,
      "title": "Maximum price",
      "type": "integer"
    },
    "maxResults": {
      "default": 61,
      "description": "Maximum number of flight or calendar rows to return; in calendar mode it also caps the number of days.",
      "maximum": 200,
      "minimum": 1,
      "prefill": 1,
      "title": "Maximum results",
      "type": "integer"
    },
    "maxStops": {
      "default": "any",
      "description": "Largest number of stops allowed on any leg.",
      "editor": "select",
      "enum": [
        "any",
        "nonstop",
        "one_stop",
        "two_or_fewer"
      ],
      "enumTitles": [
        "Any",
        "Nonstop only",
        "One stop or fewer",
        "Two stops or fewer"
      ],
      "prefill": "any",
      "title": "Maximum stops",
      "type": "string"
    },
    "minPrice": {
      "description": "Drop fares below this price, in the chosen currency.",
      "maximum": 100000,
      "minimum": 0,
      "title": "Minimum price",
      "type": "integer"
    },
    "mode": {
      "default": "search",
      "description": "Search flights, or collect the cheapest fare for each date around your departure date.",
      "editor": "select",
      "enum": [
        "search",
        "calendar"
      ],
      "enumTitles": [
        "Search flights",
        "Price calendar"
      ],
      "prefill": "search",
      "title": "Mode",
      "type": "string"
    },
    "originAirport": {
      "default": "JFK",
      "description": "Three-letter IATA airport or city code, e.g. JFK, LHR, NYC. One code per search; use `searches` for alternate airports.",
      "editor": "textfield",
      "prefill": "JFK",
      "title": "Origin airport or city",
      "type": "string"
    },
    "outboundDate": {
      "description": "Departure date in YYYY-MM-DD format. Leave empty to use 30 days from today (UTC); the chosen date is logged.",
      "editor": "textfield",
      "prefill": "2026-12-10",
      "title": "Departure date",
      "type": "string"
    },
    "priceAlertThreshold": {
      "description": "When set, add a priceBelowThreshold flag to every fare in the chosen currency.",
      "maximum": 100000,
      "minimum": 0,
      "title": "Price alert threshold",
      "type": "number"
    },
    "priceGraphDays": {
      "default": 61,
      "description": "Number of calendar days to return in price-calendar mode (1-61), starting on the departure date; also capped by maxResults.",
      "maximum": 61,
      "minimum": 1,
      "prefill": 1,
      "title": "Price calendar days",
      "type": "integer"
    },
    "returnDate": {
      "description": "Return date in YYYY-MM-DD format. Leave empty for a one-way search.",
      "editor": "textfield",
      "title": "Return date",
      "type": "string"
    },
    "returnOptionsPerOutbound": {
      "default": 5,
      "description": "How many return flights to attach to each selected outbound.",
      "maximum": 20,
      "minimum": 1,
      "prefill": 5,
      "title": "Return options per outbound",
      "type": "integer"
    },
    "returnOptionsTop": {
      "default": 0,
      "description": "For round trips, fetch return flights for this many top outbound options. 0 turns this off.",
      "maximum": 20,
      "minimum": 0,
      "prefill": 0,
      "title": "Return options for top outbounds",
      "type": "integer"
    },
    "searches": {
      "description": "Optional list of searches to run in one go. Each item needs originAirport, destinationAirport, outboundDate and an optional returnDate. Up to 20.",
      "editor": "json",
      "items": {
        "properties": {
          "destinationAirport": {
            "description": "Destination IATA airport or city code (one per search).",
            "title": "Destination airport or city",
            "type": "string"
          },
          "originAirport": {
            "description": "Origin IATA airport or city code (one per search).",
            "title": "Origin airport or city",
            "type": "string"
          },
          "outboundDate": {
            "description": "Departure date YYYY-MM-DD.",
            "title": "Departure date",
            "type": "string"
          },
          "returnDate": {
            "description": "Return date YYYY-MM-DD; leave empty for one-way.",
            "title": "Return date",
            "type": "string"
          }
        },
        "required": [
          "originAirport",
          "destinationAirport"
        ],
        "type": "object"
      },
      "title": "Additional searches",
      "type": "array"
    },
    "sortBy": {
      "default": "top",
      "description": "How to order the returned flights.",
      "editor": "select",
      "enum": [
        "top",
        "cheapest",
        "fastest",
        "earliestDeparture",
        "latestDeparture",
        "lowestEmissions"
      ],
      "enumTitles": [
        "Google's top picks",
        "Cheapest first",
        "Fastest first",
        "Earliest departure",
        "Latest departure",
        "Lowest emissions"
      ],
      "prefill": "top",
      "title": "Sort results by",
      "type": "string"
    }
  },
  "required": [
    "mode"
  ],
  "schemaVersion": 1,
  "title": "Google Flights Fare & Itinerary Filter Scraper Input",
  "type": "object"
}

Output schema

Published result links and storage locations. This schema is not an exhaustive contract for every field in a dataset record.

FieldTypeRequiredDescription
flightsstringoptionalDataset containing the scraped Google Flights itineraries and price-calendar rows.

Download the published output schema

View complete JSON
{
  "actorOutputSchemaVersion": 1,
  "description": "Flight itinerary records with fares, airlines, schedules, layovers, aircraft, emissions and booking links, plus price-calendar day records.",
  "properties": {
    "flights": {
      "description": "Dataset containing the scraped Google Flights itineraries and price-calendar rows.",
      "template": "{{links.apiDefaultDatasetUrl}}/items",
      "title": "Flight Options",
      "type": "string"
    }
  },
  "title": "Google Flights Fare & Itinerary Filter Scraper Output"
}

Dataset schema

Published dataset views and any declared field definitions. A view can select only a subset of the returned record fields.

Download the published dataset schema

View complete JSON
{
  "actorSpecification": 1,
  "views": {
    "overview": {
      "display": {
        "component": "table",
        "properties": {}
      },
      "title": "Google Flights",
      "transformation": {
        "fields": [
          "price",
          "currency",
          "airline",
          "departureAirport",
          "departureTime",
          "arrivalAirport",
          "arrivalTime",
          "durationMinutes",
          "stops",
          "emissionsGrams",
          "bookingUrl",
          "scrapedAt"
        ]
      }
    }
  }
}

Key-value schema

Published key-value store definitions, when provided by this build.

This definition is not present in the default published build. See the published README for available documentation.

Published README

Read the full published documentation

Google Flights Fare & Itinerary Filter Scraper

Search Google Flights for a route and date and get one structured record per itinerary — fare, airline, flight numbers, local departure and arrival times, duration, stops, layovers, aircraft, CO2 estimate and a link to open the itinerary on Google Flights. Works for one-way and round-trip searches in 71 currencies, 186 countries and 73 languages. No login, no cookies, no proxy setup.

What this actor does

  • Searches Google Flights by airport or city code (one code per side; use searches for alternate airports)
  • Returns one-way and round-trip fares, with optional return-flight options for the top outbound choices
  • Filters by stops, airline include/exclude, cabin, passengers, price range, total duration, departure/arrival time window and lower-emission itineraries
  • Adds a Price calendar mode with up to 61 daily fares starting on the departure date (also capped by maxResults)
  • Produces a booking deep link for one-way itineraries and for every return option
  • Supports batch searches, so one run can cover several routes and dates
  • Empty fields are omitted from records

Output per flight

  • price, currency — total for all passengers in the selected currency; a round-trip price is the trip total
  • airline, airlineCode, airlines[], airlineCodes[], operatingAirlines[]
  • flightNumber, flightNumbers[] — marketing flight numbers (e.g. BA178)
  • departureAirport, departureAirportName, departureDate, departureTime, departureDateTime
  • arrivalAirport, arrivalAirportName, arrivalDate, arrivalTime, arrivalDateTime
  • durationMinutes, stops, layovers[] (airport, airport name, city, minutes)
  • segments[] — per-flight airline, flight number, codeshares, airports, local times, duration, aircraft, legroom and CO2 grams
  • emissionsGrams, typicalEmissionsGrams — Google's CO2 estimate for the itinerary and a typical flight on the route; emissionsDeltaPercent when Google supplies it
  • bookingUrl — opens this exact itinerary on Google Flights (one-way rows and return options)
  • googleFlightsUrl — opens the selected outbound and its return choices on Google Flights
  • itineraryId, isBest, rank, searchId
  • priceInsights — current lowest, typical low, history low/high and the difference from typical, when Google provides it
  • returnOptions[] — return-flight itineraries (recordType: "returnOption") with segments, price, duration and a booking link (when requested)
  • pricePerHour, priceBelowThreshold (when a threshold is set), cabin, outboundDate, returnDate
  • recordType: "flight", scrapedAt

Output per calendar day (mode = calendar)

  • recordType: "priceCalendarDay", date, price, currency, isCheapest (true for every day tied at the lowest price)
  • originAirport, destinationAirport, outboundDate, returnDate, searchId, scrapedAt

Input

Field Type Default Description
mode string search search for itineraries, calendar for a daily price graph
originAirport string JFK Airport or city code (one per search; comma lists are not combined)
destinationAirport string LHR Airport or city code (one per search; comma lists are not combined)
outboundDate string – YYYY-MM-DD; when empty, defaults to 30 days from today (UTC) and logs the chosen date
returnDate string – YYYY-MM-DD; empty means one-way
adults int 1 1–9
children int 0 0–8
infants int 0 Lap infants, 0–8; cannot exceed adults
infantsInSeat int 0 Infants in their own seat, 0–8
cabinClass enum economy economy / premium_economy / business / first
currency enum USD 71 currencies
language enum en 73 languages
country enum US 186 countries
maxStops enum any any / nonstop / one_stop / two_or_fewer
airlines array [] IATA codes to keep; codeshare partners count
excludeAirlines array [] IATA codes to remove
minPrice / maxPrice int – Price range in the selected currency
maxDurationMinutes int – Maximum total journey time, layovers included
departureTimeRange enum any any / 00-06 / 06-12 / 12-18 / 18-24 local time
arrivalTimeRange enum any Same windows for the final arrival
lessEmissions bool false Keep lower-emission itineraries
sortBy enum top top / cheapest / fastest / earliestDeparture / latestDeparture / lowestEmissions
maxResults int 61 1–200 rows
returnOptionsTop int 0 Round trips: fetch returns for this many outbounds
returnOptionsPerOutbound int 5 Maximum return options per outbound
includePriceInsights bool true Add Google's price-range insight when available
priceGraphDays int 61 Calendar days from the departure date, 1–61; each day is its own search; also capped by maxResults
priceAlertThreshold number – Adds priceBelowThreshold in the selected currency
searches array – Optional batch of {originAirport,destinationAirport,outboundDate,returnDate} objects, up to 20

Example: nonstop business class, London to New York

{
  "originAirport": "LHR",
  "destinationAirport": "JFK",
  "outboundDate": "2026-12-01",
  "returnDate": "2026-12-10",
  "cabinClass": "business",
  "maxStops": "nonstop",
  "returnOptionsTop": 3,
  "includePriceInsights": true
}

Example: cheapest economy fares to Tokyo

{
  "originAirport": "SFO",
  "destinationAirport": "HND",
  "outboundDate": "2027-03-10",
  "cabinClass": "economy",
  "sortBy": "cheapest",
  "maxResults": 25
}

Example: price calendar for the next two months

{
  "mode": "calendar",
  "originAirport": "NYC",
  "destinationAirport": "LON",
  "outboundDate": "2026-12-20",
  "priceGraphDays": 61
}

Example: several routes in one run

{
  "mode": "search",
  "currency": "EUR",
  "country": "DE",
  "searches": [
    {"originAirport": "FRA", "destinationAirport": "JFK", "outboundDate": "2026-12-01"},
    {"originAirport": "AMS", "destinationAirport": "SIN", "outboundDate": "2026-12-15", "returnDate": "2027-01-05"}
  ]
}

Use cases

  • Fare monitoring — schedule a route and compare today's fares with yesterday's
  • Corporate travel — benchmark business-class fares across carriers on a fixed route
  • Travel deals — sort by cheapest and filter to nonstop or low-emission options
  • Fare calendars — collect a daily price curve before choosing travel dates
  • Route analysis — compare airlines, aircraft, layovers and CO2 on the same city pair
  • Multi-market research — query the same route in different currencies and countries

Limitations

  • Multi-city trips are not available from Google's public search page. Run each leg as a separate one-way search; those are separate tickets, not a single through-fare.
  • Comma-separated airport lists are not combined. Only the first code in a field is searched; add one searches entry per airport or city.
  • The booking-options panel (sellers, fare brands, bag fees) is not included. Google loads it separately after the itinerary page. Open bookingUrl to see it on Google Flights.
  • The public page returns a subset of Google's full board — observed 9–65 itineraries per search in our 2026-10 tests, varying by route (65 on SYD–MEL). maxResults caps the output; the full board may still be larger.
  • Explore destinations and the date-grid calendar are not included; both are loaded separately by Google.
  • Premium and first-class searches sometimes have no price insight, and Google occasionally lists a schedule without a fare. Those unpriced rows are skipped.
  • Prices are a snapshot and are not guaranteed at booking time.

FAQ

Do I need cookies, a Google account, or an API key? No. The actor reads public search pages without signing in.

Do I need to configure a proxy? No. The actor chooses a working connection to Google Flights automatically. Just fill in the input and run it.

Why does a round-trip record show only the outbound flight? Google lists round trips as outbound choices priced for the whole trip. Set returnOptionsTop to attach the actual return flights for the top outbound options.

Where are the airline sellers and baggage fees? They are behind Google's separate booking panel. The actor gives you a bookingUrl that opens the exact itinerary on Google Flights, where the sellers and bag rules are shown.

Why do I get fewer rows than on Google Flights? The public results page lists a subset of the full board; maxResults caps the actor's output further. This is a source limit, not a filter error.

How fresh are the prices? They are read when the run executes. Google prices change frequently and are advisory until purchase.

Can I search several airports or cities at once? Use the searches list. Each entry takes one airport or city code per side; comma-separated codes in one field are not combined (only the first is searched).

How does the price calendar work? Calendar mode searches each departure date separately and keeps the cheapest matching fare. Each date starts at outboundDate and moves forward, priceGraphDays sets the window, and maxResults also caps the number of days. The rows are real future fares, not past price estimates.

What happens if I leave the departure date empty? The actor uses 30 days from today in UTC and logs the date it chose, so saved tasks keep producing results without a fixed date. You can always set an exact date.

Is this affiliated with Google? No. This is an independent third-party actor that reads publicly available Google Flights search results.

Python quickstart

Use a schema-derived input and the Python standard library to start a run. An Apify account and token are required for execution.

Open the step-by-step Python guide →

Source build JMe14jW0FAs170tz8. Documentation is regenerated from the default published build; private drafts are not included.