Rent Roll Analysis Skill

A rent roll can say 95% occupied while units pay nothing, leases ended last year and a third of the tenants moved in last month. Get the real occupancy, loss-to-lease and the questions to ask before you underwrite.

Rent Roll Analysis Skill cover

What it catches

SituationCodeLevel
Same unit listed twiceduplicate_unithigh
Occupied with no rentoccupied_no_renthigh
Vacant but showing rentvacant_with_renthigh
Lease ends before it startslease_end_before_starthigh
Occupied with no lease datesoccupied_no_lease_dateshigh
Owes more than one month's rentdelinquent_over_one_monthhigh
Rent under 85% of market (adjustable)rent_below_marketnormal
Any balance oweddelinquentnormal
Concession over 10% of rentlarge_concessionnormal
No market rentmissing_market_rentnormal
Lease expired, still occupied (MTM/holdover)lease_expired_holdovernormal
Over 15% of units expiring in one monthexpiration_concentrationnormal
Over 30% of leases started in the last 90 daysrecent_move_in_clusternormal
Lease starts after the roll datefuture_lease_startinfo
Rent over 115% of marketrent_above_marketinfo
Square feet far off the unit type's normsqft_outlierinfo
Model, down or employee unitnon_revenue_unitinfo

Proven on a labeled example

examples/maple-court-nov/ is a fictional 24-row apartment rent roll as of Nov 1, 2026 with 17 planted situations (a unit pasted twice, an occupied unit at $0, a vacant unit with rent, a lease that ends before it starts, a 2,100 balance, a 7,000 sf one-bedroom, a burst of recent move-ins and more). expected.json labels what an underwriter would flag plus GPR 32,560/mo and 2,400 delinquency; the tests assert exactly that in any row order and with EU dates.

What you get

Outputs in out/: report.md, summary.json (occupancy, GPR, loss-to-lease, WALT...), findings.csv, unit_mix.csv, expirations.csv. Exit 0 = no high-priority data problems; 1 = some to fix or explain; 2 = an input problem.

Real Rent Roll Analysis Skill report and passing tests from the labeled example

Quick start

./run_tests.sh
python3 -m rentroll --rent-roll examples/maple-court-nov/rent_roll.csv --as-of 2026-11-01 --name "Maple Court" --out out/

Inputs

  • Rent roll CSV exported from Yardi, AppFolio, RealPage, Buildium, Rent Manager or a spreadsheet: Unit, Status, Market Rent, Rent, Lease Start, Lease End; optional Unit Type, SqFt, Resident, Concession, Balance. Map odd headers with --map rent="Charge Amt".
  • The rent roll date with --as-of. Slash dates that could be US or EU are refused until you pass --date-format.

Use it from your agent

  • Claude Code plugin: this folder is a plugin (.claude-plugin/plugin.json). Try it with claude --plugin-dir ./rent-roll-analysis-skill, or add the folder to your own plugin marketplace.
  • Skill only: copy skills/rent-roll-analysis/ into ~/.claude/skills/ (or your agent's skills folder) and keep this folder where the agent can run python3 -m rentroll.
  • No agent: the CLI works on its own; --help lists every flag.

Honest limits

  • It reads the rent roll as given; it doesn't verify against leases, the T-12 or bank deposits (it tells you where to look).
  • Monthly rents are assumed; one row per unit (sum multiple charge lines first).
  • Commercial rent rolls work for occupancy, WALT and expirations, but CAM, escalations and options aren't modeled.
  • Not appraisal or investment advice.

Requirements

Python 3.9+ (tested on 3.10 and 3.13), no dependencies.

Format and license

Zip, 16 KB, v1.0, 13 files. Use and modify it for yourself and for clients you serve; no resale or redistribution of the kit itself. Full terms in LICENSE.txt.

FAQ

Which systems?
Any CSV export: Yardi, AppFolio, RealPage, Buildium, Rent Manager or a spreadsheet; odd headers map with --map.
Commercial rent rolls?
Occupancy, WALT and expirations yes; CAM and escalations no.
Does it value the property?
No.
How do I get the files?
Right after payment, Stripe’s confirmation page shows your download link.
Refunds?
Email hello@youraitools.co within 14 days if it doesn’t work and we can’t fix it.
Can I pay with crypto?
Yes. Pay the same price in USDC or USDT on Base, Ethereum, Arbitrum, Optimism, Polygon or Solana from the "Pay with crypto" button, with no account or KYC. We check the payment on-chain and show your download links as soon as it confirms.

Get Rent Roll Analysis Skill

Rent roll analysis in one command: occupancy, loss-to-lease, delinquency, lease expirations and the data errors that break underwriting. $29, offline.

Save with a bundle

Pairs well with

Download$29

CAM Reconciliation Skill

CAM reconciliation for every tenant: pro-rata shares, gross-up, caps, admin fee, base-year stops, statements that foot. $29 once, offline.

View CAM Reconciliation Skill
Download$29

Bid Leveling Skill

Level subcontractor bids in one command: plug exclusions and gaps, flag thin allowances and outlier prices, check totals, rank. $29 once, offline.

View Bid Leveling Skill
Download$29

Inventory Reorder Point Skill

Reorder points, safety stock and order quantities for every SKU from a Shopify orders export, plus ABC classes, dead stock and overstock. $29 once.

View Inventory Reorder Point Skill

Related