What "functioning by close" actually means
Everything is built and switched on by Aug 31. But two halves behave differently, and it's worth being straight about it:
Live at close (acquisition engine)
- Listings live on Apartments.com / Zillow
- AI speed-to-lead agent answering in <5 min
- Lead capture + logging (to the outbox, not into Entrata: writes are deferred under rule 2)
- Listing scorecard running
- Website /rentals + /map live
These work on day one. A vacant unit can lease the first hour.
On at close, ramps after (retention + data)
- Recognition engine (needs residents + Welcome Profiles)
- Reviews velocity (needs happy residents to ask)
- Retargeting audiences (need traffic to build)
- KPI dashboard (needs leads/leases to measure)
Switched on at close, but they accumulate value as residents flow through. Nothing to recognize on day one.
config.js doesn't read the API key, and the live branches in the client are stubs. That's deliberate, Brent's call to finish the design before writing the client, and it's what bought the verified rate limits, the PII rules and the deny-by-default allowlist now sitting in the API reference and system design. Read the "live at close" column above as a build commitment, not a status.The plan, by owner
Weeks are Monday-dated. The red line is the Aug 31 close. Bars move as dependencies clear, the dependency notes show what's waiting on what.
Who owns what (the short version)
| Owner | On the hook for | First move (week 1) |
|---|---|---|
| Liberty / LAG | Everything property-side: Entrata API request, ILS feed, Apartments.com account, unit data + pricing, photographer access, lead-ownership policy, move-in + maintenance workflow | Entrata API access: DONE 07-31, widened 08-03. Next from Liberty: add Aspen + Summerset to the key, and answer the per-property apply link (asked 08-03) |
| Entrata / CoStar | Provision the API user + sign the agreement + whitelist our IP; wire the Apartments.com→Entrata lead feed | API user + agreement + whitelist: DONE 07-31. CoStar lead feed still to wire |
| Photographer | Photos, video, Matterport 3D, drone, per floor-plan type | Get booked + scheduled once access is set |
| NPI / Brent | Builds + runs all systems: website, GHL, AI agent, scorecard, Entrata integration, reviews, recognition engine, retargeting, dashboard, all resident materials | GHL workflows + website + agent build start |
Dependencies that gate the date
sendWorkOrders for the properties NPI owns, and sendLeaseActivities so Foothold's resident touches land in Entrata instead of Liberty's inbox. Those last two go out in one email, not two. Neither grant authorizes a call: the writes still need the per-property sign-off.getFloorPlans is authoritative on square footage, getPropertyUnits carries per-term rents), which is how the Owyhee before-picture was built. For Aspen and Summerset it's still a manual hand-off until they're on the key.The scorecard we track
Industry standard vs. our goal. The Overview shows the six hero KPIs; this is the fuller diagnostic set the whole system exists to move.
Sales & acquisition · Foothold owns
| KPI | Industry standard | Our goal |
|---|---|---|
| Speed-to-lead (first response) | Hours (same / next business day) | Under 5 minutes, 24/7/365: answer questions, send the apply link, book tours |
| Applications-to-tours ratio | ~0.4/tour (industry tour→app ≈ 40%) | ≥1.0 by mo 6 → 3:1 (a high ratio = pent-up demand) |
| Lead volume | Optimized for conversion % | Intentionally maximized for brand awareness + referrals |
| Online rating (Google / ILS) | ~3.5–4.2 ★ (avg ~3.9) | 4.5 ★ and climbing (lifts ILS rank + CTR, the funnel lever) |
| Days-on-market / vacancy days | market | Minimize (the pre-leasing turn engine) |
| Cost per lease, by source | n/a | The allocation metric, where the spend goes |
Operations & resident · Liberty runs it, we watch the aggregate
| KPI | Industry standard | Our goal |
|---|---|---|
| Renewal / retention | ~57% (Class C; top quartile 70–80%) | 70% |
| Quarterly satisfaction pulse (the red flag) | n/a | All-resident survey, 2 questions (a score + "anything to fix?"), drawing for response. This is our data-driven signal on management quality. |
| Review velocity | n/a | Steady new reviews/mo, the continuous pulse |
| Maintenance: first contact | 24–48 hrs | Resident contacted within 24 hrs (non-emergency) / 4 hrs (emergency). On-site scheduling SLA is Phase 2 (Liberty not committing yet). ⚠️ This is a FIRST CONTACT target, not a resolution target. Don't read it as one against the row below. |
| Maintenance: responsiveness (aggregate resolution time) | n/a | DECIDED 2026-08-10 (Brent): build it, and build it as an AGGREGATE. "If that KPI is genuinely good we can use it in marketing, and if it is bad then it is an accountability metric for LAG." Aggregate only, never per ticket, which affirms "watch the scoreboard, not the plays" rather than crossing it: measuring the aggregate isn't policing, chasing one ticket still is. ⚠️ Dual-purpose is a constraint, not colour: one definition, written down once, computed the same way every time, never cherry-picked by window. Computed read-only from getWorkOrders (completedOn observed, createdOn in the spec, plus the four date filters), no new permission and nothing to ask Liberty for. ⚠️ No target is set yet, and whether it joins the six hero KPIs on the Overview is undecided. See the lead & comms spec §5. |
| Occupancy | ~95% physical | 96%+ physical (95%+ economic) |
The outcome
| KPI | Industry standard | Our goal |
|---|---|---|
| Brand-rent premium / NOI lift | n/a (supply-side value-add only) | +6% (target 5–8%, the demand-side lift) |
Dropped resident NPS, the quarterly satisfaction pulse replaces it as the management red flag. Maintenance SLA is parked at phase 2 pending Liberty's commitment. ⚠️ That parked SLA is a first-contact commitment from Liberty. The aggregate responsiveness row added 2026-08-10 is a separate, read-only measurement of our own and is not gated on it.
Targets unchanged. Measurement sources, as of 2026-08-10: renewals, occupancy, lease expirations and loss-to-lease all compute from getLeases against market rent from getFloorPlans; lead volume, source mix and speed-to-lead from getLeads (createdOnDateTime is the clock, and paid-search attribution already exists in the PMS, don't build a parallel one); maintenance responsiveness and turn progress from getWorkOrders, read-only. Filter out maintenanceRequestFrom: "Entrata PaaS" system records and collapse parent/child before counting anything. Three more cautions on the responsiveness number specifically: don't segment on maintenancePriority (780 of 785 tickets are Medium, no signal), use maintenanceProblem and maintenanceLocation instead; ⚠️ createdOn is in the vendor spec but has never been seen in a live response, so verify it comes back populated before building the metric on it, because if it's empty the metric needs a different clock; and consider reporting in-hours separately from out-of-hours, since office hours are M-F 9 to 5 with no weekend coverage, so roughly 76% of the week has no staff and a raw aggregate hides that. Budget-versus-actual is not available from Entrata, so NOI-vs-budget sources budget from NPI's own model. All of it is measurable only where the property is on the key, which today means Owyhee Park.
Resident-facing deliverables
Drafts of the physical materials. Open each, they're print-ready. Feedback to owner@footholdboise.com.
Service-call card
Left after every work order. Captures name + unit (not anonymous), rates the fix, and points to the review page. Brent reads every one.
Open mockup →Share-your-experience page
The compliant review funnel: review or tell-us-privately, both offered equally (no sentiment gating, per Google + FTC).
Open mockup →New-tenant packet
The move-in welcome: the promise, how maintenance works (+ SLA), the pet info form, referral program, and the essentials.
Open mockup →Referral program + flyer
Refer a friend, you both get $250, tracked from first touch so it pays even 6–12 months later. Mechanics + flyer.
Open mockup →Pet gift
$25 Chewy gift card + note, sent ~90 days before renewal (ahead of the ~60-day renewal offer). Program spec + the note card.
Open mockup →Data status, 2026-08-05. The pet gift is no longer waiting on data: getLeases carries 34 pet records across 30 of the 52 Owyhee leases, each with the pet's name plus breed, color, gender, age and weight. 🚫 isAssistanceAnimal is a hard fair-housing exclusion from the gift and from every pet-themed message, and a missing or unparseable flag excludes the record. The birthday card has a source but not a complete one: date of birth comes only from getLeads and covers 57 of 88 current residents (65%), so the Welcome Profile is a required component covering the rest, not an optional fallback. Birthdays are viable, not solved. Every physical touch is consent-gated on postal_mail and every follow-up text on sms, read separately. See the lead & comms spec §4.
Coming next: Foothold merch (hats, cups) + the monthly drawing, and a tenure-milestone card. Same template.