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
| Function | What it does |
|---|---|
checkPersonalization | Reads 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.