Affinity Property Management
Portfolio Intelligence Dashboard
Portfolio Manager
Live from Yardi scheduled reports (Rent Roll, Box Score, AR Aging, Work Orders, Leasing Activity) and the Payables Aging Report — sample data pull, 138 properties.
Portfolio at a glance

Cash flow strain by property

Composite score from AR aging, upcoming payables vs. cash on hand, lease expirations/renewal ratio, and overdue work order share.
PropertyPMUnitsOccupancy RiskTop driver

Portfolio risk summary

Properties flagged Medium risk or above
    Accounts receivable aging
    Current
    31–60 days
    61–90 days
    90+ days

    Leasing activity — expiring leases vs. renewal ratio

    Bar = leases expiring in next 60 days · label = signed-renewal ratio this month

    Work order backlog

    Open work orders, share overdue >3 days
    Property
    Portfolio Manager
    Data refresh & coverage notes
    4 properties removed — management transferred: Aspen Hills (ap562), Hood Manor (ap564), Lakeside Apartments (ap565), and Crown Village (ap563) have been removed from this dashboard entirely (all data, all views) since management of these properties has transferred away from Affinity. The dashboard now covers 138 properties, down from 142.
    Refreshed 08/11/2026 (pulled 08/10/2026): Box Score, AR Aging, Gross Potential Rent, and Rent Roll were re-pulled for all 142 properties — occupancy, % Leased/% Trend, AR aging, rent roll, real projected income (GPR Rental Income + carryover), and Monthly NOI for the 124 budgeted properties are all current as of this pull. Balance Sheet (With Period Change) was re-pulled for 136 of 142 properties (Accrual + Cash books) — cash on hand (operating-only), mortgage balance, and this period's distribution activity are refreshed; portfolio operating cash moved from ~$33.3M to ~$30.8M since 08/06. Work Order was re-pulled for all 142 (open/overdue/emergency counts, avg. completion time). New this refresh — avg. days vacant is now real for 119 of 142 properties, from a newly supplied Make Ready Status Report (averaging "#Days Vacant" across each property's currently-vacant units); the other 23 properties currently show no vacant units in that report ("no vacant units") rather than a guess. Note this is a different metric from "avg. unit turn time" (historical days-to-complete from the Unit Turn Report) — this one is how long today's vacant units have been sitting empty. Escrow/reserve coverage broadened — this refresh's escrow categorization now also picks up Cash - Insurance and Cash - Taxes lines from the Balance Sheet's Cash section (previously only "Escrow -" prefixed lines were captured), which is why some properties now show escrow/reserve balances that read $0 in the prior refresh even though the underlying cash was there both times — e.g. Main Street Village (ap001) now shows $490,328 (Insurance $88,928 + Property Tax $401,400) versus $0 before. 104 of 136 properties now show a nonzero escrow/reserve balance, up from a narrower set previously. EPMS - Resident Renewal (new report) was cross-checked against the existing Lease Expiration report, aggregate counts only — no tenant names or emails were pulled into the dashboard, per your call on how to use this data. The two reports mostly agree (average difference of 4-5 leases across the 30/60/90-day buckets), but 12 properties show a meaningfully larger gap between the two sources (notably ap306, ap330, ap293, ap360 — the Lease Expiration report shows the same count across all of 30/60/90 days for a few of these, which is worth a second look). The dashboard's expiring-lease figures still come from the Lease Expiration report as before; this was a validation pass, not a data change. Held off this round, per your call: the new weekly Lead Stage Summary Report (leads → tours → applications → approvals → move-ins) isn't wired in yet. Relatedly, the underlying Resident Activity Detail and Traffic Detail files in this batch are raw, per-event logs rather than pre-aggregated counts — turning them into the leasing funnel numbers (leads/tours/applications/approvals) would mean re-deriving the same kind of aggregation the Lead Stage Summary Report already does, so those fields (leads, tours, applications, approvals, move-ins, move-outs, renewals signed) were left unchanged this round rather than guessed at from the raw logs.
    Refreshed 08/06/2026 with August 2026 data: AR aging, occupancy, rent roll, % Leased / % Trend, and vacant-unit turnover detail are updated for all 142 properties (Box Score, Rent Roll w/ Lease Charges, Financial Aged Receivable, Unit Availability Details, Gross Potential Rent). Work orders, leasing/traffic activity (leads, tours, applications, approvals), and resident activity (move-ins, move-outs, renewals, units turned) are refreshed for all 142 from Work Order, Traffic Detail, and Resident Activity reports. Mortgage balance, this period's principal paydown, escrow/reserve balances, cash on hand, and last-period owner distributions are refreshed for 136 of 142 properties from today's Balance Sheet (With Period Change) Accrual + Cash-book batches (6 still have no Balance Sheet on file: ap291, ap370, ap359, ap397, ap398, ap399). Total Vacancy Loss (MTD) is refreshed for all 142 from today's Gross Potential Rent report's per-unit Vacancy column. Projected-current-month income is refreshed using today's GPR Market Rent × today's Box Score % Leased, plus the same prior-month non-rent-income carryover as before, for the 133 properties with a P&L on file — see the "still missing a forecast" list below for the 9 that don't. New this refresh — avg. unit turn time is now real for 39 of 142 properties, from a newly supplied Unit Turn Report (average days-to-complete across turns completed in the trailing 12 months); the other 103 properties aren't in that report and still show "no Unit Turn Report data" rather than a guess. Per-turn work-order cost wasn't populated from this report — the amount column was blank/zero for every row supplied, so "avg. turn cost" stays unavailable. AP aging was NOT refreshed this round — no updated Payables Aging Report was included in today's batch, so AP figures still reflect the 08/03/2026 pull (real for 127 of 142; ap191, ap192, ap262, ap324, ap356, ap393, ap396, ap397, ap398, ap549, ap562, ap563, ap564, ap565, ap576 remain estimated). Renewal offers sent, 30/60/90-day lease-expiration counts, and average days vacant are also not refreshed (still only populated for the original 38 properties — no report distinguishing these for the rest was included). NOI stays ratio-derived from rent roll. A new "Effective Rent" per-unit report was included again but still isn't wired into the dashboard's data model. Still missing a forecast (9 properties, no P&L on file to seed the non-rent-income estimate): ap291 (The Byway Retail), ap370 (Garden Ave), ap574 (Terra Lofts), ap575 (The Crossing), ap359 (Tidewater HOA), ap397 (Riverfront Apartments), ap398 (The James), ap399 (Schurman Cottages), ap576 (Adams Square) — send a 12-Month Statement P&L or Income Statement for any of these and I'll add their forecast. Two Yardi entity codes in today's batch were excluded as non-properties: "consvams" (Consolidated VAMS — a zeroed rollup placeholder, not a real property) and ap905 (Affinity Property Management's own corporate entity code, 0 units). Neither represents an actual managed property. Property-list cross-check against SharePoint Info Hub is complete — 10 properties on the dashboard weren't found on the Info Hub list; reviewed and kept as-is (new properties still in setup, plus one to be confirmed directly on the Info Hub list) rather than removed. Last distribution paid is now real for 98 of 142 properties, from a newly supplied Yardi General Ledger export of each property's Capital Withdrawal equity accounts (Dec 2025–Aug 2026, Accrual + Cash books) — this replaces the prior current-period-only figure (which read $0 for most properties simply because this cycle hadn't posted a distribution yet) with each property's actual most recent distribution, whatever date it landed. The Cash Flow/Distributions tab and each property's detail page now also show "Remaining distributable," which nets that real payout against this cycle's estimate when it landed in Aug 2026, so a property that already took its Aug distribution isn't shown as if the full monthly estimate were still sitting unpaid. The other 44 properties have no distribution posted in this GL export and are marked "No distribution on file" rather than $0. "Cash on hand" was redefined to operating cash only — it previously summed every Balance Sheet cash line ("Total Cash"), which mixed in restricted funds; it now includes only Cash - Operating, Cash - Operating Prior MC, Cash - Petty, and Cash - Depository Account/New per property, for 136 of 142 properties with a Balance Sheet on file. Excluded: security deposit accounts (offset by a matching liability, not available cash), tax/insurance/repair/property-tax reserve and escrow accounts (earmarked, not distributable), Cash - Owner Held, Cash - Capital Account, and Cash - Construction Account. Portfolio-wide this drops "cash on hand" from roughly $68.8M to $33.3M — the $35.5M difference sat almost entirely in those excluded accounts, most notably $17.8M of Cash - Owner Held concentrated at just two properties (ap226: $13.1M, ap341: $3.3M) that isn't confirmed to be freely available operating cash. This feeds every "cash on hand" figure on the dashboard, including the 6-month cash flow forecast's starting balance and the payables-coverage risk flags. Monthly NOI is now real income minus budgeted expenses for 124 of 142 properties, from newly supplied Yardi 12-Month Budget reports for Aug 2026 (23 properties on the Cash book, 101 on the Accrual book — each pulled in that property's own accounting basis). Rather than use the budget's income line, the income side is the real Rental Income total from each property's Gross Potential Rent report (Market Rent already netted for loss-to-lease, vacancy, and concessions/write-offs — i.e. what's actually billed), plus a non-rent-income carryover, already used elsewhere on the dashboard, since that reflects actual current billing rather than a plan; the budget is used only to fill the expense side, since real GL expense detail on file so far covers just Aug 1–6. This blended figure feeds everywhere NOI drives downstream calculations — owner distribution calculations, the 6-month cash flow forecast, and payables-coverage risk flags. Each property's detail page shows real income, budgeted expenses, the resulting NOI, and — for reference only — the fully-budgeted NOI (both income and expenses from budget), under "August 2026 NOI — real income vs. budgeted expenses." Delinquency/AR aging is intentionally not netted into NOI — it stays a separate collection-risk signal on each property's AR Aging card. 18 properties have no usable August budget line and keep the ratio estimate: ap291 (The Byway Retail), ap359 (Tidewater HOA), ap370 (Garden Ave), ap397 (Riverfront Apartments), ap398 (The James), ap399 (Schurman Cottages) weren't included in either budget batch; ap292 (35 Club), ap293 (Orchard Crossing), ap315 (Audubon Square), ap318 (The Archibald), ap319 (Douglas Grove), ap388 (Timberview 6), ap393 (426 NW 11th), ap396 (Marquam Trail), ap547 (Wingate Square), ap574 (Terra Lofts), ap575 (The Crossing), ap576 (Adams Square) were included but came back with an all-zero budget (likely not yet built out in Yardi for this cycle). A budget-vs-actual expense variance view using the GL Analytics actuals is still a follow-up once more of the month has posted — those 12 files only cover Aug 1–6 and would understate expense accounts that trickle in through the month. Correction — "real projected income" was overstating revenue and has been fixed. The prior version of this figure was Market Rent × Box Score % Leased, which uses list-price rent rather than what's actually signed and billed, so it ignored loss-to-lease and concessions. It's now the Rental Income total straight from each property's Gross Potential Rent report — Market Rent already netted down for loss-to-lease, vacancy, and concessions/write-offs — plus the same non-rent-income carryover as before. Fixed for all 133 properties with a Gross Potential Rent report and P&L on file; portfolio-wide, this brings projected income down by about $3.2M/month in aggregate (roughly 16% lower than the old proxy), which flows straight through into Monthly NOI for the 124 budgeted properties (real income minus budgeted expenses). Each property's Gross Income Trend and "August 2026 NOI" cards reflect the corrected figure.
    This dashboard covers 142 properties (expanded from the original 38 on 07/30/2026; see prior refreshes for that history). Coverage is not fully uniform across all 142 — see above and the footer for exact per-field counts and the properties still missing a data source. AR aging, occupancy, rent roll, % Leased/% Trend, work orders, turnover, vacancy loss (MTD), turnover detail, and leasing/resident activity are real figures for all 142 properties as of today's (08/06/2026) refresh. AP aging (127 of 142), mortgage balance, principal paydown, escrow/reserve balances, and cash on hand (136 of 142) are real but reflect the most recent report each field has on file, not necessarily today's pull — see the banner above for exactly what's current vs. carried forward. "Cash on hand" is operating cash only (Cash - Operating, Operating Prior MC, Petty, and Depository Account/New) — it excludes security deposit accounts, tax/insurance/repair reserve and escrow accounts, Owner Held, Capital Account, and Construction Account, since those aren't freely available operating liquidity. Last distribution paid is real for 98 of 142 properties, from the Yardi General Ledger's Capital Withdrawal history (any date, Dec 2025–Aug 2026) rather than the current period alone. Across every property with debt-service data, mortgage principal is not expensed on the P&L — it's booked as a Balance Sheet paydown — so real debt service reflects Interest only; principal is shown as a separate real figure on Property Detail rather than combined into one P&I number, since several properties post no amortization in a given period. Monthly NOI is now a blend of real and budgeted data for 124 of 142 properties: income is the real Rental Income total from each property's Gross Potential Rent report (Market Rent netted for loss-to-lease, vacancy, and concessions/write-offs), plus a non-rent-income carryover, already shown under Gross Income Trend, and expenses are the approved Aug 2026 budget's Total Operating Expenses (book-matched to each property), used only because real GL expense data on file so far covers just Aug 1–6. This replaces both the original rent-roll ratio estimate and the brief prior version of this dashboard that used a fully budgeted NOI (income and expenses both from budget) — that fully-budgeted figure is still shown on each property's detail page for reference. The remaining 18 properties (no usable Aug budget on file) keep the original rent-roll ratio estimate. Estimated fields are marked (est.) throughout. Management fee is booked as an operating expense (reflected in NOI) and is no longer shown as a separate Owner Distribution line. "Est. cost of open work orders" and "avg. turn cost" remain unavailable — no reliable per-order/per-turn cost data has been supplied by Yardi yet. 30/60/90-day lease-expiration counts are now real for 134 of 142 properties (up from 38 of 142), from a newly supplied Lease Expiration report — the other 8 (ap191, ap192, ap324, ap359, ap396, ap397, ap398, ap564) aren't in that report and still show 0. "Renewal offers sent" and "average days vacant" remain populated only for the original 38 — the Lease Expiration report doesn't cover offers sent, and no report distinguishing average days vacant for the other 104 has been supplied yet. A GL Analytics export (12 files, full chart-of-accounts detail per property) was also supplied on 08/06/2026 and remains not yet wired into the dashboard for expenses — it only covers Aug 1–6, 2026 so far, and expense accounts (repairs, utilities, contractor invoices) trickle in as bills are entered, so it would understate a full-month expense total if used as-is. That's why the budgeted expense line is used instead for NOI (see above). It's still a follow-up once more of the month has posted: a true budget-vs-actual expense variance view, using this real GL data once it's less partial, is the planned next step.