Bowmark AIdocs

Discount Tire

America's largest independent tire and wheel retailer — which tires and wheels actually fit a given vehicle, what they cost, whether they are in stock…

America's largest independent tire and wheel retailer — which tires and wheels actually fit a given vehicle, what they cost, whether they are in stock near a ZIP, when a store can install them, and the rebates running on them. Three functions are built: getProduct reads one tire or wheel by its sku (name, brand, size, product type, price, product URL), checkStock answers whether a specific tire or wheel is gettable near a ZIP, store or coordinate, and on what date, and searchTiresBySize searches the tires Discount Tire sells in a given size (or staggered pair) with prices, ratings and the site's pagination. The other twelve are declared stubs.

Domain: discounttire.com

Also known as: Discount Tire, discounttire.com, America's Tire, americastire.com

Call it directly

bowmark.providers.discounttire.getProduct(idOrUrl: string): Promise<DiscounttireProduct>
bowmark.providers.discounttire.checkStock(idOrUrl: string, location: { zip: string } | { storeCode: string } | { latitude: number; longitude: number }): Promise<DiscounttireStock>
bowmark.providers.discounttire.searchTiresBySize(args: { front: { diameter: string; width: string; aspectRatio: string }; rear?: { diameter: string; width: string; aspectRatio: string }; location: { zip: string } | { storeCode: string } | { latitude: number; longitude: number }; pageNumber: number; pageSize: number }): Promise<DiscounttireTireSizeSearch>

Functions

FunctionWhat it does
getProductReads one tire or wheel product by its sku — name, brand, size, product type, product URL, and price (value and formatted string). Takes the numeric sku the site's product URLs end in…
checkStockAnswers whether one specific tire or wheel is actually gettable near a place, and when — the site's own availability sentence for the store it resolves to ("Available as soon as Wednesday,…
searchTiresBySizeSearches the tires Discount Tire sells in a given size (or staggered pair — front and a different rear) and returns what is in stock near a place with prices and star ratings.

Types

interface discounttireRow {
  id: string;
}

/** Where the answer is for. No default: the only location the site would infer
 *  is our own exit IP's, which is not the caller's. */
type DiscounttireLocation =
  | { storeCode: string }
  | { zip: string }
  | { latitude: number; longitude: number };

/** One tire or wheel, as the site's own product read returns it. Price is
 *  global across stores (verified at three AZ stores on the same sku on the
 *  same day, 2026-08-07), so `getProduct` takes no storeCode even though
 *  productByCode itself requires one. */
interface DiscounttireProduct {
  code: string;
  name: string | null;
  brand: string | null;
  size: string | null;
  productType: string | null;
  url: string | null;
  price: { value: number | null; formatted: string | null } | null;
  source: string;
}

interface DiscounttireStoreRef {
  code: string;
  name: string | null;
  streetAddress: string | null;
  city: string | null;
  state: string | null;
  postalCode: string | null;
  phone: string | null;
  /** Miles from the point asked about; null when the store was named by code. */
  distanceMiles: number | null;
}

interface DiscounttireAvailability {
  /** The site's own sentence, verbatim — "Available as soon as Wednesday, Aug. 5
   *  at My Store", "Product has been discontinued". The field to show a person. */
  message: string | null;
  /** The site's own ordering over those messages, lower is better. Passed
   *  through for comparison, never interpreted. */
  messageRank: number | null;
  /** ISO date the site promises it AT this store; null when it promises none. */
  availableDate: string | null;
  daysOut: number | null;
  /** "On the shelf right now" — measured 0 even on same-day-available products,
   *  so read `message`/`availableDate` for "can I get it". */
  storeQuantity: number | null;
  /** Varies by REGION rather than by store. */
  regionalQuantity: number | null;
}

interface DiscounttireStock {
  product: {
    code: string;
    name: string | null;
    brand: string | null;
    size: string | null;
    productType: string | null;
    url: string | null;
    price: { value: number | null; formatted: string | null } | null;
  };
  /** The store the answer is ABOUT — read it back rather than assuming the
   *  argument was honoured: a zip resolves to whichever store is nearest. */
  store: DiscounttireStoreRef;
  availability: DiscounttireAvailability;
  /** The site's own pick of a better nearby store, when it names one. */
  alsoAt: {
    storeCode: string;
    streetAddress: string | null;
    availability: DiscounttireAvailability;
  } | null;
  /** Other stores around the resolved point. Availability is regional, so these
   *  are where to GO, not separate stock positions. */
  nearbyStores: DiscounttireStoreRef[];
  source: string;
}

/** A tire size stamped on the sidewall — `225/45R17`. Strings, because the
 *  site's schema declares every field as `String!`. */
type TireSize = {
  diameter: string;
  width: string;
  aspectRatio: string;
};

/** One tire product row from the size search. Same shape the site's own
 *  `getProduct` reads back, except price + sku + name + brand, plus the
 *  site's own star rating. */
interface DiscounttireTireResult {
  code: string;
  name: string | null;
  brand: string | null;
  size: string | null;
  productType: string | null;
  url: string | null;
  price: { value: number | null; formatted: string | null } | null;
  /** `0.0`-`5.0`; null when the line has no reviews. */
  averageRating: number | null;
}

/** What `searchTiresBySize` returns. */
interface DiscounttireTireSizeSearch {
  /** The storeCode the operation was anchored to (a zip resolves to the
   *  site's nearest store). */
  storeCode: string;
  pagination: {
    currentPage: number | null;
    numberOfPages: number | null;
    pageSize: number | null;
    totalNumberOfResults: number | null;
  };
  /** The site's facet names — `Brands`, `Aspect Ratio`, `Price Range`, … */
  facets: string[];
  results: DiscounttireTireResult[];
  source: string;
}