Market Rent Refresh
Workflow purpose
Keep market rent and concession benchmarks fresh. Detect staleness per overlay threshold, organize a refresh (shopped comps, 3rd-party export, operator-reported), and hand off the resulting bundle to workflows/rent_comp_intake. Output a current-state view for renewal and pricing decisions.
Trigger conditions
- Explicit: "refresh market rents for X market", "shop comps for submarket Y", "quarterly market survey".
- Implicit: reference
as_of_dateolder than overlay staleness threshold; renewal or funnel workflow cites stale benchmark; supply event (new delivery) in submarket. - Recurring: quarterly per market; ad hoc when a trigger fires.
Inputs (required / optional)
| Input | Type | Required | Notes |
|---|---|---|---|
| Current benchmark files | csv | required | freshness check |
| Shop list | list | required | properties to survey |
| 3rd-party exports | table | optional | where available |
| Operator-reported inputs | list | optional | from PM/leasing |
| Submarket definitions | yaml | required |
Outputs
| Output | Type | Shape |
|---|---|---|
| Freshness status | kpi_review |
per market/submarket reference as_of_date |
| Refresh plan | checklist |
sources, dates, owners |
| Current-state memo | memo |
market and concession snapshot |
| Comp bundle | handoff | passed to workflows/rent_comp_intake |
Required context
Asset_class, segment, market, submarket.
Process
- Freshness check. Scan all benchmarks for the market; identify stale per overlay.
- Refresh plan. For each stale reference, define sources; assign owners and dates.
- Collect comps. Produce raw bundle; hand off to
workflows/rent_comp_intakefor normalization and approval. - Current-state memo. Market trend narrative with cited sources; no proposed reference changes here (intake owns those).
- Downstream notification. Packs whose reference_manifest reads these files are notified of update.
- Confidence banner. All references surfaced with
as_of_dateandstatus.
Metrics used
market_to_lease_gap, loss_to_lease, rent_growth_new_lease, rent_growth_renewal, concession_rate — consumed by downstream workflows.
Reference files used
reference/normalized/market_rents__{market}_mf.csvreference/normalized/concession_benchmarks__{market}_mf.csvreference/normalized/comp_normalization_rules__middle_market.yaml
Escalation points
- Stale reference: PM -> regional; refresh owner identified.
- Comp magnitude change routed via
workflows/rent_comp_intake.
Required approvals
- Handled via
workflows/rent_comp_intake(delta-gated).
Failure modes
- Refresh without normalization. Fix: intake workflow owns normalization.
- Memo asserting new benchmarks before approval. Fix: memo reports current state; intake proposes updates.
- Missing submarket coverage. Fix: refresh plan enumerates submarkets explicitly.
Edge cases
- New supply delivery mid-survey: note in memo; additional comp capture if overlay threshold crossed.
- Market with few comps: note sparse-sample confidence; operator-reported weighted lower.
- Concession-heavy market: effective rent view emphasized.
Example invocations
- "Refresh Charlotte market rents; staleness threshold crossed."
- "Shop five South End properties and route the bundle to intake."
- "Build the current-state market memo for South End."
Example outputs
Output — Market rent refresh plan (abridged, Charlotte South End)
Freshness status. Market rent benchmark as_of older than overlay threshold; concession benchmark within threshold.
Refresh plan. Five properties to shop (owners and dates); 3rd-party export already requested.
Bundle handoff. Collected comps sent to workflows/rent_comp_intake.
Current-state memo. Trend narrative with cited sources; no direct benchmark updates here.
Confidence banner. market_rents__charlotte_mf@2026-03-31 (stale per overlay), status=sample. Comp sources surfaced per record.