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
| Function | What it does |
|---|---|
listFloorplans | Lists every floor-plan type Heritage Westminster currently publishes (studio through 3-bedroom, plus the townhome), each with its own id and active flag. |
getFloorplan | Reads 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 };