Bowmark AIdocs

Heatherwood — Heritage Westminster

Reads Heritage Westminster's (a Heatherwood property) own floor-plan search: every floor-plan type it currently publishes, and — for one type — its real…

Reads Heritage Westminster's (a Heatherwood property) own floor-plan search: every floor-plan type it currently publishes, and — for one type — its real available units right now, each with real rent, real move-in date and a direct Apply Now handoff into Yardi's SecureCafe leasing portal.

Domain: heatherwood.com

Also known as: Heatherwood, Heritage Westminster, heatherwood.com

Call it directly

bowmark.providers.heatherwood.listFloorplans(): Promise<HeatherwoodFloorplanSummary[]>
bowmark.providers.heatherwood.getFloorplan(id: string): Promise<HeatherwoodFloorplanDetail>

Functions

FunctionWhat it does
listFloorplansLists every floor-plan type Heritage Westminster currently publishes (studio through 3-bedroom, plus the townhome), each with its own id and active flag.
getFloorplanReads one floor-plan type's own page: its real bed/bath/sqft spec and every currently available UNIT under it — real rent, real move-in date, real unit number and a direct Apply Now handoff…

Types

// Heatherwood's OWN shapes — not a capability contract.

interface HeatherwoodFloorplanSummary {
  id: string;             // the key getFloorplan takes
  name: string;            // e.g. "3 Bed 2 Bath"
  isActive: boolean;
  tourUrl: string | null;  // a 3D walkthrough, when the site publishes one
}

interface HeatherwoodUnit {
  unitName: string;                  // e.g. "2145"
  price: number;                     // monthly rent, USD
  available: boolean;
  availabilityStarts: string | null; // e.g. "01/15/2027"
  applyUrl: string;                  // real Yardi SecureCafe Apply Now URL, this unit
}

interface HeatherwoodFloorplanDetail {
  id: string;
  name: string;
  description: string | null;
  beds: number;
  baths: number;
  sqft: number | null;
  image: string | null;
  units: HeatherwoodUnit[];
}

Examples

// The query ANGLE found ChatGPT unable to answer for real: current floor
// plans and, for one of them, the actual available units and rent.
const plans = await bowmark.providers.heatherwood.listFloorplans();
const threeBed = plans.find((p) => p.name.includes("3 Bed"));
const detail = await bowmark.providers.heatherwood.getFloorplan(threeBed.id);
return detail.units.filter((u) => u.available);
// The real next step ChatGPT alone could only replace with "share your
// full application in chat" — the actual Apply Now handoff, per unit.
const detail = await bowmark.providers.heatherwood.getFloorplan("6117790");
const cheapest = detail.units.filter((u) => u.available).sort((a, b) => a.price - b.price)[0];
return { unit: cheapest.unitName, price: cheapest.price, applyUrl: cheapest.applyUrl };