Lead-to-Lease Funnel Review
Workflow purpose
Diagnose each stage of the property's demand-conversion funnel. Compare actuals against overlay-driven target bands. Isolate the binding constraint (lead volume, response, tour conversion, approval friction, or move-in conversion), surface fair-housing and screening-policy flags, and propose concrete actions scoped to the role that invoked the workflow.
Trigger conditions
- Explicit: "run funnel review", "weekly leasing funnel", "tour conversion drop", "pipeline audit", "why aren't we leasing".
- Implicit:
leased_occupancy below band for two consecutive weeks; notice_exposure above band; lead_response_time median breaches SLA; step-to-step fall-off in CRM changes materially week over week.
- Recurring: weekly for every property at
lifecycle in [lease_up, stabilized, renovation].
Inputs (required / optional)
| Input |
Type |
Required |
Notes |
| CRM lead log (T30) |
table |
required |
inquiry_ts, first_contact_ts, source, status |
| Tour log (T30) |
table |
required |
tour_date, outcome, lead_id |
| Application log (T30) |
table |
required |
submitted_date, approval_status, policy_ref |
| Lease log (T30) |
table |
required |
executed_date, move_in_date, prior_lease_id |
| Rent roll snapshot |
table |
required |
to compute leased_occupancy, notice_exposure |
| Market rent reference |
csv |
required |
for market_to_lease_gap context |
| Concession policy overlay |
yaml |
required |
concession ceiling and lead_time windows |
| Org overlay target bands |
yaml |
optional |
falls back to role_kpi_targets.csv |
| Source-mix cost export |
table |
optional |
marketing spend by source for CPL |
Outputs
| Output |
Type |
Shape |
| Funnel KPI table |
kpi_review |
row per stage with actual, band, gap, trend |
| Binding constraint finding |
memo |
narrative with cited metrics and proposed actions |
| Fair-housing flag log |
appendix |
approval_rate disparity scan, screening policy deviations |
| Action list |
checklist |
owner, due date, approval gate if any |
| Confidence banner |
banner |
reference as-of dates and sample-tag surfacing |
Required context
Router must resolve: asset_class, segment, form_factor, lifecycle_stage, management_mode, role, and at minimum a market. If market is missing, workflow asks before running any market-relative metric.
Process
- Snapshot the funnel (T7 and T30). Compute, in order,
lead_response_time (median and p95), tour_conversion, application_conversion, approval_rate, move_in_conversion. Add the resulting state metrics: leased_occupancy, preleased_occupancy, notice_exposure.
- Compare to target bands. Pull
reference/derived/role_kpi_targets.csv; apply any org overlay override. Color-code each stage within/below/above band. Note the reference as_of_date.
- Identify the binding constraint. Walk stages in order; the first metric materially outside band (per overlay's materiality threshold) is the binding constraint. If multiple stages are outside band, rank by leverage on
leased_occupancy.
- Fair-housing guardrail scan.
- Scan CRM notes,
Lead.preferences, marketing copy for the protected-class term list. Any hit opens an advisory line; pattern hits open approval_request row 3.
- Compute
approval_rate trend vs. the trailing 90-day baseline. Statistically meaningful disparity flags for human review (never an autonomous adverse-action decision).
- Confirm every
ApprovalOutcome in the sample cites a policy_ref. Missing policy_ref is a screening-drift finding.
- Concession scan. Compute
concession_rate on new leases and compare to the concession policy overlay ceiling. Any lease at or above the ceiling is listed; any lease above policy opens an approval_request row 13 or verifies an existing one.
- Source-mix attribution (if cost data present). Join leads and tours to marketing source; compute lead-volume share and tour-conversion by source. Route high-cost / low-conversion sources to the leasing manager for reallocation.
- Diagnose with branches.
- If
lead_response_time median above SLA -> recommend staffing / coverage review, evaluate autoresponder posture, and flag the top response-time outliers.
- If
tour_conversion below band with response-time green -> recommend tour-quality review, shop-call / mystery-shop pull, amenity walk, comp audit.
- If
application_conversion below band -> recommend pricing review against market_to_lease_gap, concession-posture recheck, friction audit on the application step itself.
- If
approval_rate swing > overlay materiality vs. baseline -> route to fair-housing review and screening-policy confirmation; do not propose an ad-hoc change.
- If
move_in_conversion below band -> recommend post-approval friction review (unit readiness, keys, welcome package), review make_ready_days in coordination with workflows/unit_turn_make_ready.
- Propose action list. Each action names an owner, a due date, and the approval gate it must pass (if any). Mark
draft_for_review for any resident-facing or vendor-facing communication.
- Surface confidence banner. List every reference cited with
as_of_date and status (sample / starter / live). Outputs never cite sample data as operating fact without the tag.
Metrics used
lead_response_time, tour_conversion, application_conversion, approval_rate, move_in_conversion, leased_occupancy, preleased_occupancy, notice_exposure, concession_rate. market_to_lease_gap as a supporting metric when market rent reference present.
Reference files used
reference/normalized/market_rents__{market}_mf.csv
reference/normalized/concession_benchmarks__{market}_mf.csv
reference/normalized/occupancy_benchmarks__{market}_mf.csv
reference/derived/role_kpi_targets.csv
reference/derived/funnel_conversion_benchmarks__middle_market.csv
overlays/segments/middle_market/service_standards.md (concession policy pointer)
Escalation points
- Fair-housing hit (term-list match, disparity signal, missing
policy_ref) routes to regional_manager and opens an approval_request row 3 before any resident-facing response is drafted.
- Proposed concession above policy opens
approval_request row 13.
- If the binding constraint is a screening-policy gap, the workflow hands off to the regional_manager and the
workflows/renewal_retention / screening-policy review path rather than proposing changes.
Required approvals
- Any concession action beyond policy (row 13).
- Fair-housing-flagged dispute (row 3) before public-facing response.
Failure modes
- Treating "occupancy" as a single number. Fix: always surface
physical_occupancy, leased_occupancy, economic_occupancy together; this workflow uses leased as the state reference.
- Diagnosing from last week only. Fix: T7 and T30 side by side; weight T30 for structural signal.
- Recommending concession as a first-line remedy. Fix: concessions are a last resort, always route above policy.
- Missing the fair-housing scan because the funnel "looks normal". Fix: the scan is mandatory every run, not conditional on funnel state.
- Recommending a screening policy change to close the funnel. Fix: screening criteria live in the screening_policy overlay; workflow never authors ad-hoc screening criteria.
- Source-mix narrative without cost data. Fix: if marketing spend absent, note the gap and propose to capture cost data rather than inferring CPL.
Edge cases
- Lease-up stage: band targets pulled from lease_up overlay, not stabilized.
stabilization_pace_vs_plan is the primary state metric; funnel is the mechanism.
- Renovation stage, unit mix shifting: exclude classic-to-renovated unit transitions from the
market_to_lease_gap calc; note the exclusion in the output.
- Very small property: if weekly sample is below
minimum_lead_volume (from overlay), widen to T30 and annotate low-sample confidence.
- TPM-managed property: the workflow produces owner-oversight view and TPM-facing data request if data is missing; never bypasses the TPM.
- New property (no 90-day history): disparity scan uses portfolio baseline;
confidence: low banner applied.
Example invocations
- "Run the weekly funnel review for Ashford Park; flag anything below band."
- "Tours are down at Willow Creek. Diagnose which funnel stage is breaking and propose actions."
- "Build a May-1-2026 funnel scorecard for the South End portfolio (three assets) with source mix attribution."
Example outputs
Output — Funnel review (abridged, week ending 2026-04-12, Ashford Park)
Funnel KPI table.
| Stage |
Metric |
T7 |
T30 |
Band |
Gap |
Trend |
| Response |
lead_response_time p50 |
within |
within |
(overlay) |
zero |
flat |
| Tour |
tour_conversion |
within |
below |
(overlay) |
below |
declining |
| Application |
application_conversion |
within |
within |
(overlay) |
zero |
flat |
| Approval |
approval_rate |
within |
within |
(overlay) |
zero |
flat |
| Move-in |
move_in_conversion |
within |
within |
(overlay) |
zero |
flat |
| State |
leased_occupancy |
below |
below |
(overlay) |
below |
declining |
Binding constraint. tour_conversion on the T30 view, dragging leased_occupancy below band.
Actions.
- Tour-quality audit this week (owner: leasing_manager; due: Friday; no approval gate).
- Mystery-shop pull (owner: regional_manager; due: Friday; no approval gate).
- Comp audit invoked via
workflows/market_rent_refresh (owner: property_manager; due: 10 days; no approval gate).
- No concession action proposed.
Fair-housing scan. No term-list hits. approval_rate within baseline tolerance. All ApprovalOutcome rows in sample cite policy_ref.
Approval requests opened. None.
Confidence banner. funnel_conversion_benchmarks__middle_market.csv@as_of=2026-03-31, status=sample. market_rents__charlotte_mf.csv@as_of=2026-03-31, status=sample. Funnel data live CRM through 2026-04-12 08:00 local.
1---2name: lead-to-lease-funnel-review3description: Diagnostic review of the leasing funnel from lead through move-in. Identifies where the funnel is breaking (response time, tour conversion, application conversion, approval, move-in), quantifies exposure, surfaces fair-housing and screening-drift flags, and proposes a remediation plan with owner-specific target bands. Recurring weekly at the property level; invoked ad hoc when notice exposure or leased occupancy slips.4---56# Lead-to-Lease Funnel Review78## Workflow purpose910Diagnose each stage of the property's demand-conversion funnel. Compare actuals against overlay-driven target bands. Isolate the binding constraint (lead volume, response, tour conversion, approval friction, or move-in conversion), surface fair-housing and screening-policy flags, and propose concrete actions scoped to the role that invoked the workflow.1112## Trigger conditions1314- **Explicit:** "run funnel review", "weekly leasing funnel", "tour conversion drop", "pipeline audit", "why aren't we leasing".15- **Implicit:** `leased_occupancy` below band for two consecutive weeks; `notice_exposure` above band; `lead_response_time` median breaches SLA; step-to-step fall-off in CRM changes materially week over week.16- **Recurring:** weekly for every property at `lifecycle in [lease_up, stabilized, renovation]`.1718## Inputs (required / optional)1920| Input | Type | Required | Notes |21|---|---|---|---|22| CRM lead log (T30) | table | required | `inquiry_ts`, `first_contact_ts`, `source`, `status` |23| Tour log (T30) | table | required | `tour_date`, `outcome`, `lead_id` |24| Application log (T30) | table | required | `submitted_date`, `approval_status`, `policy_ref` |25| Lease log (T30) | table | required | `executed_date`, `move_in_date`, `prior_lease_id` |26| Rent roll snapshot | table | required | to compute `leased_occupancy`, `notice_exposure` |27| Market rent reference | csv | required | for `market_to_lease_gap` context |28| Concession policy overlay | yaml | required | concession ceiling and lead_time windows |29| Org overlay target bands | yaml | optional | falls back to `role_kpi_targets.csv` |30| Source-mix cost export | table | optional | marketing spend by source for CPL |3132## Outputs3334| Output | Type | Shape |35|---|---|---|36| Funnel KPI table | `kpi_review` | row per stage with actual, band, gap, trend |37| Binding constraint finding | `memo` | narrative with cited metrics and proposed actions |38| Fair-housing flag log | appendix | `approval_rate` disparity scan, screening policy deviations |39| Action list | `checklist` | owner, due date, approval gate if any |40| Confidence banner | banner | reference as-of dates and sample-tag surfacing |4142## Required context4344Router must resolve: asset_class, segment, form_factor, lifecycle_stage, management_mode, role, and at minimum a market. If market is missing, workflow asks before running any market-relative metric.4546## Process47481. **Snapshot the funnel (T7 and T30).** Compute, in order, `lead_response_time` (median and p95), `tour_conversion`, `application_conversion`, `approval_rate`, `move_in_conversion`. Add the resulting state metrics: `leased_occupancy`, `preleased_occupancy`, `notice_exposure`.492. **Compare to target bands.** Pull `reference/derived/role_kpi_targets.csv`; apply any org overlay override. Color-code each stage within/below/above band. Note the reference `as_of_date`.503. **Identify the binding constraint.** Walk stages in order; the first metric materially outside band (per overlay's materiality threshold) is the binding constraint. If multiple stages are outside band, rank by leverage on `leased_occupancy`.514. **Fair-housing guardrail scan.**52 - Scan CRM notes, `Lead.preferences`, marketing copy for the protected-class term list. Any hit opens an advisory line; pattern hits open `approval_request` row 3.53 - Compute `approval_rate` trend vs. the trailing 90-day baseline. Statistically meaningful disparity flags for human review (never an autonomous adverse-action decision).54 - Confirm every `ApprovalOutcome` in the sample cites a `policy_ref`. Missing `policy_ref` is a screening-drift finding.555. **Concession scan.** Compute `concession_rate` on new leases and compare to the concession policy overlay ceiling. Any lease at or above the ceiling is listed; any lease above policy opens an `approval_request` row 13 or verifies an existing one.566. **Source-mix attribution (if cost data present).** Join leads and tours to marketing source; compute lead-volume share and tour-conversion by source. Route high-cost / low-conversion sources to the leasing manager for reallocation.577. **Diagnose with branches.**58 - If `lead_response_time` median above SLA -> recommend staffing / coverage review, evaluate autoresponder posture, and flag the top response-time outliers.59 - If `tour_conversion` below band with response-time green -> recommend tour-quality review, shop-call / mystery-shop pull, amenity walk, comp audit.60 - If `application_conversion` below band -> recommend pricing review against `market_to_lease_gap`, concession-posture recheck, friction audit on the application step itself.61 - If `approval_rate` swing > overlay materiality vs. baseline -> route to fair-housing review and screening-policy confirmation; do not propose an ad-hoc change.62 - If `move_in_conversion` below band -> recommend post-approval friction review (unit readiness, keys, welcome package), review `make_ready_days` in coordination with `workflows/unit_turn_make_ready`.638. **Propose action list.** Each action names an owner, a due date, and the approval gate it must pass (if any). Mark `draft_for_review` for any resident-facing or vendor-facing communication.649. **Surface confidence banner.** List every reference cited with `as_of_date` and `status` (sample / starter / live). Outputs never cite sample data as operating fact without the tag.6566## Metrics used6768`lead_response_time`, `tour_conversion`, `application_conversion`, `approval_rate`, `move_in_conversion`, `leased_occupancy`, `preleased_occupancy`, `notice_exposure`, `concession_rate`. `market_to_lease_gap` as a supporting metric when market rent reference present.6970## Reference files used7172- `reference/normalized/market_rents__{market}_mf.csv`73- `reference/normalized/concession_benchmarks__{market}_mf.csv`74- `reference/normalized/occupancy_benchmarks__{market}_mf.csv`75- `reference/derived/role_kpi_targets.csv`76- `reference/derived/funnel_conversion_benchmarks__middle_market.csv`77- `overlays/segments/middle_market/service_standards.md` (concession policy pointer)7879## Escalation points8081- Fair-housing hit (term-list match, disparity signal, missing `policy_ref`) routes to regional_manager and opens an `approval_request` row 3 before any resident-facing response is drafted.82- Proposed concession above policy opens `approval_request` row 13.83- If the binding constraint is a screening-policy gap, the workflow hands off to the regional_manager and the `workflows/renewal_retention` / screening-policy review path rather than proposing changes.8485## Required approvals8687- Any concession action beyond policy (row 13).88- Fair-housing-flagged dispute (row 3) before public-facing response.8990## Failure modes91921. Treating "occupancy" as a single number. Fix: always surface `physical_occupancy`, `leased_occupancy`, `economic_occupancy` together; this workflow uses leased as the state reference.932. Diagnosing from last week only. Fix: T7 and T30 side by side; weight T30 for structural signal.943. Recommending concession as a first-line remedy. Fix: concessions are a last resort, always route above policy.954. Missing the fair-housing scan because the funnel "looks normal". Fix: the scan is mandatory every run, not conditional on funnel state.965. Recommending a screening policy change to close the funnel. Fix: screening criteria live in the screening_policy overlay; workflow never authors ad-hoc screening criteria.976. Source-mix narrative without cost data. Fix: if marketing spend absent, note the gap and propose to capture cost data rather than inferring CPL.9899## Edge cases100101- **Lease-up stage:** band targets pulled from lease_up overlay, not stabilized. `stabilization_pace_vs_plan` is the primary state metric; funnel is the mechanism.102- **Renovation stage, unit mix shifting:** exclude classic-to-renovated unit transitions from the `market_to_lease_gap` calc; note the exclusion in the output.103- **Very small property:** if weekly sample is below `minimum_lead_volume` (from overlay), widen to T30 and annotate low-sample confidence.104- **TPM-managed property:** the workflow produces owner-oversight view and TPM-facing data request if data is missing; never bypasses the TPM.105- **New property (no 90-day history):** disparity scan uses portfolio baseline; `confidence: low` banner applied.106107## Example invocations1081091. "Run the weekly funnel review for Ashford Park; flag anything below band."1102. "Tours are down at Willow Creek. Diagnose which funnel stage is breaking and propose actions."1113. "Build a May-1-2026 funnel scorecard for the South End portfolio (three assets) with source mix attribution."112113## Example outputs114115### Output — Funnel review (abridged, week ending 2026-04-12, Ashford Park)116117**Funnel KPI table.**118119| Stage | Metric | T7 | T30 | Band | Gap | Trend |120|---|---|---|---|---|---|---|121| Response | `lead_response_time` p50 | within | within | (overlay) | zero | flat |122| Tour | `tour_conversion` | within | below | (overlay) | below | declining |123| Application | `application_conversion` | within | within | (overlay) | zero | flat |124| Approval | `approval_rate` | within | within | (overlay) | zero | flat |125| Move-in | `move_in_conversion` | within | within | (overlay) | zero | flat |126| State | `leased_occupancy` | below | below | (overlay) | below | declining |127128**Binding constraint.** `tour_conversion` on the T30 view, dragging `leased_occupancy` below band.129130**Actions.**131132- Tour-quality audit this week (owner: leasing_manager; due: Friday; no approval gate).133- Mystery-shop pull (owner: regional_manager; due: Friday; no approval gate).134- Comp audit invoked via `workflows/market_rent_refresh` (owner: property_manager; due: 10 days; no approval gate).135- No concession action proposed.136137**Fair-housing scan.** No term-list hits. `approval_rate` within baseline tolerance. All `ApprovalOutcome` rows in sample cite `policy_ref`.138139**Approval requests opened.** None.140141**Confidence banner.** `funnel_conversion_benchmarks__middle_market.csv@as_of=2026-03-31, status=sample`. `market_rents__charlotte_mf.csv@as_of=2026-03-31, status=sample`. Funnel data live CRM through 2026-04-12 08:00 local.