0103 — Post-Tour Re-Engagement to Improve Tour→Lease Conversion
- Status: Proposed
- Date: 2026-07-17
- Deciders: Fede (leasing engineer) — decisions listed at the end
- Related: ADR-0061 (automated prospect outreach cadence — defines but does not build "Track B — Toured, not applied") · ADR-0062 (cadence production activation) · ADR-0060 (stale-lead call-list eligibility) ·
tour-workflow.ts(post-tour application-link send) ·pm-domain-knowledge/lead-reengagement-and-followup-cadence.md
Context
We lose most prospects after they tour. This ADR quantifies that loss from production data, compares it to industry benchmarks, states exactly what the product does post-tour today, names the root causes, and proposes a re-engagement design. It does not re-open tour booking (which is healthy — see below); the entire problem is the gap between a completed tour and an application.
All numbers below labelled [PROD] come from a query I ran against propflow-prod (us-east-1), cited inline. Numbers labelled [EXT] carry an external source + year. Numbers labelled [EST] are explicitly-flagged estimates. Where a figure is not derivable from current data I write "not measurable."
The measured funnel (our real data)
Query basis. Tours enumerated via entityType-createdAt-index (GSI3PK = "Tour") → 223 Tour rows [PROD]. Prospect outcomes via scan entityType = ProspectInquiry → 228 rows [PROD], joined to tours by personId (most-advanced stage per person). Post-tour contact via Conversation (personId→conversationId) → Message rows (34,110) keyed PK = CONV#<id>, SK = MSG#<iso>#…, direction from role (tenant = inbound prospect, assistant = outbound Clara). Test traffic excluded by name (StressTest/smoke/test…) and by property. The Willows (appfolio-45) and Yale Sandbox are the E2E bench properties (140 of their 165 tour rows are cancelled — test churn) and are excluded from the conversion funnel. Camellia Apartments (1773625953462) is the only live property with meaningful tour volume.
Camellia tour booking is healthy — the loss is entirely post-tour. Camellia tour rows by schedulingState: 30 confirmed, 8 cancelled, 1 proposed [PROD]. Booking/rescheduling is not the problem.
Camellia post-tour funnel — persons with a confirmed tour that has already occurred (scheduled start < 2026-07-17), n = 24 [PROD]:
Outcome (PropFlow's own stage projection) |
Count | Rate |
|---|---|---|
Reached lease_signed |
2 | 8.3% |
Reached application-or-beyond (applied/approved/lease_signed) |
3 | 12.5% |
Stuck at a tour stage, never advanced (tour_confirmed/tour_pending/no record) |
21 | 87.5% |
| Received the one automated application-link send | 19 | 79% |
| Prospect sent any message after the tour (genuine re-engagement) | 15 | 62.5% |
| Of the 15 who re-engaged, advanced to application+ | 3 | 20% |
| Of the 9 who went silent post-tour, advanced | 0 | 0% |
Across all live/real confirmed past tours (Camellia + Yale 25 Station, n = 33): 2 leased (6%), 3 applied+ (9%), 30 stuck (91%) [PROD].
Reading the cliff: the drop-off is not gradual — it is a wall immediately after the tour. 87.5% of toured Camellia prospects sit at tour_confirmed indefinitely. Every one of the 3 who advanced had re-engaged after the tour; none of the 9 confirmed-silent advanced — so post-tour engagement correlates with conversion, and we are doing almost nothing to create it. Who initiates matters: the only guaranteed post-tour touch today is our automated application link; there is no human or automated follow-up if the prospect doesn't act on it.
Sample-size honesty: n = 24 (Camellia past confirmed tours) is small; treat the rates as directional, not precise. The direction — a post-tour wall with near-zero systematic follow-up — is unambiguous.
Case study — 4 recent quiet Camellia post-tour prospects [PROD]
All four toured, all four received the standard flow, none advanced, none received any follow-up beyond the single application link:
| Initials | Tour date | Channel | Stage now | Post-tour prospect msgs | What the system did after the tour |
|---|---|---|---|---|---|
| I.G. | 2026-07-07 | tour_confirmed |
0 | Pre-tour reminders + app-link only; no follow-up | |
| D.A. | 2026-07-09 | tour_confirmed |
0 | Same | |
| M.N. | 2026-07-11 | tour_confirmed |
0 | Same | |
| A.B. | 2026-07-15 | tour_confirmed |
0 | Same |
These are not edge cases — they are the modal post-tour outcome.
What the product does post-tour today (verified in code)
tourWorkflow(src/lib/temporal/workflows/tour-workflow.ts) arms pre-tour reminders (T-24h, T-1h) and sends one application link ~1h after the scheduled start (DEFAULT_APP_LINK_DELAY_MS,sendApplicationLink). That is the entire post-tour automation.- The application-link send is not reliable: only 19/24 past-confirmed Camellia toured persons (79%) and 30/60 confirmed tour rows overall carry
applicationLinkSentAt[PROD]. ~21% of toured prospects get nothing after the tour. - The inquiry outreach cadence (ADR-0061/0062) does not cover this.
DEFAULT_OUTREACH_TOUCHESis Track A only — "inquired, not toured" (src/lib/domain/leasing/outreach-cadence-schedule.ts). The cadence exits on any prospect reply; booking a tour is a reply, so it closes the cadence and nothing re-enrolls the prospect after the tour. - Track B — "Toured, not applied" — was specified in ADR-0061 §D2 but never built. That ADR states verbatim: "No code for this track exists today; it is fully net-new." A grep for
Track B/TOURED/tourCompleted/ post-tour outreach returns no implementation. This ADR is the proposal to build it. - A tracking gap compounds the loss: 7/33 real confirmed-tour persons (3 at Camellia) have no linked
ProspectInquiryrecord (stage = None) [PROD] — the system can lose sight of a toured prospect entirely, so even a conversion may not be recorded against the tour.
Industry benchmarks (external, sourced)
- Completing a tour ≈ +63% likelihood to lease; scheduling one ≈ +115% — ResMan, 1.5M leads / 4,300 properties [EXT, MyResman/ResMan funnel analysis, 2024-25]. Touring is the single highest-intent signal in the funnel — which is exactly the moment we currently drop.
- Tour/showing→application ≈ 40%; approval→lease ≈ 70% — RentViewer via [Leasey.AI, 2025] [EXT, vendor benchmark]. "Good" tour→lease 35–50%, national ~30–40% — [getzuma.com, 2025] [EXT, vendor, directional — no primary dataset cited].
- Guest-card→lease 8.7% average / 16.5% top-quartile — ResMan [EXT, 2024-25].
- 47.6% of properties stop follow-up before reaching conversion thresholds; it takes ~8 touchpoints to earn a tour and 10+ to earn an application; average first-response ≈ 36 hours — [Nurture Boss Revenue Capture Report, 2026] [EXT, apartment-native platform data].
- Post-tour best-practice cadence: application link within ~2h of the tour, then a "DRIP" of ~4–6h / within 24h / 24–48h / 3–5 days — [resident360.com, 2024] and [bubblegumbi.com, 2026] [EXT, best-practice frameworks, no primary dataset].
- Effective multi-touch ceiling ≈ 6 touches over ~10–22 days — Velocify/XANT/Yesware [EXT, B2B-origin, directional for apartments per
pm-domain-knowledge/lead-reengagement-and-followup-cadence.md]. - All-three-channel follow-up → ~6× more tours than single-channel — [Nurture Boss, 2026] [EXT].
Gap: our measured tour→lease of 8.3% [PROD] sits far below the directional industry range of ~30–40% [EXT, vendor]. Even discounting heavily for small n and for stage-projection lag (some conversions may be unrecorded), the structural cause is plain: industry practice is a structured multi-touch post-tour DRIP; we have zero post-tour follow-up beyond one (unreliable) application link.
Root causes of post-tour drop-off
- No post-tour re-engagement exists. Track B was designed (ADR-0061 §D2) and never built. There is no cadence, no nudge, no "still interested?" touch after the tour.
- The one post-tour touch we do have is unreliable — 21% of toured prospects never receive the application link [PROD].
- The highest-intent moment gets the least attention. ResMan puts tour completion at +63% lease likelihood [EXT]; we systematically go quiet exactly there.
- Measurement is blind. No
tourCompletedAtanchor, no "toured, not applied" state, and 7/33 toured persons have no linked prospect record [PROD] — so we cannot even see the drop-off in-product, let alone measure a fix. - Engagement correlates with conversion and we don't create it. 3/15 re-engaged prospects advanced vs 0/9 silent ones [PROD]; nothing in the product tries to move a silent toured prospect back into conversation.
Decision (proposed)
Build Track B — post-tour re-engagement (the unbuilt half of ADR-0061), instrument it so lift is measurable, and ship it fail-closed/human-in-the-loop until Fede arms it. Sequenced so we can prove impact, not just ship motion.
D1 — Phase 0: Fix instrumentation first (prerequisite, no new outreach)
We cannot claim a conversion lift we can't measure. Before any new sends:
- Add a durable
tourCompletedAtanchor stamped bytourWorkflow(resolves ADR-0061 Open-Q2, the open "Track B clock anchor" question). All Track B timers and reporting key off it. - Add a "toured, not applied" projection — either a new
stagevalue or a derived flag onProspectInquiry(tourCompletedAtset AND stage <applied). Feeds the prospect list, the re-engagement card, and reporting. - Fix the application-link reliability gap (79%→~100%) and backfill the missing
applicationLinkSentAtlinkage. - Close the identity gap so a toured person always has a linked prospect record (the 7/33 with
stage = None). - Instrument the funnel: emit tour→app→lease events with the
tourCompletedAtanchor so tour→application and tour→lease are queryable per property and per cohort. Expected impact: not a conversion change — this is the measurement baseline every later phase is judged against.
D2 — Phase 1: Post-tour re-engagement cadence (Track B, net-new)
Anchor = tourCompletedAt. Proposed 3-touch cadence (final shape is a Fede decision — see below), grounded in the DRIP + 6-touch-ceiling research:
| Touch | Delay from tour completion | Content (intent only — no body copy in this ADR) | Notes |
|---|---|---|---|
| 1 | Immediate (within quiet-hours window) | Reliable application link + "great to meet you" | Hardens today's app-link send |
| 2 | +1–2 days | Light "any questions / ready to apply?" nudge | Only if no application yet |
| 3 | +5–7 days | Final "still interested?" check-in | Cadence terminates; hand to ADR-0060 human call list |
Exits immediately on application submitted or an inbound reply that a human/next step should own. Each touch is informational (about the prospect's own tour) — no concessions/specials, which would reclassify as marketing and require PEWC (per ADR-0061 legal posture).
D3 — Channel & safety rules (consistent with locked decisions)
- Outreach follows the prospect's inbound channel — email tour → email, text tour → text, phone tour → text (locked). No blanket multi-channel blast.
- One message per trigger. No double-send across email+SMS for the same touch.
- Anomaly gate applies — the same fail-closed gate the renewal/outreach paths use; a disarmed gate logs a dry-run no-op and does not advance the touch index.
- Quiet hours + TCPA: 8am–9pm local; no email→SMS channel switch without SMS consent (email consent does not carry to SMS —
pm-domain-knowledge/tcpa-sms-consent-for-leasing.md, ADR-0061). Voice/phone-sourced leads with no texting consent fall back to email or are skipped (Fede decision below). - Human-in-the-loop until armed. Ships disabled behind the two-factor fail-closed gate (env + per-property flag), exactly like ADR-0061/0062. Fede must approve before any new autonomous post-tour outreach is ungated. Recommended rollout: shadow-mode on Camellia (compute + render the plan, send nothing) → review → Fede arms one property.
D4 — Reporting & lift measurement
Track, per property and per monthly tour cohort: tour→application %, tour→lease %, median days tour→application, and re-engagement-touch → reply/apply attribution. Baseline is the Phase-0 measured funnel above (Camellia tour→lease 8.3%, tour→application 12.5% [PROD]). A phase is only "done" when the funnel query shows the movement — not when the code merges.
Expected impact (labelled estimates)
- Fixing the app-link reliability gap (79%→~100%): directly recoverable [EST] — 21% of toured prospects currently get no post-tour touch at all; the size of the resulting conversion lift is not measurable until Phase 0 instrumentation exists.
- Adding a 2–3 touch post-tour DRIP: industry data associates structured multi-touch follow-up with materially higher conversion (ResMan +63% tour-completion lift; Nurture Boss all-channel 6× tours [EXT]), but any specific lift % for PropFlow is an estimate and must be proven by the D4 measurement, not asserted here. No invented number.
Decisions needed from Fede
- Build Track B now? This ADR proposes building the unbuilt half of ADR-0061. Approve to proceed to Phase 0.
- Cadence shape — accept the 3-touch (immediate / +1–2d / +5–7d) schedule, or a different count/spacing? (Research supports up to ~6 touches over ~2 weeks as the ceiling.)
- "Tour completed" anchor — stamp
tourCompletedAtat the scheduled tour end time, or gate on a PM/Clara confirmation that the tour actually happened? (No-shows shouldn't get a "great to meet you.") - Toured state — add a new
stagevalue (e.g.toured) or derive "toured, not applied" fromtourCompletedAt+ stage? (Note theresolveForwardStageforward-only guard interaction.) - Voice/phone-sourced toured lead with no SMS consent — email fallback, or skip? (TCPA: cannot text without consent.)
- Backfill vs go-forward — one-time re-engagement of the ~21 currently-stuck Camellia prospects (implied-consent-only, mirroring the Ashley backfill decision), or go-forward only?
- Arm gating — confirm shadow-mode-first on Camellia, with Fede arming per-property before any live send.
Data appendix (aggregate, initials only)
All figures from propflow-prod, 2026-07-17.
A1 — Tour rows by schedulingState, by property [PROD] (query: GSI3PK = "Tour", grouped by PK + schedulingState):
| Property | confirmed | cancelled | proposed | other |
|---|---|---|---|---|
Camellia (1773625953462) — live |
30 | 8 | 1 | 0 |
The Willows (appfolio-45) — bench/test |
25 | 140 | 3 | 1 |
Yale 25 Station (1773625952029) |
5 | 0 | 0 | 0 |
Yale Sandbox (yale-sandbox) — test |
0 | 1 | 0 | 9 |
A2 — Distinct persons with ≥1 confirmed tour (real props, excl. test) by tour month [PROD]: Camellia — Apr 6, May 6, Jun 5, Jul 11, Aug 1 (= 29 total incl. future-dated). Yale 25 Station — 4. Willows bench — 5.
A3 — Camellia past-confirmed-tour funnel (n = 24) [PROD]: lease_signed 2 (8.3%) · application+ 3 (12.5%) · stuck-at-tour-stage 21 (87.5%) · received app-link 19 (79%) · re-engaged post-tour 15 (62.5%) · advanced|re-engaged 3/15 · advanced|silent 0/9.
A4 — Case-study prospects (initials): I.G. (2026-07-07), D.A. (2026-07-09), M.N. (2026-07-11), A.B. (2026-07-15) — all tour_confirmed, all email-channel, all received only pre-tour reminders + application link, none received any post-tour follow-up, none advanced.
A5 — What exists post-tour (code): tourWorkflow reminders (T-24h/T-1h) + one sendApplicationLink (~1h post scheduled start). No Track B. DEFAULT_OUTREACH_TOUCHES = Track A (inquired-not-toured) only.
Method notes / caveats: outcomes use PropFlow's own stage projection (AppFolio not cross-checked — some conversions may be unrecorded, which would understate real conversion and overstate our loss, but does not change the "no post-tour follow-up" root cause). n = 24 (Camellia) is small — rates are directional. "Post-tour prospect message" = a role = tenant message >30min after the confirmed tour's scheduled start on any conversation linked to that person. External benchmarks are largely vendor-published; primary-dataset figures (ResMan, Nurture Boss) are labelled as such.