Operationalize the first 12-18 months post-delivery of a new-construction or
gut-renovation asset: monthly tracker of lease-up velocity vs underwriting, concession
depth vs market, approval-rate posture, traffic-source mix, broker-assist rate,
model-unit performance, first-renewal retention readiness, stabilization pace, NOI
ramp vs underwriting, lender-reporting compliance, and equity-call scheduling for any
unfunded reserves. Distinguishes from the steady-state
`workflows/monthly_property_operating_review` by adding ramp-tracking metrics and by
wiring the cross-system posture between AppFolio (leasing funnel + lease execution)
and Excel (rent comp + concession benchmark) into a single lease-up narrative. Hands
off to `workflows/monthly_property_operating_review` once the property crosses the
lifecycle stabilization threshold.
Narrative-first with a KPI dashboard. Informational to recommendation severity: this
pack does not authorize concession policy exceptions, pricing shifts, or equity-call
initiations —
Market concession benchmarks, rent-comp depth, marketing-channel mix assumptions,
concession-vs-rent tradeoff overlays, and underwriting lease-up curves drift. AppFolio
lease-status semantics (FutureActive vs InEffect) evolve with product releases; the
adapter contract is the source of truth. Lender-reporting templates and equity-call
schedules are loan- and fund-specific and overlay-driven. Every pace claim cites a
reference; sample overlays must be replaced before any output is treated as an
ownership-side commitment.
Operationalize the first 12-18 months post-delivery of a new-construction or
gut-renovation asset: monthly tracker of lease-up velocity vs underwriting, concession
depth vs market, approval-rate posture, traffic-source mix, broker-assist rate,
model-unit performance, first-renewal retention readiness, stabilization pace, NOI
ramp vs underwriting, lender-reporting compliance, and equity-call scheduling for any
unfunded reserves. Distinguishes from the steady-state
`workflows/monthly_property_operating_review` by adding ramp-tracking metrics and by
wiring the cross-system posture between AppFolio (leasing funnel + lease execution)
and Excel (rent comp + concession benchmark) into a single lease-up narrative. Hands
off to `workflows/monthly_property_operating_review` once the property crosses the
lifecycle stabilization threshold.
Narrative-first with a KPI dashboard. Informational to recommendation severity: this
pack does not authorize concession policy exceptions, pricing shifts, or equity-call
initiations — those gate through their owning workflows (`workflows/market_rent_refresh`,
overlay concession governance, fund-level capital overlay). Child workflows invoked:
`workflows/lead_to_lease_funnel_review`, `workflows/market_rent_refresh`,
`workflows/move_in_administration`, `workflows/renewal_retention` (read-only, for
first-renewal window).
Lease-Up First Period
Workflow purpose
Give the leasing_director, regional_ops_director, asset_mgmt_director, and
investments_lead a single monthly view of a new-construction or gut-renovation asset
during its first 12-18 months post-delivery — so that drift from the underwriting
lease-up curve, concession escalation beyond the comp set, model-unit or marketing-
channel underperformance, and lender-reporting or equity-call timing risk surface in
the same month they occur.
This pack is ramp-aware. It is not the steady-state monthly review. It preserves
lease-up-specific metrics (lease_up_pace_vs_underwriting, concession_depth_vs_market,
noi_ramp_vs_underwriting, first_renewal_window_retention_readiness) and explicitly
annotates when a property crosses the stabilization threshold and the ownership-side
review cadence hands off to workflows/monthly_property_operating_review.
The workflow is read-heavy across two primary source systems — AppFolio for the
leasing funnel and lease execution, Excel for rent comp + concession benchmark — with
secondary pulls from Intacct (NOI actuals) and Procore (CCO timestamp) where the
property came from ground-up development. Cross-system posture is declared in
_core/stack_wave4/source_of_truth_matrix.md.
Trigger conditions
Explicit: "monthly lease-up review", "lease-up scorecard", "lease-up pace",
"how's the new asset performing", "South Fork lease-up tracker", "NOI ramp check".
Implicit: property lifecycle enters lease_up (from TCO or CCO); property is
within its overlay-defined lease-up window (typically 6-18 months post-delivery);
stabilization_pace_vs_plan breaches overlay band; concession_rate crosses lease-up
overlay ceiling; lender-reporting calendar event (quarterly or monthly per loan
overlay) approaches; fund equity-call milestone approaches; first-renewal window
(T60 days) opens for any lease-up-executed lease.
Recurring: monthly per property while the property is in lifecycle = lease_up;
escalates to weekly cadence if lease_up_pace_vs_underwriting falls more than
overlay tolerance behind plan for two consecutive weeks.
Inputs (required / optional)
Input
Type
Required
Notes
AppFolio rent roll snapshot
table
required
このリポジトリの他の Skills
per appfolio_pms adapter
AppFolio lease register (all leases executed to date)
reference as_of_date + status + sample-tag surfacing
Required context
Asset_class, segment, form_factor, lifecycle_stage (must be lease_up), management_mode,
market, property_id, org_id. Delivery date (TCO and, where distinct, CCO) must be known
— the workflow computes all ramp metrics against weeks-post-delivery. Loan_id is
required if the property carries construction-to-permanent or permanent debt with a
lease-up-stage covenant or reporting obligation. Fund_id is required if the pack
reports equity-call posture.
Process
Step 1. Delivery anchor and ramp-week computation
Establish the anchor date. Pull property.acquired_date where applicable; for ground-up
projects pull CCO (certificate_of_occupancy_issued) from the Procore side per the
handoff posture declared in source_of_truth_matrix.md (Procore primary for
construction_project and schedule_milestone). If CCO differs from TCO, use CCO as
the first-lease anchor per loan overlay convention and annotate the gap via
cco_to_first_lease_days (proposed). Every pace metric in subsequent steps is
computed as "week N post-delivery" so the underwriting curve and actuals align at the
same x-axis.
Step 2. Lease-up pace vs underwriting
Compute:
leased_occupancy at property grain per appfolio_pms/normalized_contract.yaml
semantics (lease status in {executed, in_effect} with preleased window per overlay).
preleased_occupancy for future-start executed leases within the preleased_window
(lease_up overlay typically widens to 60 days — cite the overlay).
lease_up_pace_post_delivery (canonical): weekly rolling units-leased count.
stabilization_pace_vs_plan (canonical): actual leased occupancy minus budget
leased occupancy at the same ramp-week.
lease_up_pace_vs_underwriting (proposed): ratio of actual-to-date to
underwriting-to-date at current ramp-week. The underwriting curve is frozen at
property delivery; any change in the underwriting curve is logged separately via
fund overlay and this pack annotates the change.
Flag any ramp-week where lease_up_pace_vs_underwriting (proposed) is more than the
overlay tolerance (cite reconciliation_tolerance_band.yaml::lease_up_pace_band)
behind plan. Two consecutive flags escalate cadence to weekly per trigger policy.
Step 3. Concession posture vs market
Compute:
concession_rate (canonical) on new leases executed in the window.
concession_depth_vs_market (proposed): equivalent months off on the property's
new-lease average versus concession_benchmarks__{market}_mf.csv row matched on
segment + form_factor + lifecycle_stage=lease_up. Surface both the absolute gap and
the pct_comps_offering delta.
Flag:
Any lease where concession > lease-up overlay ceiling — route to overlay concession
governance; open or verify approval_request row 13 for policy-exceeding
concessions during lease-up.
Any period where concession_depth_vs_market (proposed) exceeds overlay tolerance
(cite reconciliation_tolerance_band.yaml::concession_depth_band). This is the
concession-vs-rent tradeoff sentinel — escalate to leasing_director + asset_mgmt_director.
Every concession comparison cites the Excel comp source as_of_date and status
(sample / starter / live).
approval_rate (canonical) over the window. Lease-up overlay applies its own target
band — the lease-up population is often demographically distinct from stabilized,
so the pack uses the lease-up-scoped band.
Compare to T90-day trailing baseline. Statistically meaningful disparity triggers a
fair-housing flag — route to workflows/lead_to_lease_funnel_review's fair-housing
branch (row 3) rather than asserting here.
Confirm every approval_outcome cites a policy_ref. Missing policy_ref is a
screening-drift finding; annotate but do not propose a screening change.
Fair-housing scanning is delegated to workflows/lead_to_lease_funnel_review; this
pack references the findings, not authors them.
Step 5. Traffic source mix and broker-assist posture
Group leads, tours, applications, and executed leases by Lead.source_channel.
Compute per-source:
Lead volume share.
Tour conversion.
Application conversion.
Executed-lease share.
Cost-per-lease (if marketing spend is available from the marketing_channel_mix
reference plus property-level spend overlay; else annotate gap and skip).
Separately compute broker_assist_rate (proposed): share of executed leases whose
source_channel is in the broker-assist identifier list (optional overlay input). A
high broker-assist rate during lease-up is not a flag by itself — compare to
marketing_channel_mix__middle_market.csv benchmark to classify as within / above /
below expected for segment + market.
If there is a marketing rentup gap (i.e., total lead volume + conversion pace cannot
produce enough executed leases to track plan), route to leasing_manager + marketing_lead.
Step 6. Model unit performance
If ground-up with a model unit program:
Pull model-unit readiness status (construction handoff artifact).
Compute model_unit_tour_conversion (proposed): tour_conversion filtered to tours
whose record indicates a model-unit walk.
Compare to overall tour_conversion and to funnel_conversion_benchmarks__middle_market.csv.
If the model unit is not ready (finishes incomplete, staging not complete, utilities
not live), flag as model_unit_readiness_gap — route to construction_manager +
leasing_manager. Do not propose a pricing change to compensate; surface the gap as a
non-pricing remediation.
Step 7. First-renewal window retention readiness
For any executed lease with end_date within T60 days of the run date:
Compute first_renewal_window_retention_readiness (proposed): count by state
(renewal_offer_issued, engaged, signed, declined, notice_given, unresponsive).
Compare to renewal_uplift_bands__middle_market.csv where available.
Annotate any lease that was executed with a lease-up concession — the first renewal
is structurally different from a stabilized renewal because the prior rent may have
been concession-burdened. Cite the overlay's first-renewal rent policy.
This is read-only for the steady-state renewal workflow: it surfaces the queue but
does not draft offers. Offer drafting lives in workflows/renewal_retention.
Step 8. NOI ramp posture
Pull monthly NOI from Intacct (per sage_intacct_gl adapter; Intacct is primary for
actual_line). Compute:
noi (canonical) at property grain, month-post-delivery.
noi_margin (canonical).
noi_ramp_vs_underwriting (proposed): ratio of actual NOI to underwriting NOI at
same month-post-delivery. Underwriting NOI ramp is frozen at delivery.
revenue_variance_to_budget and expense_variance_to_budget (canonical) against
the lease-up-stage budget.
Flag any month where noi_ramp_vs_underwriting (proposed) is more than overlay
tolerance behind underwriting. Two consecutive flags escalate to investments_lead.
Step 9. Rent comp and market-to-lease gap
rent_growth_new_lease (canonical) over the window.
market_to_lease_gap (canonical) using market_rents__{market}_mf.csv.
Surface the gap explicitly so the Excel comp as_of_date and status appear in the
confidence banner — market-to-lease-gap claims are among the most stale-data-sensitive
in the pack.
Step 10. Lender-reporting compliance
For each loan with a lease-up-stage reporting obligation (per loan overlay
reporting calendar):
Compute lender_reporting_compliance_status (proposed) per required submission in
the period: on_time, late, missed, waived.
Flag any missed or waived without documented waiver — route to
asset_mgmt_director + reporting_finance_ops_lead. If a response requires a lender
submission, open approval_request row 14 (lender final submission gate).
This pack does not author lender submissions; it flags compliance posture. Submission
composition is in workflows/executive_operating_summary_generation when lender
output is needed.
Step 11. Equity-call schedule (unfunded reserves)
If the fund overlay declares equity-call schedule posture applies:
Pull forward 90-day equity-call plan from the fund overlay.
Compute equity_call_schedule_coverage (proposed) per scheduled call:
planned_amount, committed_amount, deployed_amount, due_date.
Flag any call whose due_date is within 30 days and whose committed_amount is
below planned_amount by more than overlay tolerance.
This pack does not initiate calls; it reports posture. Call initiation lives in
fund-level capital overlay.
Step 12. Stabilization crossover check
Compute whether the property has crossed the stabilization threshold (per overlay,
typically a sustained leased_occupancy above overlay-defined band for N consecutive
months). If crossed:
Annotate the stabilization crossover date.
Flag the handoff from lease_up_first_period to
workflows/monthly_property_operating_review as the primary monthly cadence going
forward.
The first renewal window may still straddle the crossover; retention readiness
continues to be tracked here until the first-cohort renewals conclude.
The handoff is ownership-side signaled, not auto-executed. This pack surfaces the
signal; workflows/monthly_asset_management_review confirms and adjusts cadence.
Step 13. Top-3 watch items
Narrative synthesis. Name the three most consequential lease-up watch items this
month. Each watch item cites: property, metric slug, tolerance band reference, owning
workflow, proposed next action.
Step 14. Confidence banner
Every reference surfaced with as_of_date and status. Any sample-tagged reference
is explicit. Cross-system posture summary: AppFolio primary for leasing funnel + lease
execution; Excel primary for rent comp + concession benchmark; Intacct primary for
NOI actuals post-close; Procore primary for CCO timestamp where applicable.
Decision points and branches
lease_up_pace_vs_underwriting (proposed) behind band two weeks running: cadence
escalates to weekly; hand off to leasing_director + asset_mgmt_director. Do not
propose pricing change here — route to workflows/market_rent_refresh for
re-pricing analysis.
concession_depth_vs_market (proposed) above tolerance: concession-vs-rent tradeoff
sentinel — escalate to leasing_director + asset_mgmt_director. Do not propose a
policy exception here — overlay governs.
model_unit_readiness_gap: route to construction_manager + leasing_manager.
noi_ramp_vs_underwriting (proposed) behind band two months running: escalate to
investments_lead.
Lender-reporting miss: route to asset_mgmt_director + reporting_finance_ops_lead;
lender response composition through workflows/executive_operating_summary_generation.
Equity-call timing drift: route to cfo_finance_leader + portfolio_manager.
Stabilization crossover signaled: annotate handoff to
workflows/monthly_property_operating_review.
Metrics used
See frontmatter. Canonical metrics are inherited from the property-operations and
asset-management families. The proposed metrics (lease_up_pace_vs_underwriting,
concession_depth_vs_market, broker_assist_rate, model_unit_tour_conversion,
first_renewal_window_retention_readiness, noi_ramp_vs_underwriting,
lender_reporting_compliance_status, equity_call_schedule_coverage,
cco_to_first_lease_days) are lease-up-specific aggregations; formal promotion to
_core/metrics.md happens via a canonical change-control cycle. cco_to_first_lease_days
is shared with workflows/development_pipeline_tracking.
Fair-housing flag (echoed from workflows/lead_to_lease_funnel_review): row 3.
Required approvals
None for the tracker itself (informational / recommendation severity). Downstream
owning workflows carry their own gates:
Policy-exceeding concession during lease-up (row 13).
Fair-housing-flagged response (row 3).
Lender final submission (row 14), composed in
workflows/executive_operating_summary_generation.
Pricing / rent-schedule change via workflows/market_rent_refresh overlay gate.
Equity-call initiation via fund capital overlay.
Failure modes
Conflating TCO with CCO for the ramp anchor. Fix: anchor is CCO when both exist
and differ; annotate cco_to_first_lease_days (proposed) when CCO is the anchor.
Comparing actual lease-up pace against a changing underwriting curve. Fix: the
underwriting curve is frozen at delivery; any change is logged via fund overlay
and annotated explicitly.
Treating concession_rate and concession_depth_vs_market (proposed) as
equivalent. Fix: concession_rate is an internal ledger metric; concession_depth_vs_market
(proposed) is the comp-set-normalized tradeoff sentinel. Both are required.
Drafting renewal offers from within this pack. Fix: offer drafting is delegated to
workflows/renewal_retention; this pack surfaces the queue only.
Authoring lender submissions. Fix: lender output is composed in
workflows/executive_operating_summary_generation and gated at row 14.
Initiating or adjusting equity calls. Fix: call initiation is fund overlay; this
pack reports posture only.
Proposing screening-policy changes to close an approval_rate disparity. Fix:
screening policy is overlay; fair-housing findings route through
workflows/lead_to_lease_funnel_review at row 3.
Reporting ramp pace without a frozen underwriting curve. Fix: if underwriting curve
is missing, refuse to compute lease_up_pace_vs_underwriting (proposed) and
noi_ramp_vs_underwriting (proposed); surface the gap.
Sample overlay treated as authoritative rent comp or concession benchmark. Fix:
confidence banner surfaces sample-tag explicitly; Excel-sourced references are
the most stale-data-sensitive inputs in this pack.
Edge cases
Model unit not ready at first-lease week. Anchor (CCO) may have been achieved
but the model unit finishes or staging are incomplete. Flag as
model_unit_readiness_gap — route to construction_manager + leasing_manager.
Do not propose a pricing offset. Traffic is expected to underperform until the
model is usable; ramp-pace variance in this window is flagged with an explicit
cause attribution so it does not trigger spurious
lease_up_pace_vs_underwriting (proposed) alarms without context.
Marketing rentup gap. Marketing launch is delayed or underfunded vs the
underwriting assumption; total lead volume cannot produce the required executed
leases at the planned conversion. Flag as marketing_rentup_gap — route to
leasing_manager + marketing_lead; escalate to regional_ops_director if unresolved
after one period. Do not infer the gap from pace alone; require cross-reference
against the marketing_channel_mix benchmark + available spend data, else annotate
as an attribution gap.
Concession-vs-rent tradeoff above tolerance. Property is achieving headline
leased_occupancy in-line with underwriting but at concession depth exceeding the
comp-set benchmark — i.e., velocity is bought with concession dollars. Flag as
concession_rent_tradeoff_above_tolerance — escalate to leasing_director +
asset_mgmt_director -> investments_lead. The forward impact is on
noi_ramp_vs_underwriting (proposed) and on first-renewal retention; annotate the
linkage in the narrative.
First-renewal window straddles stabilization crossover. Property crosses
stabilization before the first-cohort leases renew. Continue tracking first-renewal
retention here until the first-cohort renewals conclude, then hand off entirely.
Property delivered in phases. Multi-building delivery with staggered CCO dates.
Anchor is earliest CCO for aggregate pace; per-building anchors preserved in the
narrative for per-building variance. Overlay governs whether the underwriting curve
is phased or aggregate.
Lease-up capital reserve fully drawn. Unfunded reserve drawn to zero while the
property is still ramping; equity-call posture becomes operational rather than
schedule-only. Escalate via equity_call_timing_drift path.
Lender reporting waiver in place. Any waived status requires documented waiver
pointer; missing waiver documentation flips status to missed for the operator
view regardless of the lender-calendar marking.
Ground-up property with no prior operating history. All T30/T90 baselines fall
back to segment benchmark (funnel_conversion_benchmarks__middle_market.csv) with
confidence: low annotation.
Post-delivery unit count change. Final certified unit count differs from
underwriting (e.g., combined unit, converted amenity space). Pace metrics rebase
to certified unit count; underwriting curve is marked for fund-overlay
reconciliation separately.
Example invocations
"Run the monthly lease-up review for South Fork, month 4 post-delivery. Flag ramp pace vs underwriting."
"Concession depth vs market check for Willow Creek lease-up this month."
"Build the lease-up scorecard for South Fork; include NOI ramp, lender reporting status, and first-renewal readiness."
"What's the traffic source mix at Atlantic Grove this month? Include broker-assist rate."
"Is South Fork ready to hand off to steady-state monthly ops review?"
Example outputs
Output — Monthly lease-up review (abridged, South Fork, month 5 post-delivery, April 2026)
Delivery anchor. CCO 2025-11-18; month 5 post-delivery; cco_to_first_lease_days
(proposed) actual 14 days. Underwriting curve frozen at delivery.
Lease-up pace.leased_occupancy 48.3%; underwriting target at month 5 is 55.0%.
lease_up_pace_vs_underwriting (proposed) = 0.88. Below overlay tolerance band (0.90
floor per reconciliation_tolerance_band.yaml::lease_up_pace_band). Second
consecutive month below band; cadence escalates to weekly per trigger policy; hand off
to leasing_director + asset_mgmt_director.
Concession posture.concession_rate 62% of new leases carry a concession.
concession_depth_vs_market (proposed) +0.4 months offered vs market benchmark of
1.2 months (comp: concession_benchmarks__charlotte_mf.csv@2026-03-31 (starter)).
Within overlay tolerance this month but trending toward the concession-vs-rent
tradeoff ceiling.
Funnel.lead_response_time p50 within band. tour_conversion within band.
application_conversion within band. approval_rate within band; no fair-housing
disparity flag. move_in_conversion within band.
Traffic source mix. Paid search + broker-assist together carry 68% of executed
leases. broker_assist_rate (proposed) = 31%, above segment benchmark of ~18%.
Narrative: broker-assist overperforming; paid-search CPL rising. Marketing rentup
gap not yet flagged but watched.
Model unit performance. Ready since month 2. model_unit_tour_conversion
(proposed) = 46%, above overall tour_conversion of 38%. Model unit is an
above-average converter; no readiness gap.
First-renewal readiness. No leases yet in T60 first-renewal window (earliest
cohort first-renewal in month 12).
NOI ramp. Month 5 NOI at 61% of underwriting NOI ramp at month 5.
noi_ramp_vs_underwriting (proposed) = 0.61. Behind underwriting; concession depth
and operating expense ramp both contributing. Not yet escalated (requires two
consecutive months below); watched.
Rent comp & market gap.market_to_lease_gap within comp-set expected range;
headline rents in-line with comp set of stabilized product. Comp: market_rents__charlotte_mf.csv@2026-03-31 (starter).
Lender-reporting compliance. Quarterly lease-up report due 2026-04-15.
lender_reporting_compliance_status (proposed) = on_time for the March report
submitted 2026-04-02. No misses.
Equity-call schedule. Forward 90-day: one call scheduled 2026-06-10 at
planned_amount $4.2M; committed_amount $4.2M. Coverage within band; no drift.
Stabilization crossover. Not reached. Overlay threshold is leased_occupancy >=
92% for 3 consecutive months. Handoff to workflows/monthly_property_operating_review
deferred.
Top-3 watch items.
lease_up_pace_vs_underwriting (proposed) = 0.88 second month running — weekly
cadence begins; route pricing question to workflows/market_rent_refresh.
concession_depth_vs_market (proposed) +0.4 months above market — within
tolerance but trending; narrative flags tradeoff risk.
noi_ramp_vs_underwriting (proposed) = 0.61 — watched; second-month flag triggers
escalation to investments_lead.