A few weeks ago a client gave us a rent roll for a single apartment community and, along with it, the file room behind it: more than 5,000 documents for that one building. Leases, renewals, animal addenda, garage and storage addenda, accommodation letters, tenant notices. Then they said, more or less, go find the gaps.
We are early enough as a company that “go find the gaps” is exactly the kind of open question I want. We had a strong hunch about what we would find. But a hunch is not the same as reading every page, and I have learned to be suspicious of my own. So we read all of it. Every lease line on the rent roll, checked field by field against the signed documents that were supposed to support it. Not a sample. All 500-odd units, several thousand individual checks, and for every one of them we wrote down the exact document and clause we read it from.
I want to tell you what we found, because it surprised me, and because the reason it was there turned out to be more interesting — and more expensive — than the errors themselves.
The number, since it is the first thing you want
Across that one building, the rent roll and the signed documents disagreed by more than $125,000.
Some was money the owner was entitled to and simply was not collecting. Some of that was money the owner was mistakenly billing to residents. Those two do not cancel out; they are opposite problems with opposite fixes. And some of it was not billing at all but security deposits held in amounts the leases and their addenda did not support, which is its own kind of exposure the day a resident moves out and asks for the money back. It was spread across roughly 130 units and nearly 200 separate lease items, and that spread is the first clue to what was really going on.
This was not a few enormous errors. It was a couple hundred small ones — more than $125,000 across roughly 130 units.
And the dollars are only the part with a number attached. Underneath them sat a second layer that carries no dollar figure and plenty of risk: leases that were never properly executed, move-in and lease dates that did not match the documents, and files where the governing document was simply missing, so there was nothing on record to establish what the unit was supposed to be paying at all. You cannot put a variance on those. You also cannot afford to not know about them.
Death by a thousand paper cuts
Here is the part that took me a while to see. Nothing we found was dramatic. That is the whole point.
A step-up in rent that a signed renewal clearly called for, and that the rent roll never actually applied, so the resident kept paying last year's rate. A garage addendum pricing a space nobody was billing for. A pet that moved in, got sent an addendum, and the addendum was never signed and never made it onto the rent roll, so the pet rent was never charged. Residents with a signed accommodation for a support animal being billed pet rent they did not owe, and in other units the reverse: a pet charge with no accommodation and no addendum we could find behind it.
Each one of those is a paper cut. You would not stop your day for any single one of them, and no one did. Two hundred of them, across 130 units, is more than $125,000.
And here is the part I actually felt bad about: the math only runs one way. It's hard to call a resident who has been quietly underpaying and explain that a lease they signed a year ago says they owed you more, and that you would like the back rent now. The pet rent never charged, the step-up that never went in: that money walked out the door a little more with each passing month, and found today, a good deal of it is simply gone.
The overbilling does not offset it, either. The day you move to correct an overcharge, you are not just fixing it going forward — you owe the resident every dollar of it back to the month it started, and a resident told they were overbilled by even a dollar is right to want all of it returned. So the errors in the resident's favor you mostly eat, and the errors in your own you refund in full. The mistakes never cancel. That is what makes this quietly expensive: not that the errors are large, but that they are small enough to ignore right up until the dollars are gone, and gone in only one direction.
The trap is that it never feels urgent
Going in, if you had made me guess, I would have said we would find a short list of miscalculations in the year-over-year rent step-ups. Not trivial, but a handful, a few units where the increase got keyed in wrong, easily fixed.
That is not what we found. We found the other thing, and its defining feature is that it never announces itself. Nothing about this is on fire. No property manager wakes up needing to do it, because nobody is standing in their office demanding it, and everyone already has more urgent work than hours to do it in.
That is exactly why it does not get done, and exactly why the dollars keep leaking out. The work is worth real money and never feels like it. Urgency and worth have come uncoupled, and in a busy operation the urgent always wins.
Why you cannot spot-check your way out of it
The other thing I did not fully appreciate until we finished is why this hides so well from a normal review.
If the errors were concentrated — one bad unit type, one bad month, one leasing agent who fat-fingered a spreadsheet — then a spot check would find the cluster and you would clean it up. But the drift is not concentrated. It is one un-loaded renewal here, one unsupported parking charge there, one deposit that does not tie three doors down. Small, independent, scattered across the whole property. A ten percent sample of a problem that lives on a quarter of your units does not tell you the problem is small. It tells you almost nothing, because you cannot tell from a dozen units whether you caught the pattern or walked right past it.
So the reason nobody had caught this is not carelessness. It is that catching it means reading everything, and reading everything, by hand, was never worth doing. Checking one lease against one rent roll line is easy work that any competent person can do. Checking all of them, every field, tracing each answer to the clause it came from, is another matter. I sat down and tried it myself once, just to feel what it was like: ninety minutes later I had made it through not quite two leases, and had a real headache to show for it. Multiply that by five hundred units and thirteen fields each and you have several thousand checks for one building, and an unthinkable number across a portfolio. So everyone samples. And sampling is close to useless against a problem shaped like this one. The shape is no accident: a rent roll is, when you look closely at it, a copy. Every number in it was transcribed out of a lease years ago by a person and, in almost every case, never checked against that lease again. The lease is what the resident signed. The rent roll is a summary that drifts.
What actually changed
I want to be careful here, because the lazy version of this story is “AI beats humans,” and that version is both annoying and wrong. No leasing agent failed at reading a lease.
What changed is that full coverage got cheap. The complete version of a job everyone already understood, reading one hundred percent of the lines against the primary documents, is now something you can finish in days instead of never. That is the whole shift. Not a machine that is cleverer than your team. A machine that makes the thorough version affordable for the first time.
There is a second half to this that matters more than the coverage, because it is the part everyone is right to be nervous about. When you point AI at legal documents, the failure you should fear is confident invention: the system that tells you a lease says something it does not, with total confidence and no way for you to check. So the discipline we hold to is not really about producing answers. It is about refusing to. On every line the question was not “what is the answer” but “what does a specific clause in a specific signed document support, and can I show you exactly where.” Where the file could not answer, we said so and attached no dollar figure, because a number no document confirms is a number you made up. Every finding that did carry a dollar figure was then handed to a second pass whose only job was to break it, to go back into the documents and try to prove it wrong. What survived two readings went into the report. What did not became an open question for a person to settle.
That is slower and less thrilling than “our AI found six figures.” It is also the only kind of finding an owner can act on, because every line is one you could defend to a resident with the document in your hand.
None of this is really about rent rolls
Here is the part I have been chewing on, and not just since we delivered this audit. It is what I have been circling for two years now, and it is the whole reason we are building Kernel.
The hard part of that whole exercise was never reading a lease. Any model can read a lease. The hard part was that the truth was spread across documents that disagreed with each other and were filed in different places: a base lease, three addenda, a renewal, an accommodation letter outside the lease folder, an approval that went through a separate pet portal and never touched the file. The right answer lived in the reconciliation across all of them, not inside any single one, and every answer had to be provable and honest about what it could not settle.
Swap in almost any other pile of documents your business runs on and the shape is identical. Utility charges billed back to tenants, checked against what the leases and the submeter readings actually support. CAM and operating-expense reconciliations, checked against the caps, base years, and exclusions written into each lease. Tenant and vendor certificates of insurance, checked against the coverage the contracts actually require them to carry. Invoices, checked against the master agreements that are supposed to govern their pricing. Every one of these is the same problem wearing different clothes: a running total everyone trusts, a stack of source documents nobody reopens, and real money hiding in the gap between them.
That is the real thing the rent roll exposed. Not the errors in one building, but the fact that most companies run on copies of their own documents that nobody has reopened in years. Our industry has a name for those copies–systems of record. And there's real money and risk hiding in the space between those systems of record and the primary documents underneath them.
What I would actually do about it
Two things, for two different moments.
If you are buying a building, do this before you close. Rent drift is real, and it is baked into the income you are underwriting whether or not anyone has measured it. A rent roll that overstates collectible rent is a rent roll you are overpaying for, and the diligence window is the one moment you have real leverage to price it in. This is exactly the kind of thing that belongs on an acquisition checklist and almost never is.
If you already own it, do it on a schedule rather than once. The copy never stops drifting, because renewals and move-outs and accommodations never stop coming, and the dollars stop being recoverable the longer you wait to find them. A one-time audit tells you where you stand today. Doing it as a standing check across the portfolio is what keeps the gap from quietly reopening the day after you close it. When there are real dollars at stake across thousands of units — and there are — staying on top of it stops being optional.
We are still learning what all of this adds up to, and I would rather say that plainly than pretend we have it figured out. But one thing from that building I am now sure of.
The rent roll will always tell you what you are billing. It will never tell you what you are supposed to be billing. Only the documents know that.
And in that file room of 5,000, until a few weeks ago, no one had ever read them all.
