Bowmark AIdocs

Check whether a product page quotes a different price to different shoppers

Given a product page's url, fetches it once per simulated shopper (desktop vs mobile, each a fresh cookie-less visit) and reports whether the price they'd…

Given a product page's url, fetches it once per simulated shopper (desktop vs mobile, each a fresh cookie-less visit) and reports whether the price they'd see differs — never geography, loyalty status or browsing history, which no session it holds can simulate.

Also known as: personalized pricing, price discrimination, dynamic pricing, same price, price steering, surveillance pricing, checkpersonalization, check personalization, officedepot.com

Call it

bowmark.pricing.checkPersonalization(url: string, personas?: PersonalizationPersona[]): Promise<PersonalizationCheck>

Functions

FunctionWhat it does
checkPersonalizationReads one product page's price once per persona (default: desktop + mobile, each a fresh cookie-less visit) and reports whether the personas saw different prices.

Types

interface PersonalizationPersona {
  label: string
  device?: "desktop" | "mobile"   // defaults to "desktop"
}
interface PersonaRead {
  persona: string
  status: number
  ok: boolean
  price: { amount: number; currency: string } | null   // integer minor units
  display: string | null   // price formatted for a reader, e.g. "$499.99" — quote THIS, not price.amount
  source: "ld+json" | "none"
  error: string | null
}
interface PersonalizationCheck {
  url: string
  requestedUrl: string
  reads: PersonaRead[]
  personalized: boolean | null   // null when fewer than 2 personas produced a comparable price
  warnings: string[]
}

Examples

// Caller named no page? CALL THIS NOW, as-is — do not ask first. Real, live product page.
const check = await bowmark.pricing.checkPersonalization("https://www.officedepot.com/a/products/6036834/HP-156-Laptop-FHD-Display-Intel/");
log(check.reads.map(r => `${r.persona}: ${r.ok ? r.display : r.error}`).join(", "));
return { personalized: check.personalized, reads: check.reads };

Providers behind it

None — this capability needs no site. It computes the answer, or reads a public API that publishes it.