Bowmark AIdocs

Price a school-supply list across Target and Walmart

Given a list of item queries (a school supply list), fans out to Target and Walmart search, picks the cheapest in-stock match per item per retailer, and…

Given a list of item queries (a school supply list), fans out to Target and Walmart search, picks the cheapest in-stock match per item per retailer, and returns each retailer's basket total plus which items neither retailer has in stock right now — kept apart from the items a retailer stocks but would not price, and from the searches that never answered.

Also known as: back to school shopping, back-to-school shopping list, school supply list price, school shopping basket, price a shopping list, compare school supplies target walmart

Call it

bowmark.school_shopping_basket.priceList(args: { items: string[] }): Promise<SchoolShoppingBasket>

Functions

FunctionWhat it does
priceListPrices a multi-item shopping list at Target and Walmart, one basket total per retailer.

Types

interface BasketItemMatch {
  query: string
  title: string
  url: string
  price: { amount: number; currency: string }   // integer minor units
}
interface RetailerBasket {
  total: { amount: number; currency: string } | null   // sums matched only — a partial
                                                       // sum whenever unpriced, unmatched
                                                       // or incomplete is non-empty
  matched: BasketItemMatch[]
  unavailable: string[]   // this retailer ANSWERED with no in-stock row at all —
                          // a real stockout
  unmatched: string[]     // this retailer answered with in-stock rows, none identifiable
                          // as the thing asked for — NOT out of stock; ask more
                          // specifically, or read their search page. Not in total
  unpriced: string[]      // this retailer HAS it in stock and rendered no price — NOT
                          // out of stock; go read the price on the page. Not in total
  incomplete: string[]    // this retailer's search never answered — NOT out of stock,
                          // nothing was learned; retry with fewer items or more time
}
interface SchoolShoppingBasket {
  retailers: { target: RetailerBasket; walmart: RetailerBasket }
  warnings: string[]
}
type CallOptions = {
  timeoutMs?: number   // per-provider budget in ms, default 30000, clamped to 1000-55000.
                       // A provider slower than this is DROPPED from the results and
                       // NAMED in warnings — never silently absent
}

Examples

// A real back-to-school list — run this as-is to see genuine live baskets.
const basket = await bowmark.school_shopping_basket.priceList({
  items: [
    "24 pack crayola crayons",
    "TI-84 Plus CE calculator",
    "5 subject wide ruled notebook",
  ],
});
// unavailable is the ONLY stock fact. unpriced means they HAVE it and showed no
// price; unmatched means they answered and we could not identify it; incomplete
// means the search never answered. Never report any of those three as out of
// stock — open the product page, ask more specifically, or retry.
for (const [name, b] of Object.entries(basket.retailers)) {
  log(`${name}: ${b.total?.amount ?? "n/a"} cents, ${b.unavailable.length} not stocked, ${b.unmatched.length} unidentified, ${b.unpriced.length} unpriced, ${b.incomplete.length} unread`);
}
return basket;

Providers behind it

Provider
targetTarget
walmartWalmart