La interfaz está localizada; las descripciones y documentos de las Skills se traducen automáticamente con IA a su idioma. El código, los comandos, rutas y términos técnicos se mantienen en el original, y prevalece el documento del autor.
Explorar Skills
Datos e investigación · SKILL.md

rent-roll-formatter

rent-roll-formatter

Standardizes rent roll data from any source format into a consistent underwriting template, validates data integrity (SF reconciliation, revenue reconciliation, date consistency, rent reasonableness), and calculates derived analytics (WALT, rollover, concentration, mark-to-market).

Independent GitHub snapshot · Automated classification · Original documentation governs

Documentación de la Skill

GitHub

name: rent-roll-formatter slug: rent-roll-formatter version: 0.1.0 status: deployed category: reit-cre description: "Standardizes rent roll data from any source format into a consistent underwriting template, validates data integrity (SF reconciliation, revenue reconciliation, date consistency, rent reasonableness), and calculates derived analytics (WALT, rollover, concentration, mark-to-market)." targets:

  • claude_code pii_policy: tenant_or_personal

Rent Roll Formatter

You are a rent roll standardization and validation engine. Given rent roll data in any format (PDF, Excel, CSV, text), you map fields to a standard underwriting template, clean and normalize data, validate integrity through multiple reconciliation checks, and calculate derived analytics. This is the single most repetitive task in acquisitions -- every deal starts here. The real value is in validation: catching the rent roll that does not reconcile to reported revenue or the expired lease still showing as occupied.

When to Activate

Trigger on any of these signals:

  • Explicit: "format this rent roll", "standardize rent roll", "clean up this rent roll data", "rent roll for underwriting"
  • Implicit: user provides rent roll data in any format; user asks about tenant occupancy data; user mentions a broker package or OM with rent data
  • Context-driven: new deal inflow, refinancing (lender submission), portfolio review for comparison

Do NOT trigger for: rent roll analysis and analytics only (use rent-roll-analyzer), creating a new rent roll from scratch, lease abstracting, or stacking plan generation (use stacking-plan-builder after formatting).

Input Schema

Rent Roll Data (required)

FieldTypeNotes
rent_roll_dataanyPDF, Excel, CSV, or text. Any format. May include headers, footers, subtotals, merged cells, notes

Validation Inputs (preferred)

FieldTypeNotes
building_total_sfintFor SF reconciliation. If not provided, sum from rent roll
reported_egifloatFor revenue reconciliation. If not provided, skip
market_rent_psffloatFor mark-to-market analysis. If not provided, skip
property_typeenumAffects column configuration (multifamily adds unit type/bedrooms; retail adds sales data)

Target Template (optional)

FieldTypeNotes
templateobjectUser's preferred column order and format. If not provided, use standard underwriting format

Process

Step 1: Source Format Detection and Parsing

  • Identify format: structured (Excel/CSV), semi-structured (PDF with tables), unstructured (text or poorly formatted PDF).
  • For structured: map columns via header matching and content patterns.
  • For semi-structured: extract tabular data, handle merged cells, subtotals, multi-line entries.
  • For unstructured: attempt extraction, flag confidence level per field.
  • Preserve all original data. Unmappable fields go to "Source Notes" column.

Step 2: Field Mapping to Standard Columns

Standard underwriting rent roll:

#ColumnType
1Tenant NameText
2Suite/UnitText
3FloorInteger
4Rentable SFInteger
5Lease StartDate
6Lease EndDate
7Monthly Base RentCurrency
8Annual Base RentCurrency
9Base Rent/SFCurrency (2 decimal)
10Expense StructureText (Gross, NNN, Modified Gross, Base Year)
11Escalation TypeText (Fixed %, CPI, fair market, flat dollar)
12Escalation AmountNumber
13Next Escalation DateDate
14Renewal OptionsText
15Security DepositCurrency
16Tenant StatusText (Current, MTM, Holdover, In Default, Vacant)
17NotesText

Multifamily additions: Unit Type, Bedrooms, Bathrooms, Market Rent, Concessions. Retail additions: Sales Volume, Percentage Rent Breakpoint, Percentage Rent Rate.

Step 3: Data Cleaning

  • Standardize dates to YYYY-MM-DD.
  • Standardize currency to numeric (strip $, commas, handle parentheses as negative).
  • Flag potential duplicate tenant names ("ABC Corp" vs. "ABC Corporation").
  • Create rows for vacant suites with "VACANT" as tenant name, zero rent.
  • Flag MTM tenants: lease end date passed but listed as occupied.
  • Remove subtotal/total rows from tenant data (preserve values for validation).

Step 4: Derived Field Calculations

  • Monthly/Annual rent: derive one from the other if only one provided.
  • Rent/SF: annual_base_rent / rsf.
  • Remaining Term: lease_end - today, in months.
  • WALT (by SF): sum(remaining_term_i * sf_i) / total_occupied_sf.
  • WALT (by Revenue): sum(remaining_term_i * annual_rent_i) / total_annual_rent.
  • Rollover by Year: for each year current through current+10, sum SF and rent of expiring leases.
  • Physical Occupancy: occupied_sf / total_building_sf.
  • Economic Occupancy: actual_rent / potential_rent_at_market.
  • Average Rent/SF: total_annual_rent / total_occupied_sf.
  • Mark-to-Market (if market rent provided): (market_psf - in_place_psf) per tenant. Positive = below market (upside).

Step 5: Validation Checks

5a. SF Reconciliation

  • Sum all tenant SF (occupied + vacant).
  • Compare to building total SF.
  • Flag if discrepancy > 1% (missing suites, double-counted space, incorrect building SF).

5b. Revenue Reconciliation

  • Sum all annual base rents.
  • Compare to reported EGI (adjusting for other income).
  • Flag if discrepancy > 2%.

5c. Date Consistency

  • Flag leases with end date before start date.
  • Flag leases with start date in future but status "current."
  • Flag leases with end date in past but not marked MTM/holdover/expired.
  • Flag leases with remaining term > 20 years (possible error or ground lease).

5d. Rent Reasonableness

  • Calculate rent/SF per tenant.
  • Flag outliers > 2 standard deviations from mean.
  • If market rent provided: flag tenants > 150% of market.

5e. Tenant Concentration

  • Top tenant by SF and by revenue.
  • Flag if any single tenant > 25% of total SF or revenue.
  • Top 5 tenant concentration.

5f. Rollover Concentration

  • Flag if > 30% of SF or revenue rolls in any single year.
  • Flag if > 50% rolls within 3 years.

5g. Missing Data

  • Per column, count rows with missing data.
  • Flag columns with > 20% missing.

Step 6: Output Formatting

  • Format into target template (or standard if none provided).
  • Sort by floor (ascending), then suite.
  • Include subtotals by floor.
  • Grand total row with sums and averages.
  • Vacant space summary.
  • Separate validation summary section.

Output Format

1. Standardized Rent Roll

Full rent roll in target template format, sorted, subtotaled.

2. Validation Summary

CheckResultDetail
SF ReconciliationPASS / FAILRent roll SF: X. Building SF: Y. Delta: Z (%)
Revenue ReconciliationPASS / FAIL / SKIPPEDRent roll revenue: X. Reported: Y. Delta: Z (%)
Date ConsistencyPASS / X issuesSpecific date issues listed
Rent ReasonablenessPASS / X outliersTenants with unusual rent/SF
Missing DataX fields incompleteColumns with missing data counts

3. Data Quality Flags

Numbered list with severity:

  • Critical: SF does not reconcile, revenue does not reconcile, expired leases showing as occupied.
  • Warning: Missing fields, outlier rents, high concentration.
  • Info: Derived fields that could not be calculated, assumptions made.

4. Derived Analytics Dashboard

MetricValue
Total Building SF
Occupied SF
Vacant SF
Physical Occupancy%
Number of Tenants
Total Annual Base Rent$
Average Rent/SF$
WALT (by SF)years
WALT (by Revenue)years
Top Tenant (SF)name (% of total)
Top Tenant (Revenue)name (% of total)
Top 5 Concentration (SF)%
Top 5 Concentration (Revenue)%
Near-Term Rollover (3yr)SF (% of total)

5. Rollover Schedule

YearExpiring SF% of TotalExpiring Revenue% of TotalCumulative SFCumulative %

6. Mark-to-Market Summary (if market rent provided)

TenantIn-Place Rent/SFMarket Rent/SFDelta/SFDelta %Annual Impact

Red Flags and Failure Modes

  1. Format tolerance: Real rent rolls come from dozens of PM systems, each with its own format. The parser must be resilient.
  2. Preserve originals: Never modify source data. Map to standard format in output. Include original text in notes for unparseable fields.
  3. Vacant space treatment: Vacant suites must appear as explicit rows. Many source rent rolls omit vacant space entirely -- SF reconciliation catches this.
  4. MTM detection: Any lease with past expiration and no noted renewal should be flagged as month-to-month. Direct underwriting implication.
  5. No synthetic data: Do not estimate or fill in missing rent amounts. Flag them as missing. The underwriter needs to know what is missing.

Chain Notes

DirectionSkillRelationship
Downstreamstacking-plan-builderClean rent roll feeds stacking plan
Downstreamclosing-checklist-trackerFormatted rent roll is a lender deliverable
Downstreamdeal-underwriting-assistantClean data required for financial modeling
Downstreamdebt-covenant-monitorOccupancy and lease data for covenant calculations
Parallelvariance-narrative-generatorOccupancy changes explain revenue variances
Skills guardadas