Bowmark AIdocs

Google Flights

Google Flights (flights.google.com) — itinerary search plus the per-result booking panel, read from each row's ARIA label.

Domain: flights.google.com

Also known as: Google Flights, Google, google_flights

Prefer the capability

bowmark.flights covers this provider and routes around it when it is having a bad day. Reach for this page when you need flights.google.com specifically.

Call it directly

bowmark.providers.google_flights.search(query: GoogleFlightQuery): Promise<GoogleFlight[]>
bowmark.providers.google_flights.getBookingOptions(query: GoogleFlightQuery, flightId: string): Promise<GoogleBookingOption[]>
bowmark.providers.google_flights.getPriceGraph(query: GoogleFlightQuery): Promise<GooglePriceGraph>

Functions

FunctionWhat it does
searchRuns the itinerary search and reads the rendered result rows.
getBookingOptionsSelects one result from the same search and reads its booking panel — who actually sells the fare, at what fare type and price.
getPriceGraphAnswers 'when is this route cheapest' in ONE call: the price for every departure date across roughly two months around the requested one, plus which date wins.

Types

interface GoogleFlightQuery {
  from: string;            // IATA or city, e.g. "SFO"
  to: string;
  depart: string;          // YYYY-MM-DD
  return?: string;         // omit for one-way
  cabin?: "economy" | "premium" | "business" | "first";
  stops?: "any" | "nonstop" | "1";
  passengers?: number;
}

// Google Flights' OWN shapes — not the `flights` capability contract.
interface GoogleFlight {
  id: string;
  price: number | null;
  currency: string;
  tripType: "round trip" | "one way";
  airlines: string[];
  stops: number;
  depart: string;
  arrive: string;
  durationMinutes: number | null;
  url?: string;
}

interface GoogleBookingOption {
  provider: string;        // the OTA or airline selling it
  fareType: string;
  price: number | null;
  currency: string;
  deepLink: string | null; // null for JS-driven rows — see the caveat below
}

// One column of the price graph.
interface GooglePricePoint {
  date: string;             // departure date, "2026-08-22"
  returnDate: string | null;// the return date priced WITH it; null for one-way.
                            // Google slides a fixed-length trip, so a round-trip
                            // column is a whole trip, not just a departure date.
  price: number | null;     // cheapest total for that date
  currency: string;
}

interface GooglePriceGraph {
  from: string;
  to: string;
  tripType: "round trip" | "one way";
  stayNights: number | null;  // nights held constant across the window; null for
                              // one-way, or if the columns disagree
  rangeStart: string;         // the window GOOGLE chose (≈ depart-7 … depart+52).
  rangeEnd: string;           // It is not selectable — see the note below.
  points: GooglePricePoint[]; // ascending by departure date
  cheapest: GooglePricePoint | null;  // ties resolve to the earliest date
  url: string;
  checkedAt: string;
}

Examples

const rows = await bowmark.providers.google_flights.search({ from: "SFO", to: "JFK", depart: "2026-09-01" });
const cheapest = rows.sort((a, b) => (a.price ?? 1e9) - (b.price ?? 1e9))[0];
return await bowmark.providers.google_flights.getBookingOptions(
  { from: "SFO", to: "JFK", depart: "2026-09-01" },
  cheapest.id,
);
flightsFlights — the capability this provider backs.
aaAlso backs the same capability.
cheapflightsAlso backs the same capability.
kayakAlso backs the same capability.
momondoAlso backs the same capability.