How DoorBrief Verifies Every Dollar in Your Owner Statements
AI is great at reading documents. It's terrible at math. Here's how we built a system that uses both — without ever guessing at a number.
The Problem: AI Gets Numbers Wrong
Let's be blunt. Large language models hallucinate numbers. It's not a bug they're fixing next quarter. It's a fundamental limitation of how they work.
We tested this. A lot. During development, we fed real owner packets from AppFolio, Buildium, and Yardi into ChatGPT, Claude, and Gemini. We asked each model to summarize the financial data. The writing was impressive. The numbers were a disaster.
Here's what we actually saw:
- Transposed digits. AI said rent collected was $68,932 when the packet clearly showed $65,246. Two digits swapped. Completely wrong total.
- Wrong property, wrong amount. A $4,675 HVAC replacement at 412 Elm got attributed to 3155 Karen St. The number was real. The property was wrong.
- Phantom rounding. Actual disbursement: $12,847.33. AI output: $12,850. Close enough? Not when an owner is reconciling against their bank statement.
- Invented subtotals. Asked to total 19 properties' rent, GPT-4 returned a number that didn't match any combination of the line items. It just... made one up.
- Missing properties entirely. A 22-property packet got summarized as 18 properties. Four owners' data simply vanished from the output.
- Confident and wrong. Every hallucinated number was presented with complete confidence. No hedging. No disclaimers. Just wrong data stated as fact.
The core issue
Language models don't calculate. They predict the most likely next token. When that token is a digit in a dollar amount, "most likely" and "correct" are two very different things.
Why This Matters for Owner Packets
Owner statements aren't blog posts. They're financial documents. Property owners use them to track their investment returns, verify expenses, and make decisions about their properties.
If you manage with AppFolio, Buildium, or Yardi, your owners already have access to the raw numbers in the portal. They will check. And when they find a discrepancy in your summary email, here's what happens:
- Instant trust erosion. One wrong number and the owner questions every number. Not just this month. Every month going forward.
- Time-consuming back-and-forth. Now you're fielding emails and calls explaining the discrepancy. The whole point was to save time, and you're spending more.
- Owners start auditing you. Instead of scanning your summary and moving on, they're line-by-line comparing your email against the AppFolio portal. You've created work for them.
- Legal exposure. Materially wrong financial figures in owner communications can create real liability. Even if it was "just the AI."
- You stop using the tool. This is the most common outcome. Manager tries an AI tool, gets burned by a wrong number, goes back to doing it manually. Problem unsolved.
"One wrong dollar amount destroys more trust than a hundred correct ones build."
The bar for financial accuracy in owner communications is 100%. Not 99%. Not "pretty close." Owners who use AppFolio, Buildium, or Yardi expect their statements to be exact. Any tool that touches those numbers needs to meet the same standard.
Our Approach: Verified Facts Hybrid
We didn't try to make AI better at math. We designed around the problem. DoorBrief uses a two-layer architecture that plays to each technology's strengths.
Layer 1: Reading and understanding
The first layer reads your owner packet and figures out what's going on. It identifies which properties are in the document, understands the layout, recognizes that a carpet charge, a paint charge, and a cleaning charge at the same address are all part of a unit turn, detects vacancies and lease changes, and extracts transaction categories. This is the layer that turns raw PDF data into structured information.
Layer 2: Computing and verifying
The second layer is pure code. It totals rent collected across all properties. It sums expenses, disbursements, and owner draws. It calculates month-over-month changes. It computes unit turn costs from individual line items. It builds the financial summary. It formats every dollar amount consistently. No prediction. No inference. Just arithmetic.
The key insight: the AI never writes a dollar amount directly. Instead, our code layer builds a set of verified facts — pre-computed, pre-formatted statements with locked-in numbers. Then the AI weaves those facts into natural email prose.
The AI decides tone, structure, and phrasing. The code decides the numbers. Each layer does what it's actually good at.
What does "verified" actually mean?
A verified fact is a pre-computed statement with locked-in numbers. Example: 3155 Karen St: Unit turn completed, total cost $3,148.83 (carpet $1,890, paint $680, cleaning $578.83). The prose can be rephrased however makes sense. But every number in that statement was computed by code and is immutable.
What This Looks Like in Practice
Let's walk through a real scenario. You upload a December AppFolio owner packet. It covers 19 properties for a single owner. Total rent collected: $65,246.00. One unit turn at 3155 Karen St.
Here's what happens step by step:
- PDF extraction. We pull the raw text from every page of the packet. Tables, line items, cash flow summaries — all of it.
- AI reads the document. The model identifies all 19 properties, maps transactions to each one, and flags notable events. It recognizes that $1,890 for carpet, $680 for paint, and $578.83 for cleaning at 3155 Karen St collectively represent a unit turn.
- Code takes over. Our verification layer sums the unit turn: $1,890 + $680 + $578.83 = $3,148.83. It totals rent across all 19 properties. It computes disbursements, owner draws, and net cash flow. Every number is arithmetic.
- Verified facts are assembled. The code produces a structured set of facts with locked numbers. Every dollar amount is determined before the AI writes a single word of the email.
- AI writes the email. Given the verified facts, the model writes a professional, owner-friendly email. Conversational tone, clear structure, all the context an owner needs. But every financial figure was injected by code.
Example: Unit turn at 3155 Karen St
What the AI figured out
- • Three charges at 3155 Karen St are related
- • They represent a unit turn (carpet, paint, cleaning)
- • The unit was vacant in November, leased in December
- • This is worth highlighting to the owner
What the code computed
- • Carpet: $1,890.00
- • Paint: $680.00
- • Cleaning: $578.83
- • Total unit turn cost: $3,148.83
What the owner sees in their email
"At 3155 Karen St, we completed a unit turn this month including new carpet, paint, and cleaning for a total cost of $3,148.83. The unit has been re-leased and rent collection begins in January."
Natural language. Accurate numbers. The AI wrote the sentence. The code supplied every dollar amount. The owner gets a clear, trustworthy update.
Why Not Just Use ChatGPT?
Fair question. ChatGPT, Claude, Gemini — they're powerful tools. We use AI models ourselves. But there's a massive difference between a general-purpose chatbot and a purpose-built system for financial documents.
Here's what goes wrong when you paste an owner packet into ChatGPT:
- No verification layer. Every number in the output came from token prediction, not computation. There's nothing checking whether $68,932 should actually be $65,246.
- Context window limits. A 54-page owner packet with 19 properties pushes the limits of what fits in a single prompt. Data gets truncated or compressed. Properties get dropped.
- No document structure awareness. ChatGPT doesn't know what an AppFolio cash flow summary looks like. It doesn't know Buildium's owner statement format. It doesn't know Yardi's layout conventions. DoorBrief does.
- No consistency. Ask ChatGPT to summarize the same packet twice and you'll get different numbers. Not different phrasing — different actual dollar amounts.
- No formatting standards. Sometimes you get $12,847.33. Sometimes $12847. Sometimes "approximately $12,850." Owner communications need consistent, exact formatting.
- No accountability trail. If a number is wrong, there's no way to trace where it came from. With DoorBrief, every figure maps back to a specific line item in the source document.
"General AI tools are built to be helpful. DoorBrief is built to be correct. Those are very different design goals."
We tested with ChatGPT (GPT-4), Claude, and Gemini Pro extensively during development. The narrative quality was often good. But in every test, at least one financial figure was wrong. Sometimes it was a rounding issue. Sometimes it was a completely fabricated number. For owner communications, that failure rate isn't acceptable.
Purpose-built beats general-purpose when accuracy is non-negotiable. Every time.
Every Dollar, Every Time
This is the principle DoorBrief is built on. Not "close enough." Not "usually right." Every dollar, every time.
- AI reads your owner packets — from AppFolio, Buildium, or Yardi — and understands what happened at each property.
- Code computes every number — totals, subtotals, month-over-month changes, unit turn costs. Pure arithmetic.
- Verified facts lock in the figures before the AI writes a single word of your owner email.
- You get a professional email in under a minute — with numbers you can trust because they were calculated, not predicted.
That's how AI should work in financial contexts. Let it do what it's good at. Keep it away from what it's not. And never, ever guess at a dollar amount.
— The DoorBrief Team