✅ How Verification Works
When a statement loads, the app checks the AI's extraction against the totals your statement itself prints — in your browser, before you are asked to trust any of it. You are not taking the AI's word for your numbers; you are taking arithmetic's.
Every analyzed statement ends up in one of the states below. The badge on its card in the Files tab tells you which one, and the Files tab label shows a ⚠ when any statement is waiting on you.
✓ Verified
What it means: the transactions the app extracted tie exactly to the totals your statement prints.
Your next step: nothing. This is the state you want.
✓ Verified — totals located by you · totals entered by you · transactions classified by you
What it means: the check ran and tied, but one of the figures it needed came from you rather than from the statement's text. The qualifier names who supplied what:
• totals located by you — you pointed at the printed label the app couldn't recognize, and it read the figure next to it.
• totals entered by you — you typed in a printed figure the app couldn't read.
• transactions classified by you — you told the app how one or more transactions moved cash.
This is a real tie, not a courtesy badge — the same arithmetic, the same exact-cents comparison. The qualifier is there so you can always see what the tie rested on.
Your next step: nothing. To review or change what you supplied, reopen Printed totals on that statement's card.
⚠ Review totals
(the card heading reads Not machine-checked, or Not machine-verified on a brokerage statement)
What it means: the app could not find this statement's printed totals in a form it recognizes, so no check ran. This does not mean anything is wrong with your transactions — it means nothing has been checked yet.
Your next step, whichever fits:
• Teach the app the label — type the wording your statement actually prints (for example "Closing Total" instead of "Ending Balance") and confirm the amount. The app remembers that layout for next time.
• Printed totals — open the disclosure on the card and type the figures your statement prints. The same checks then run against them.
• Or check it yourself: 📄 Open source PDF, compare the printed summary against the computed figures shown on the card, and Accept to record your sign-off.
✕ Doesn't reconcile
What it means: a check ran and did not tie. The card names which check failed, the statement's figure, the computed figure, and the exact difference.
Your next step:
• Re-load the statement — drop the PDF again. That re-runs the extraction, which often fixes a misread. When the problem is a printed-totals reading rather than an extraction one, the card says so, and re-loading won't help.
• 📄 Open source PDF and check the figure the card names.
• If a transaction was misread — or isn't a transaction at all — see the four ways to help below.
• If you have checked the statement by eye and it is right, Accept anyway records your sign-off.
✓ Accepted by you
What it means: you reviewed this statement yourself and signed off on it. The machine did not verify it.
This badge is never relabeled "Verified," and it never will be. A tie the app performed and a judgment you made are different things, and the app keeps them different. If the statement had already failed a check, the card keeps saying so underneath.
Your next step: nothing.
✕ Rejected
What it means: you reviewed the statement and rejected it. It stays flagged, and its transactions still count toward your totals.
Your next step: re-load the statement to re-run the check, or — if you've since reviewed it and it's right — Accept anyway to record your sign-off.
Four ways to help when the app is stuck
Each of these is on the statement's own card in the Files tab.
1. Teach the app a layout — type the printed label your statement uses, confirm the amount the app finds beside it, and the app recognizes that layout on future statements. Only the label text and the layout are saved on your device — never amounts. Change your mind with ↩ Remove what you taught for this layout.
2. Enter the printed totals — open Printed totals on the card and type what the statement prints. Anything you type outranks what the app read on its own. Submit with every field blank to clear your entries and go back to the machine's own figures.
3. Classify a transaction — on a brokerage statement, if the app can't tell whether a line moved cash, it asks: Cash in, Cash out, or Doesn't touch cash. It never guesses from what would make the math work.
4. Mark something "Not a transaction" — if the extraction picked up a line that isn't a transaction at all (an interest-rate row, say), mark it and it drops out of the check. It stays visible in your transaction list, labeled, never silently deleted.
Brokerage and retirement statements
These are checked too, and they take more work to read. They print their summaries as wide columns or stacked blocks rather than tidy label-and-amount lines, so the app tries several ways to parse them. Where a layout defeats the parser, the AI reads the printed summary figures out of the statement text, in the same call that extracts your transactions — copying each figure verbatim from a printed line, never computing one. Those figures then go through exactly the same arithmetic as everything else: exact cents, no tolerance.
That means on these statements the AI can supply both sides of the comparison — the transactions and the totals they are checked against — so the check is less independent than on a bank statement, where the totals are parsed without the AI. It still catches real errors, because the AI is copying printed figures rather than deriving them: when it once supplied a $4,500 transfer the statement never printed, the account-value tie failed by exactly $4,500 and the card named the figure. And anything you locate or enter yourself outranks both the parser and the AI.
How the check works
For the reader who wants the mechanism — this is the part the trust argument rests on.
No AI is involved in the check itself. The comparison is arithmetic your browser performs against figures printed on your own statement. The AI's job ends at reading; it never decides whether a statement reconciles.
Exact cents, zero tolerance. Every amount is converted to a whole number of cents and compared exactly. A penny off is a failure, not a rounding difference. There is no "close enough" setting to relax.
What gets compared:
• Balance replay (checking and savings) — beginning balance, plus every credit, minus every debit, must land exactly on the printed ending balance.
• Stated totals — the deposits and withdrawals the app extracted against the totals the statement prints.
• Card statements — extracted charges against printed New Charges; extracted credits against printed Payments/Credits.
• Brokerage — a cash replay (beginning cash, plus the cash your transactions moved, equals ending cash), an account value tie (beginning value plus the printed changes equals ending value), and a cross-check tying the cash side to the value side.
A missing or duplicated transaction fails the tie. That is the whole point. If the extraction drops a $42 purchase, the sum comes up $42 short and the statement will not verify — you find out, rather than the gap sitting in your data looking authoritative.
What reconciliation does not prove. It checks the totals, not every field. If a merchant name is misread but the amount and the date are right, the totals still tie and the statement still verifies. Reconciliation catches transactions that are missing, duplicated, mis-signed, or wrong in amount — it does not certify that every description is correct. Verified means the math tied on this statement, not that your data is perfect.
More guides