Bowmark AIdocs

GEICO

Quotes and reads across GEICO's published catalogue — the vehicle lines it underwrites itself (auto, motorcycle, ATV, RV, boat, scooter, classic and…

Quotes and reads across GEICO's published catalogue — the vehicle lines it underwrites itself (auto, motorcycle, ATV, RV, boat, scooter, classic and Mexico auto, commercial auto), the property, specialty and small-business lines GEICO Insurance Agency places with third-party carriers, its local agent directory, its claim-status lookup, and the register of which partner actually writes each brokered line.

Domain: geico.com

Also known as: GEICO, Geico, geico.com, Government Employees Insurance Company, GEICO Insurance Agency

Call it directly

bowmark.providers.geico.getRentersQuote(args: RentersQuoteArgs): Promise<geicoRentersQuote>
bowmark.providers.geico.listDiscounts(args: GeicoDiscountsArgs): Promise<GeicoDiscountList>
bowmark.providers.geico.listPartnerCompanies(args?: GeicoPartnerCompaniesArgs): Promise<GeicoPartnerCompanyList>
bowmark.providers.geico.findAgent(query: GeicoAgentQuery, limit?: number): Promise<GeicoAgentSearch>

Functions

FunctionWhat it does
getRentersQuoteWhat GEICO charges to insure the contents of one rented home: the amount due today and the full term premium, the personal-property limit, deductible and liability limit the rate was struck…
listDiscountsThe discounts GEICO publishes for one line of business — each discount's name, GEICO's own description of what qualifies for it, and the saving it is advertised at where the site states one.
listPartnerCompaniesWhich company actually underwrites each of the 24 lines GEICO Insurance Agency BROKERS rather than writes itself — the read that tells an agent whose paper a "GEICO" home, life, pet, condo…
findAgentThe GEICO local agents near a US location — each office's display name, the agent's own first and last name, street address, phone, opening hours, distance from the search centre and a link…

Types

interface geicoRow {
  /** US ZIP code — GEICO rates and routes every one of these functions by it. */
  zip: string;
}

interface RentersQuoteArgs {
  /** The rented property being insured. */
  address: {
    street: string;
    unit?: string;
    city: string;
    state: string;
    zip: string;
  };
  /** The CALLER's own identity. GEICO's first card demands a name and a date of
   * birth before it will route a quote, so this is required rather than optional
   * — a provider that can quote without one is quoting a stranger. */
  identity: QuoteIdentity;
  /** Does the lease require the tenant to carry renters insurance? Asked before
   * rating and it can move the premium, so it is the caller's to state. */
  leaseRequiresInsurance?: boolean;
  /** When cover should start, `YYYY-MM-DD`. OPTIONAL because the step sequence
   * is A/B tested per session — some ask for it and some do not — and it falls
   * back to the card's own prefilled value and then to today. */
  coverageStartDate?: string;
}

/** Who the quote is for, exactly as they would type it into the site's own form.
 * Never defaulted, never read from the environment, never held by us. */
interface QuoteIdentity {
  firstName: string;
  lastName: string;
  /** ISO `YYYY-MM-DD`. Carriers rate on the DATE, never on an age you computed. */
  dob: string;
  email: string;
  /** E.164 preferred. A quote form's purpose is generating a CALLABLE lead, so
   * this number is one a stranger can reach. */
  phone: string;
}

interface geicoRentersQuote {
  /** US ZIP code the rate was struck for. */
  zip: string;
  /** The address as GEICO normalized it, which is not always what was asked for. */
  address: string;
  city: string | null;
  state: string | null;
  /** Amount due at purchase — the headline figure the site leads with. Null is
   * never a zero: it means the card did not print one. */
  dueToday: number | null;
  /** Total premium for the whole policy term. */
  termPremium: number | null;
  /** Term the `termPremium` covers, in months. 12 on every capture so far, and
   * still read from the page rather than assumed. */
  termMonths: number | null;
  /** The coverage the premium was struck at. Read it before comparing two
   * numbers: $190 at a $500 deductible and $190 at a $100 deductible are
   * different products. */
  coverage: {
    personalPropertyLimit: number | null;
    deductible: number | null;
    liabilityLimit: number | null;
    waterBackup: boolean | null;
  };
  /** What else GEICO offered at this address, so a caller can re-ask rather than
   * guess which limits exist. */
  options: {
    personalPropertyLimits: number[];
    deductibles: number[];
    liabilityLimits: number[];
  };
  /** WHO actually writes the policy. GEICO BROKERS its property lines rather than
   * underwriting them, so this is not decoration: the premium above is this
   * carrier's, returned under a `geico` namespace. The legal entity alone, read
   * from the card's own disclosure copy — which is what joins to the regulators'
   * register via `bowmark.insurance.searchCarriers`. */
  underwriter: string | null;
  /** The quote's own reference, for a caller who wants to resume it on the site. */
  quoteNumber: string | null;
}

interface GeicoDiscountsArgs {
  /** Which published category to read. */
  line: "auto" | "motorcycle" | "multi-policy" | "organization-member" | "military"
      | "federal-employee" | "student" | "mature-driver" | "defensive-driver";
}

interface GeicoDiscountList {
  line: string;
  /** The page actually read, resolved from the hub's own links at call time. */
  sourceUrl: string;
  discounts: GeicoDiscount[];
  /** The page's verbatim state-availability notice. Read it before treating any
   * row as an entitlement: the list is national, availability is not. */
  disclaimer: string | null;
  /** GEICO's own "Information current as of <month year>" stamp, where printed. */
  informationCurrentAsOf: string | null;
}

interface GeicoDiscount {
  name: string;
  /** GEICO's own description of what qualifies, verbatim. */
  qualifies: string;
  /** Null where GEICO publishes no figure — which is the majority. Never 0. */
  advertisedSaving: { text: string; percent: number; basis: "maximum" | "flat" } | null;
  /** True where THIS discount's own copy qualifies it by state. */
  stateDependent: boolean;
  /** The section it was listed under, or null on a flat list. */
  category: string | null;
}

interface GeicoPartnerCompaniesArgs {
  /** Narrow to one published category, e.g. "Renters Insurance" (case-insensitive). Omit for every line. */
  line?: string;
}

interface GeicoPartnerCompany {
  /** GEICO's own heading, verbatim, e.g. "Homeowners Insurance". Never carries
   * GEICO's own name: only the lines GEICO BROKERS are on this page at all. */
  line: string;
  /** The placed brand/agency's name, as the page prints it. */
  name: string;
  /** Where the directory links this placement — usually its own site. Null if unlinked. */
  url: string | null;
  /** True where GEICO's own asterisk marks this as an AFFILIATED (Berkshire Hathaway) company. */
  affiliated: boolean;
  /** The underwriting entities named under this placement. Empty when the
   * placement name IS the underwriting company. */
  underwrittenBy: string[];
}

interface GeicoPartnerCompanyList {
  companies: GeicoPartnerCompany[];
  /** GEICO's own legend for what this list means and what the asterisk marks, verbatim. */
  legend: string;
  /** GEICO's own privacy/off-site notice, verbatim. */
  disclaimer: string;
  sourceUrl: string;
}

interface GeicoAgentQuery {
  /** 5-digit US ZIP code. Either this or `location` is required. */
  zip?: string;
  /** Free-text place — "Chicago, IL", a street address, a city. GEICO geocodes it,
   * so this is as capable as `zip` rather than a fallback. Either this or `zip`
   * is required; passing both prefers `zip`. */
  location?: string;
  /** 25, 50 or 100 — the only radii GEICO's own form offers. Defaults to 50. */
  radiusMiles?: 25 | 50 | 100;
  /** Narrow to the offices GEICO staffs in this language. Defaults to "english". */
  language?: "english" | "spanish";
  /** Also read each RETURNED agent's own page for `details`. One extra page GET
   * per agent returned, so bound it with `limit`. Defaults to false. */
  details?: boolean;
}

interface GeicoAgentSearch {
  agents: GeicoAgent[];
  /** Where GEICO geocoded the query TO. Read this before treating an empty
   * `agents` as "nobody is near me": the locator never rejects an unrecognised
   * place, it geocodes loosely and searches wherever it lands. */
  searchedFrom: { latitude: number; longitude: number };
  /** The radius the search actually ran at, in miles. */
  radiusMiles: number;
  sourceUrl: string;
  /** One line per agent whose DETAIL page refused us — only ever non-empty when
   * `details: true` was passed. Read it before treating a null `details` as
   * "this agent publishes no page": the other cause is that their page would
   * not load, and only that one is a fact about us. */
  warnings: string[];
}

interface GeicoAgent {
  /** The office's own display name, e.g. "Local GEICO Agent - Canton". */
  displayName: string;
  /** The agent's name, where the office is staffed by a named agent. */
  firstName: string | null;
  lastName: string | null;
  /** GEICO's own classification: "GFR" is an exclusive local office, "Agency" an
   * independent agency. Verbatim, because a caller choosing who to call cares. */
  configType: string | null;
  locationType: string | null;
  formattedAddress: string;
  city: string | null;
  /** 10 digits, unformatted, as GEICO returns it. */
  phone: string | null;
  /** Miles from `searchedFrom`, not from any address you typed. GEICO's figure. */
  distanceMiles: number | null;
  latitude: number | null;
  longitude: number | null;
  /** Opening hours, one line per day. Empty where the office publishes none. */
  hours: string[];
  /** This agent's own page on geico.com, where one exists. */
  url: string | null;
  /** GEICO's internal office codes — what attributes a quote to THIS office. */
  soa: string | null;
  sob: string | null;
  languages: string[];
  /** Only when `details: true` was asked for AND the agent page loaded. */
  details: GeicoAgentDetails | null;
}

interface GeicoAgentDetails {
  /** The lines this agent is appointed to write, as their page names them,
   * e.g. ["Auto Insurance", "Homeowners Insurance"]. */
  products: string[];
  /** The independent agency that owns the office, where the page names one.
   * Null on a company-owned office. */
  agency: string | null;
  email: string | null;
  /** The states the page says this agent is licensed to serve. */
  licensedStates: string[];
  sourceUrl: string;
}