Skip to content

Rent Roll

Open Rent Roll

Overview

The Rent Roll is a one-page snapshot of every rental unit across the client’s portfolio as of a point in time. It answers the questions a landlord asks every month: “What am I collecting right now? What am I leaving on the table? Which units are vacant?”

Rows are units. Columns show the unit, the active lease (if any), current rent, market rent, occupancy status, and lease-end date.

Report layout

Header: Client name, as-of date (defaults to today), total units, occupied count, vacant count, monthly rent collected, monthly market rent, monthly opportunity (market − collected).

Filters: Property (multi-select), Status (All / Occupied / Vacant), Expiring within (30/60/90 days).

Table columns:

ColumnNotes
PropertyProperty name (link).
UnitUnit label (link).
TenantTenant name on the active lease, or ”—” if vacant.
Current rentLease.baseRent on the active lease at the as-of date, normalised to monthly (bi-weekly × 26/12, semi-monthly × 2, weekly × 52/12).
Market rentUnit.marketRent.
Opportunitymarket − current (positive = under-market; negative = over-market).
Lease endLease.endDate, or “Month-to-month” when blank.
Days to endComputed from as-of date; colour-coded (red ≤ 30, amber ≤ 60).
StatusOccupied / Vacant / Off-market / Owner-occupied.

How it’s computed

The report driver walks every Unit under each Property in scope, then joins the active Lease (status active or pending, startDate <= asOf and (endDate null or >= asOf)).

  • Units with no active lease appear as Vacant — their Unit.status is used when it’s something more specific than Vacant (Off-market, Owner-occupied).
  • Market rent comes from Unit.marketRent. If unset, the opportunity column shows ”—” rather than a misleading zero.
  • Current rent normalisation always converts to a monthly equivalent so totals add up. The row still shows the native frequency in a tooltip.
  • Expiring soon does not count month-to-month leases (no endDate). Those are considered indefinite.

Export

Export CSV

Exports the currently-filtered rows to CSV with the same columns. The header row includes the as-of date and the filter state so the file is self-describing when emailed to the client.