How to reconcile a rent roll with AI
A method for AI on a commercial rent roll: extract it into a fixed template, tie it to the T-12 and leases, and hand the analyst a short list of gaps.
King & Company
In short
AI is useful on a rent roll when it does three jobs in order: pull the seller's rent roll into your own fixed template with a source page on every row, run written tie-out checks against the T-12, the offering memorandum, and the lease abstracts, and produce a short exceptions list for the analyst. The checks should be arithmetic that runs the same way every time, and the analyst decides which gaps matter and which go back to the seller.
To reconcile a rent roll with AI, have the model extract the seller's rent roll into your own fixed template, run a set of written checks that compare it to the T-12, the offering memorandum, and the leases, and hand the analyst a short list of exceptions with the source page for each. The analyst then decides which gaps are ordinary timing differences and which are questions for the listing broker.
This article is the detailed version of the rent roll step in our guide to underwriting commercial real estate faster with AI. It is written for the analyst or associate who receives a rent roll on a new deal and spends the first morning getting it into shape.
Why does rent roll reconciliation take so long by hand?
Every property management system exports a rent roll differently. One puts each tenant on a single row, another spreads a tenant across several rows for base rent, recoveries, and parking, and a PDF export often has merged cells and page breaks in the middle of a tenant. Before anyone can check the numbers, someone has to get the document into a shape the team's model accepts.
The checking is the valuable part. An experienced analyst knows that the rent roll should roughly match the rental income on the T-12, that the square footage should agree with the offering memorandum, and that the largest tenants' rents should match their leases. On a busy week that checking competes with the retyping, and the retyping usually wins.
Step one: define your template before you touch the seller's file
The model needs a fixed target. Write down the columns your underwriting model expects, in order, with a one-line definition of each. A typical office or retail set looks like this:
| Column | Definition to write down |
|---|---|
| Suite or unit | As shown on the rent roll, with no renumbering |
| Tenant | Legal name if stated, otherwise the name shown |
| Square feet | Rentable square feet, and say so if the rent roll shows usable |
| Lease start and expiry | Dates as stated, in one date format |
| Base rent | Annual amount, with the monthly figure converted if needed |
| Rent per square foot | Calculated by your formula, never copied from the seller |
| Recoveries | Separate from base rent, with the recovery type if stated |
| Escalations | Next step date and amount, if the rent roll shows them |
| Options | Renewal, termination, or expansion, if the rent roll shows them |
| Source page | The page of the seller's document this row came from |
The definitions are what make the output consistent. "Rent" means different things on different rent rolls, and a model that has been told your team means annual base rent excluding recoveries will separate them for you. The same applies to vacant suites, which should appear as rows with a blank tenant and not be dropped.
Multifamily rent rolls need different columns (unit type, market rent, in-place rent, concessions, move-in date, lease end), but the principle is the same.
Step two: extract into the template, with a source page on every row
Give the model the rent roll and the template, and tell it to fill one row per suite or unit, record the page each row came from, and leave a cell blank and say so when the document does not state a value. Anthropic's guidance on reducing hallucinations recommends both restricting the model to the documents provided and allowing it to say it does not know. A blank cell with a note takes a minute to resolve. A plausible invented escalation date is much harder to find later.
Before any comparison runs, check the extraction itself with two numbers the model cannot argue with: the row count against the count of suites on the source, and the column totals against any totals the rent roll prints. If either is off, the extraction is fixed before anything else happens.
When the seller sends the rent roll as an Excel file, read it as data and copy the values into your own clean workbook. Anthropic's documentation for Claude for Excel warns that files from external sources "can contain hidden instructions that manipulate the add-in," and a seller's workbook is an external file.
Step three: run the tie-out checks as written arithmetic
This is the reconciliation itself, and it is the part that should not depend on the model's judgment. Write each check as a formula in the workbook or as a short script, so it runs the same way on every deal and an analyst can read exactly what it compares.
- Rent roll against T-12. Annualized base rent from the rent roll beside rental income on the T-12, with the dollar and percentage difference.
- Square footage against the offering memorandum. Total rentable square feet from the rent roll beside the figure the OM states.
- Occupancy. Occupied square feet divided by total, beside the occupancy the OM states.
- Suite count. Rows in your template beside the number of suites the seller's document reports.
- Rent per square foot outliers. Any suite more than a set percentage above or below the property's average, listed with the tenant name.
- Expirations. Every lease expiring inside your hold period, with tenant, square feet, and share of total rent, whether or not the OM mentions it.
- Leases against the rent roll. For the largest tenants, base rent, expiry, and options from the lease abstract beside the same fields on the rent roll.
The last check is where most of the value is, and it depends on having abstracts. If your team abstracts leases with AI, the method in how to abstract a commercial lease with AI produces abstracts with page citations that this check can use directly.
Step four: read the exceptions list, not the whole rent roll
The output the analyst actually reads is a short list. Each line names the check, shows the two numbers and the difference, and points to the source page on each side. A clean rent roll might produce three or four lines. A messy one might produce twenty, which is itself useful to know on day one.
A failed check is a question, not a finding. Sellers' documents disagree for ordinary reasons: a rent roll dated after the T-12 period, a tenant in free rent, a suite that changed hands mid-year. The model can suggest a likely explanation for each gap, and the analyst decides whether it holds, which gaps go back to the listing broker, and which change the underwriting.
| Work | Who does it |
|---|---|
| Extracting the rent roll into your template | AI, with a source page per row |
| Row count and total checks on the extraction | Written checks |
| Tie-outs against the T-12, OM, and leases | Written checks |
| Suggesting a likely reason for each gap | AI, marked as a suggestion |
| Deciding which gaps matter | Analyst |
| Questions back to the seller | Analyst or broker |
| Sign-off before the numbers enter the model | Analyst |
Where should this live: a chat window, Excel, or a packaged skill?
A team can start in a chat window on a business plan by uploading the rent roll and pasting the template and instructions. That works for a trial and becomes inconsistent across a team, because every analyst pastes a slightly different version.
Once the method holds up on a few deals, the template, definitions, and checks belong in one place that everyone uses. In Claude, that is a packaged skill, which we describe in Claude skills for commercial real estate. The checks themselves are better as formulas in a master workbook or a short script inside the skill, because written arithmetic gives the same answer every time.
How to test it before the team relies on it
Pick three deals your team has already reconciled by hand, ideally one clean, one messy, and one multifamily or mixed-use if you do both. Run the method on each and compare two things: whether it found the exceptions the analyst found, and whether it found any the analyst missed. Then look at the time, including the time spent reviewing the output. If the method misses something an analyst caught, write a new check for it, which is how the check list gets better.
Rent roll reconciliation is one of the workflows we build with brokerage and investment teams, against their own template and their own deals. If you want to walk through yours, you can get in touch.
Common questions
Can AI read a rent roll PDF and put it into Excel?
Yes, for most rent rolls exported from a property management system. Give the model a fixed list of columns, one row per suite or unit, and require the source page for every row. Have it leave a cell blank and say so when the document does not state a value, then check the row count and totals against the PDF.
What should a rent roll be reconciled against?
At minimum, the T-12 rental income line, the square footage and occupancy stated in the offering memorandum, and the lease abstract or lease for each of the largest tenants. Each comparison should show the difference, so the analyst sees the size of the gap and not only that one exists.
Can I use Claude or ChatGPT for rent roll reconciliation?
Either can do the extraction and draft the comparison on a business plan, as long as the checks themselves are written down as formulas or a script and not left to the model's judgment each time. The reconciliation is only as dependable as the template and the checks your team defines.
Is there a standard commercial rent roll template?
There is no single industry standard, which is part of why reconciliation takes so long. The template that matters is your own: the columns your underwriting model expects, with a written definition of each, such as whether rent is monthly or annual and whether it includes reimbursements.
How long does AI rent roll reconciliation take?
We do not quote a general figure, because it depends on the property type, the number of suites, and how clean the seller's files are. Test the method on three rent rolls your team has already reconciled by hand and compare both the time and the exceptions it found.