A rent roll becomes an underwriting summary: occupancy, loss-to-lease, vacancy loss, delinquency, unit mix, a 12-month lease expiry ladder, month-to-month leases and mark-to-market upside.
Who it is for: Small multifamily investor, property manager or analyst who receives a rent roll export and must summarise it for underwriting, a lender or an owner report.
Format: Claude skill pack · Version: 1.0.0 · Tested on: Python 3.13.5 (standard library only)
What it does
It finds the header in most rent roll exports and reads one row per unit. Status decides occupied, notice, vacant or non-revenue (models, down units); with no status, a unit without a tenant is vacant. A unit listed twice counts once. Gross potential rent is market rent on revenue units; loss-to-lease is market minus current rent on occupied units; vacancy loss is market rent on vacant units. Leases ending in each of the next 12 months form the expiry ladder; leases past their end date are month-to-month. Units below market by your threshold are listed.
What you need
- Claude.ai with code execution switched on (or Claude Code, or just Python 3.10+)
- Your rent roll exported as CSV or Excel
5-minute setup
- Claude.ai: open Settings → Capabilities → Skills, click Upload skill and pick
claude-ai-upload/rent-roll-analyzer-pro.zip. - Claude Code: copy the folder
skills/rent-roll-analyzer-prointo~/.claude/skills/. - Start a new chat. Attach your file and say: "Use rent-roll-analyzer-pro. Summarise this rent roll as of 1 November: occupancy, loss-to-lease, delinquency and lease expirations by month".
- Claude runs the script and gives you the files listed under Outputs. Check them before you act on them.
Try it with the sample
Run the sample (a fictional 8-unit rent roll):
python3 skills/rent-roll-analyzer-pro/scripts/core.py samples/rent-roll-2026-11.csv --as-of 2026-11-01 --out out
You should see 85.7% physical and 82.8% economic occupancy, loss-to-lease 470.00 a month (5,640.00 a year), 2 delinquent units owing 2,075.00, 2 leases ending in November 2026 and 2 month-to-month leases.
Settings you can change
| Option | Default | What it is |
|---|---|---|
rentroll |
(required) |
Rent roll CSV or XLSX, one row per unit |
--as-of |
today |
Date the rent roll is as of |
--below-market-pct |
10 |
Gap to market rent that flags a unit (1-50) |
--us-dates |
off |
Read 03/04/2026 as March 4 |
--out |
out |
Output folder |
What goes in and what comes out
Inputs: Rent roll CSV or XLSX (one or several properties); Optional: as-of date, below-market threshold
Outputs: report.md with the summary; unit-mix.csv; expiry-ladder.csv and expiry-ladder.svg; below-market.csv; delinquent.csv; row-issues.csv
AI disclosure and limits
This product does not call an AI model at run time. It was built by Oarsman AI's AI agents and checked by the automated tests shipped with it.
Limits: - One row per unit; rolls that list each charge on its own line need combining first. - Monthly rents; weekly rents need converting first. - Figures come only from the rent roll; not investment advice.
Not tested by us: - rent rolls with several lines per unit (charges listed separately) - XLSX files in the shipped tests (CSV only) - commercial rent rolls with CAM or percentage rent
Files
- oarsman-rent-roll-analyzer-pro-v1.0.0.zip
- CHANGELOG.md
- QA-REPORT.json
- README.md
- SPEC.md
- SUPPORT.md
- TROUBLESHOOTING.md
- VERSION
- VIDEO-SCRIPT.md
- claude-ai-upload
- diagram.mmd
- diagram.png
- preview.png
- samples
- skills
- tests
Help
Self-serve: see TROUBLESHOOTING.md (fixes and FAQ). There is no call, chat or email support. Fixes ship as new versions at your download link. Refund: 14 days, works as described, through the checkout platform.