A trailing-12 (T-12) operating statement is the base of almost every value you put on a multifamily deal. If the NOI is off by $40,000 at a 5.5% cap rate, the value is off by about $727,000. The statement usually isn't wrong. The way it gets read into the model is.
Every example below uses the same fictional 240-unit property, so the numbers connect.
1Write down the statement's own totals first
Before you touch a single line, find the totals the statement prints itself: total rental income, total income (sometimes "effective gross income"), total operating expenses and net operating income. These are your anchors. Everything you categorize later has to add back up to them.
If the statement prints no totals at all, add the months across for each line and keep that as your control figure instead.
2Separate line items from subtotals
Property-management exports often print subtotals in the same column as the lines they add up. Sum every row and you count income twice.
Income section, as printedJan–Dec 2025
Illustrative property; all figures synthetic. Adding every row, subtotal included, gives 6,577,080.00, exactly double.
The fix: mark each subtotal and leave it out of your categories. Keep it, though. Step 5 uses it as a check.
3Get the signs right
Loss to lease, vacancy, concessions, bad debt and non-revenue units all reduce income. Some statements print them as negatives, some as positives under a "less" heading, and some do both in the same file. Whatever the statement does, make sure each one is subtracted in your sum. A single deduction added instead of subtracted moves income by twice its amount.
4Pull non-operating lines out of NOI
Owners' statements often run all the way down to net income. Below NOI, or worse, mixed in with the expenses, you will find lines that don't belong in an underwriting NOI:
- Depreciation and amortization
- Mortgage interest and other debt service
- Capital expenditures and replacements
Bottom of the statement, as printedJan–Dec 2025
Illustrative property; all figures synthetic. Treating depreciation and interest as operating expenses would turn a 1.49 million NOI into a loss.
Keep these lines, tagged as non-operating, so nothing on the statement disappears. Just leave them out of NOI.
5Tie out to the cent
Now add up your categorized lines and compare them with the anchors from step 1. The difference should be 0.00.
Illustrative property; all figures synthetic.
If it doesn't tie, the cause is almost always one of these:
- A subtotal counted as a line (step 2). Look for a difference that matches a printed subtotal exactly.
- A flipped sign (step 3). Look for a difference that is exactly twice one line.
- A non-operating line inside expenses (step 4).
- A missing row. This is common with scanned PDFs, where a line can drop out during conversion. Compare the row count with the statement.
- A line counted in two categories, for example utility reimbursements booked as both income and a negative expense.
Three more checks worth a minute
Are there really 12 months?
Check the column headers. A "T-12" built from last year plus year-to-date needs to be stitched into one consecutive trailing twelve. A statement with quarterly or annual columns can't give you monthly trends, so annualize with care.
Does the rent roll agree with itself?
Count the unit rows and compare them with the rent roll's own summary of units, square footage and market rent. A roll that lists 236 units against a summary of 240 needs an answer before it drives your unit mix.
Do the T-12 and the rent roll tell the same story?
Occupancy on the rent roll should look roughly like the vacancy line on the T-12 for recent months. A big gap usually means a recent lease-up, a concession program or a stale document.
How S3A does this
S3A runs the tie-out on every T-12 and rent roll it reads. It categorizes each line, keeps the statement exactly as printed, adds the lines back up against the document's own totals, and only lets a deal go out on its own when they match. Anything that doesn't tie goes to a person first. You email the documents and get your own Excel model back on the thread within 24 hours. If you only need the files cleaned up, use summaries.