Controls August 2026 16 min read

What "reconciled" actually proves

"Reconciled" is a load-bearing word. It gets treated as a verdict on whether the books are right, and it is not that. It proves, precisely, that the money moved as recorded. It is silent on whether the payment should have been made, whether it landed in the right category, whether the statement was genuine, and whether an entire month is missing from both records at once.

FlowParse
flowparse.io

A word doing more work than it can carry

In most organisations, "the bank is reconciled" functions as a general reassurance. It ends the conversation. It is what gets reported upward when someone asks whether the numbers are in order, and it is heard as a statement about the quality of the books as a whole.

It is not that statement. Reconciliation is a narrow and rather beautiful procedure that establishes one specific thing very firmly, and establishes nothing else at all. The gap between what it proves and what people hear is where a surprising number of problems live comfortably for years.

This is not an argument against reconciling. It is one of the highest-value controls available for the effort involved, and it should be done every period without exception. The argument is that knowing its precise scope tells you what still needs covering — which is a far more useful thing to know than a vague sense that the books have been checked.

What it does prove

Stated carefully, a completed reconciliation supports two claims. First, that the transactions you recorded, summed, carry the balance from the opening figure to the closing figure the bank printed. Second, that your record and the bank's record describe the same set of money movements for that account over that period, once genuine timing differences are listed.

Both are strong claims, and the first is a proof rather than an opinion. Arithmetic either holds or it does not; there is no judgement in it and no confidence interval around it. That is exactly why the procedure has survived unchanged for centuries while almost everything around it has been rebuilt.

It is also genuinely powerful against a whole class of failure. Invented transactions cannot survive it, because the bank has no matching movement. Rows lost in transit cannot survive it, because the sum falls short. Typing errors cannot survive it, because the total moves. Against mechanical failure, reconciliation is close to decisive.

The claim, stated exactly

The set of money movements I recorded for this account, in this period, is the same set the bank recorded — and my arithmetic on them is correct. Everything in this article is about what falls outside that sentence.
FlowParse
flowparse.io

Mapped onto the assertions

Auditors decompose "are these numbers right" into separate assertions, and the decomposition is useful well beyond audit because it makes the boundaries of any single procedure visible.

Existence — did the recorded transactions really happen? Reconciliation addresses this well. The bank is an independent party confirming the movement.

Completeness — is everything that happened recorded? Addressed within the period covered by the statement, and not at all beyond it. If a period is absent from both records, no comparison between them can reveal it.

Accuracy — are the amounts right? Addressed in aggregate. Individual amounts can still be wrong if the errors offset.

Classification — is each item in the right account? Not addressed at all. Reconciliation never reads the category.

Cut-off — is it in the right period? Partially, through timing items, and only for cash movements rather than for the underlying obligations.

Rights and obligations — should this money have moved at all? Not addressed. The bank confirms that it did move, which is a different question entirely.

AssertionAddressed by reconciliation?Scope of the coverage
ExistenceYes, stronglyAn independent party confirms the movement
CompletenessPartlyWithin the statement's period only, never beyond it
AccuracyPartlyIn aggregate; offsetting errors survive
ClassificationNoThe category is never read
Cut-offPartlyCash movements via timing items, not obligations
Rights and obligationsNoWhether it should have moved is a different question
FlowParse
flowparse.io

Completely silent on category

A supplier payment of 3,400 coded to the wrong expense account reconciles perfectly. The date is right, the amount is right, the direction is right, the bank agrees. Every attribute the reconciliation examines is correct, and the one that is wrong is not one it reads.

This matters more than it first appears, because classification is where most of the consequential errors actually are. Deductibility, VAT treatment, capitalisation versus expense, which cost centre carries the charge, whether something is a cost of sale or an overhead — none of it touches the cash total, and all of it changes what the accounts say.

So classification needs its own review, and it looks nothing like a reconciliation. It reads categories rather than balances, and the useful techniques are comparative: this month against last, this supplier against its usual account, this class of cost against its expected proportion. Anomalies in category show up as pattern breaks, never as differences.

FlowParse
flowparse.io

Silent on whether the payment should have happened

Reconciliation catches fabricated transactions immediately — an entry with no corresponding bank movement cannot hide, because the arithmetic will not close. That is a real and valuable protection.

It offers nothing against a genuine payment that should never have been made. If money truly left the account, for the amount recorded, on the date recorded, then the bank confirms it and the reconciliation is satisfied. Whether the recipient was legitimate, whether the purchase was authorised, whether anyone approved it — the procedure has no access to any of that.

This is a structural limit rather than a weakness in execution. Reconciliation compares two records of what happened; the question of whether something should have happened is not a question about records at all. It is answered by approval workflows, segregation of duties, supplier verification and review of unusual items — different controls entirely, addressing a different assertion.

The practical consequence

"The bank is reconciled" is not an answer to "are we confident about our payments". They are different questions, and the first one being answered well says nothing at all about the second.

Silent on whether the document is genuine

A reconciliation compares your books to a document. It therefore inherits, completely, whatever that document says. Books built from a falsified statement will reconcile against that statement without a murmur, because the two records were constructed to agree.

Making a statement balance is the easy part of fabricating one. The arithmetic is mechanical, and anyone capable of producing a convincing document is capable of making the columns add up. So the balance holding is not evidence of authenticity; it is evidence that whoever produced the file was competent.

What actually addresses authenticity is provenance. Obtain the statement from the bank rather than from the party being examined. Use direct confirmation where the stakes justify it. Look at the file's own properties rather than only its contents. This is precisely why lenders and auditors care so much about how a document arrived, a preference that can seem like bureaucracy until you notice which assertion it is protecting.

FlowParse
flowparse.io

Silent on the month that is missing from both sides

Reconciliation compares two records. If a period is absent from both, the comparison succeeds — there is nothing to disagree about. An entire month can be missing from a year while every individual month reconciles beautifully.

This is the largest hole the procedure leaves, and the cheapest one to close. The fix is a comparison of a different kind: each statement's closing balance against the next statement's opening balance, across the whole series. In an unbroken run they are identical every time, and the first disagreement is exactly where a period is unaccounted for.

It costs one comparison per document and is almost never done, because it feels too simple to be necessary. We gave it a whole article — the missing month problem — because the failure is so quiet and the test is so cheap.

Errors that cancel each other out

Two mistakes of equal size in opposite directions leave no trace in a reconciliation. An expense overstated by 500 alongside a receipt overstated by 500 produces a perfectly balanced account containing two wrong numbers.

There is no clever version of the reconciliation that catches this, because the procedure examines a net figure and the net figure is correct. It is not a matter of running the check more carefully; the information simply is not present in what the check looks at.

What surfaces compensating errors is examination of individual entries — sampling, review of unusual amounts, comparison against supporting documents. In other words, the thing reconciliation is often used to avoid doing. That is a reasonable trade for routine work, as long as nobody believes the trade is free.

FlowParse
flowparse.io

Coverage at a glance

Everything above, condensed. The right-hand column is the useful one: it names what to run instead when the answer is no.

QuestionDoes reconciliation answer it?What does
Did these transactions really occur?Yes — the bank confirms them
Is anything missing from this period?Yes, within the statement's own range
Do the amounts total correctly?Yes, in aggregateSampling, for individual entries
Is each item in the right account?No — it never reads the categoryClassification review, month-on-month comparison
Should this payment have been made?NoApproval workflow, segregation of duties
Is the statement genuine?No — it inherits the documentSource delivery, direct confirmation
Is a whole period missing?No — absent from both recordsContinuity of balances across the series
Are there two errors cancelling out?No — the net is correctEntry-level review and sampling
Is the VAT treatment right?NoTax review, separate from balancing

The green tick problem

Accounting software presents reconciliation as a state — an account is reconciled or it is not, and the interface marks it with a symbol that reads as general approval. The software is not overclaiming, exactly. But a tick is a very broad signal for a very narrow proposition, and users reasonably read it as broader than it is.

The problem compounds when the tick is the last checkpoint in a workflow. Everything upstream — extraction, import, categorisation — gets treated as validated by the fact that the final step passed, even though the final step examined none of it. A category assigned wrongly upstream sails through, because the only thing tested downstream was a total.

A more honest interface would say what was compared and what was not. That is a design position we hold about our own product too, and it is why our checks report which specific rows a difference implicates rather than showing a verdict on the document as a whole.

FlowParse
flowparse.io

Confidence is not proof, and the difference is not academic

Document-processing tools report confidence scores: this field was read with 98% certainty. Reconciliation reports a proof: this identity holds or it does not. Treating the two as the same currency causes real mistakes.

A confidence score is a model's estimate of its own reliability, and a model can be confidently wrong. High confidence on a misread amount is a completely ordinary occurrence, because the misreading and the confidence come from the same process. The score cannot step outside the model to check.

An arithmetic identity can. Opening balance plus every transaction against the printed closing balance is an external test: it uses information the reader did not generate, so it can contradict the reader. That is why we lean on the identity rather than on a percentage — not because scores are useless, but because only one of the two can catch the model being wrong.

It is also why a completeness check beats an accuracy claim. A tool can read everything it finds perfectly and still miss a tenth of the rows, and no per-field confidence will ever mention the rows that were never seen.

A confidence scoreAn arithmetic identity
What it isA model's estimate of its own reliabilityA test against information the model did not produce
Can it be confidently wrong?Yes — routinelyNo — it holds or it does not
Sees rows that were never read?NoYes — the sum falls short
OutputA percentage per fieldA gap, in currency, and the rows implicated
Useful forRanking what to review firstDeciding whether the document is complete
FlowParse
flowparse.io
Accuracy, honestly

We will not promise you 99 % — we will show you which rows to check

Every converter in this market advertises a number: 99 %, 99.5 %, 99.8 %. None of them publishes how it was measured or on which documents — and none of them can tell you which rows fall in the remainder. That is the part you find out later, when two amounts have been glued into one, a column has slid one place to the left, and a reconciliation will not close.

Our extraction is strong. It is also not magic — and neither is anyone else’s.

Reading a PDF is not a solved problem. A layout nobody has seen before, a faded thermal receipt, a bank that marks credits in its own way — each of those can produce a row that looks perfectly ordinary and is wrong. We build hard against that, and we still refuse to sell you a number, because the number is not the thing that protects you. Knowing exactly where to look is.

What actually goes wrong when a PDF is read

These are not hypotheticals. Every one of them is a defect we have found in real documents, reproduced, and built a check for — which is precisely why we can now point at them instead of averaging them into a percentage.

The defectWhat you see in the exportWhat it costs
Two amounts glued into oneOne plausible-looking figure instead of two rowsA total that is short by a whole transaction
A column slides one placeDates in the description, amounts in the balanceEvery row after it is wrong, and none looks wrong
A reference number read as the amount“Payment 910015” booked as 831.00A five-figure hole on a long statement
A credit sign droppedAn expense recorded as incomeThe error is twice the amount, in the wrong direction
A summary box counted as bookings“Previous balance / New balance” added as rowsTotals inflated by exactly the closing balance, twice
A page silently skippedA month that is simply shorterNothing to see — that is what makes it the worst one

So we built the layer that catches them

A second engine, deterministic — ours, and it runs on every document

After the AI reads the document, a separate layer re-does the document’s own arithmetic. Opening balance plus every transaction must equal the closing balance the bank printed. Each row’s running balance must follow from the one above it. Line items must sum to the invoice total. No AI, no confidence score, no guessing — these are proofs, and a document that fails one is provably misread.

It names the rows, not a percentage

When a check fails you do not get a lower score. You get row 48, row 133, row 1 902 — highlighted in place, red where a check proved the reading wrong and amber where it could not confirm it, with the column the check named brighter still. Open the Rows or JSON view, fix those, export. That is the whole loop, and it usually takes under a minute.

The document is the judge, not us

A bank statement carries its own proof: it can catch an error with no human, no reference data and no opinion from us. That is why we lead with it. Where a document genuinely cannot check itself — no running balance, no printed total — we say so, plainly, instead of letting silence imply that everything is fine.

Why the percentage is the wrong number to buy on

Statement sizeWhat “99 % accurate” quietly allowsWhat that means for you
300 rows3 wrong rowsAn afternoon — if you find them
1 200 rows12 wrong rowsA reconciliation that will not close
3 400 rows34 wrong rowsA six-figure error, in cases we have seen

Money work rewards being picky

Please read the flagged rows before you export. That is not a disclaimer — it is the one step that turns a good extraction into a correct one, and we have spent our engineering effort on making it short and precisely targeted rather than on rounding a number up. Anyone can print 99 %. Telling you exactly where the other 1 % is, is the harder promise, and it is the one we are willing to make.

What to run alongside it

Four additions cover most of the gap, and none of them is expensive.

Continuity across the series. One comparison per statement. Closes the missing-period hole, which is the biggest one, for almost no effort.

A classification pass. Separate from balancing, and comparative rather than arithmetic: this month against last, this supplier against its usual account. Look for pattern breaks, not for differences.

Provenance discipline. Know how each statement arrived. Source-delivered documents and forwarded ones support very different conclusions, and it costs nothing to record which is which.

Sampling on entries. A small number of individual items checked against their supporting documents each period. It is the only thing that catches compensating errors and misclassification at the item level.

AdditionEffortHole it closes
Continuity of balances across statementsOne comparison per documentA period missing from both records
Classification reviewAn hour a monthRight amount, wrong account
Provenance disciplineRecorded at collectionDocuments that cannot be relied on
Entry-level samplingA handful of itemsCompensating errors, unauthorised payments
Ageing reconciling itemsMinutesTiming items that quietly became errors

How lenders and auditors actually read it

It is instructive that the parties with the most at stake rely on reconciliation least. A lender assessing an application does not ask whether the applicant's bank account reconciles. They read the statements directly, looking at continuity, pattern and plausibility, and they frequently want the documents delivered from the source rather than forwarded.

That is not distrust of the procedure. It is recognition that they are asking a different question — is this a true picture of the account — which reconciliation does not answer, because it compares a record to a document rather than testing the document.

Auditors use reconciliations as evidence, but as one input among several, and they test around it: direct bank confirmations, cut-off testing at the period boundary, examination of unusual items, and sampling of individual entries. The reconciliation supports existence; the other procedures cover the assertions it leaves untouched.

Both patterns point the same way. Reconciliation is a strong local proof embedded in a larger structure of evidence, and it was never designed to carry that structure by itself.

FlowParse
flowparse.io

Where we stand on this

We build a converter, and the temptation in this category is to imply that a passing check means the document is correct. We try not to, and it shapes concrete decisions in the product.

When a statement covers more than one account, the totals identity cannot be evaluated — one opening and closing pair cannot span several running-balance chains. In that situation our check stands down and says it could not be run, rather than showing a tick. A check that reports success when it did not actually execute is worse than no check, because it manufactures confidence out of nothing.

When a document contains no total, we do not produce one. A spreadsheet carrying a sum that never appeared in the source is more dangerous than one without a sum, precisely because it looks authoritative. And when the identity fails, we report the gap and the rows worth examining rather than silently adjusting something to make it close.

None of that makes our reading infallible. It makes the failures visible, which is a different and more useful property — and it is the same argument this whole article makes about reconciliation itself.

Key takeaways

Reconciliation proves that the money moved as recorded: the transactions you have sum from opening to closing balance, and your record agrees with the bank's for that account and period. Within those limits it is a proof, not an estimate, and it is decisive against invented entries, lost rows and arithmetic errors.

It is structurally silent on classification, authorisation, document authenticity, periods absent from both records, and errors that cancel. Those are not gaps in how carefully you reconcile — they are outside what the procedure examines, and no amount of rigour in the procedure will reach them.

The useful response is not to trust reconciliation less, but to state its conclusion precisely and then name what covers the rest. Continuity across the series, a classification pass, provenance discipline and a little sampling close most of the distance for very little work.

Frequently asked questions

Checks that tell you what they checked

Every statement we convert is tested against its own arithmetic. When it holds, you know precisely what that means. When it does not, you get the gap and the rows worth examining — and when the test cannot run at all, we say so rather than showing a tick.

FlowParse
flowparse.io

Related reading