Bowmark AIdocs

Sunlighten

Sunlighten's own 'Find My Sauna' quiz match (wellness goals + room capacity -> the real recommended model) plus that model's real, currently-quoted price…

Sunlighten's own 'Find My Sauna' quiz match (wellness goals + room capacity -> the real recommended model) plus that model's real, currently-quoted price off the public storefront — read directly from the site's own published data, no browser.

Domain: sunlighten.com

Also known as: Sunlighten, sunlighten, SUNLIGHTEN

Call it directly

bowmark.providers.sunlighten.matchSauna(input: { wellnessGoals: string[]; capacity: number }): Promise<SunlightenModel[]>
bowmark.providers.sunlighten.getModelPricing(input: { model: string }): Promise<SunlightenPriceListing[]>

Functions

FunctionWhat it does
matchSaunaRuns Sunlighten's own 'Find My Sauna' quiz match — the same wellness-goal + room-capacity filter the site's quiz JS runs client-side after submit — against the site's own build-time product…
getModelPricingReads the real, currently-quoted price for a Sunlighten sauna model off the public Shopify storefront (shop-us.sunlighten.com) — the marketing site's own '/get-pricing' page is a lead-gen…

Types

interface SunlightenModel {
  /** The marketing-site page slug, e.g. "amplify-ii". Not a Shopify handle — see getModelPricing. */
  slug: string;
  name: string;
  description: string | null;
  /** The site's own wellness-goal codenames this model is tagged with. */
  wellnessTags: string[];
  wellnessTagNames: string[];
  /** e.g. "n2_person". Null on a page the CMS never gave a capacity (never matches a real quiz answer). */
  capacityCodename: string | null;
  /** e.g. "2-Person". */
  capacityLabel: string | null;
  /** The live marketing page for this model. */
  url: string;
}
interface SunlightenPriceListing {
  /** The Shopify handle — a DIFFERENT identifier from SunlightenModel.slug (the marketing page slug). */
  handle: string;
  /** The storefront's own product title, e.g. "mPulse Believe Smart Sauna - Basswood" (one row per wood finish). */
  title: string;
  /** The lowest variant price on this listing, as the store publishes it (decimal string, dollars). Null if the listing carries no parseable price. */
  price: string | null;
  available: boolean;
  url: string;
}

Examples

// what does the Find My Sauna quiz recommend for detox + sleep, 3-person?
const models = await bowmark.providers.sunlighten.matchSauna({ wellnessGoals: ["Detoxification", "Sleep"], capacity: 3 });
log(models.map(m => m.name).join(", "));
// and what does it actually cost?
const models = await bowmark.providers.sunlighten.matchSauna({ wellnessGoals: ["Detoxification"], capacity: 2 });
for (const m of models) {
  const listings = await bowmark.providers.sunlighten.getModelPricing({ model: m.name });
  log(`${m.name}: ${listings.map(l => `${l.title} $${l.price}`).join(" / ") || "no live listing found"}`);
}