Bowmark AIdocs

Promo codes & checkout discounts

Looks up currently-known promo codes and checkout discounts for a merchant by domain — the code string (when one exists), human discount text, title,…

Looks up currently-known promo codes and checkout discounts for a merchant by domain — the code string (when one exists), human discount text, title, description, whether the source verified it, and a link to redeem it. Fans out across coupon aggregators; direct API, no browser.

Also known as: promo code, promo codes, coupon, coupon code, coupon codes, discount code, discount codes, checkout discount, voucher code

Call it

bowmark.promocodes.search(domain: string, options?: CallOptions): Promise<PromoCodeSearchResult>

Functions

FunctionWhat it does
searchLooks up promo codes and checkout discounts for a merchant — bowmark.promocodes.search("getyourguide.com") — and returns normalized offers ranked verified-with-code first, then any code,…

Types

// One normalized promo code / checkout discount offer.
type PromoCode = {
  source: string            // which source this offer came from, e.g. "couponfollow"
  id: string                 // that source's own id for this offer; stable within source, not across
  code: string | null       // the code to enter at checkout; null for a deal-only listing
  discount: string | null   // human text ("5% OFF", "$10 OFF"); null when unstated
  title: string
  description: string
  verified: boolean         // the SOURCE's own verification, not Bowmark's
  exclusive: boolean
  url: string                // merchant page if known, else the source's own listing page
}
type PromoCodeSearchResult = {
  codes: PromoCode[]        // ranked: verified-with-code first, then any code, deal-only last
  warnings: string[]        // always present; empty when nothing was dropped
}

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

// is there a working promo code for GetYourGuide right now?
const { codes, warnings } = await bowmark.promocodes.search("getyourguide.com");
for (const w of warnings) log(w);
const best = codes.find(c => c.code) || null;
log(best ? `${best.code} — ${best.discount ?? best.title}` : "no working code found");
return codes.slice(0, 5);
// compare GetYourGuide and Viator's best currently-known discount
const [gyg, viator] = await Promise.all([
  bowmark.promocodes.search("getyourguide.com"),
  bowmark.promocodes.search("viator.com"),
]);
return {
  getyourguide: gyg.codes[0] ?? null,
  viator: viator.codes[0] ?? null,
};

Providers behind it

Provider
couponfollowCouponFollow