A statement that ties out has had every row read, added up and found to reach the balances the bank printed. That rules out a misread amount, a reversed sign, a skipped row and a doubled one: in every layout tested, the check caught all 4,944 we injected. Payee names, dates and some cancelling pairs of errors still get through.
Evidilo converts a bank statement into a QBO, CSV or Excel file and runs this check before you download, which is what separates it from a plain CSV export.
What the check compares
A bank statement carries its own arithmetic. There is an opening balance, a closing balance, and sometimes a balance at the end of each day or beside every row. The check adds up the rows it read and compares the result with those printed figures, row by row where a balance is printed and then against the closing balance.
The comparison is not against a total we calculated from the statement. It is against the total the bank put on the page, so a misread row cannot hide behind a second misread row unless the two cancel out exactly.
What it catches, and what it cannot
The dividing line is simple: does the error change a total? Anything that moves an amount, adds a row or drops one breaks the arithmetic. Anything that leaves the amounts alone passes the check.
| What went wrong | The printed balances | The check |
|---|---|---|
| An amount read wrong | Stop adding up | Fails |
| A deposit read as a withdrawal | Stop adding up | Fails |
| A row skipped | Stop adding up | Fails |
| A row read twice | Stop adding up | Fails |
| A payee name read wrong | Unchanged | Passes |
| A date read wrong | Unchanged | Passes |
Two errors that cancel out are the exception, and how many of them get through depends on what the bank prints. With a closing balance alone, none of the cancelling pairs we injected was caught. With a balance at the end of each day, every pair that fell on two different days was caught and none that fell within one day. With a balance beside every row, 30.1% of the same-day pairs were caught; the rest sat on neighbouring rows, which the check reads as one balance the bank printed inconsistently, and passes.
Why the first bad day is the useful one
A closing balance proves the total and nothing else. If the month is off, the closing balance says so and stops there, and you are left reading every row to find out which one did it. A balance at the end of each day turns that into a search across one day’s rows, and a balance beside every row into a search for one row.
| What the statement prints | Single errors caught | Rows left to read, mean | Share of the statement | Cancelling pair, different days, caught | Cancelling pair, same day, caught |
|---|---|---|---|---|---|
| A closing balance only | 100.0% | 51.65 | 100.0% | 0.0% | 0.0% |
| A balance at the end of each day | 100.0% | 3.54 | 6.8% | 100.0% | 0.0% |
| A balance beside every row | 100.0% | 1.49 | 2.9% | 100.0% | 30.1% |
The first day that does not agree is not always the day that holds the error. An amount or a sign read wrong was on the marked day every time. A skipped or doubled row was there in 67.0% of cases; the rest were the last row of the day before, because a missing last row takes that day’s printed balance with it and the difference first shows a day later.
When the check cannot run
The check needs something to compare against: an opening and a closing balance, or a balance beside every row. A statement that prints neither goes through without it, and the result screen says so rather than implying a check that never happened. The same applies to a page the reader cannot open. When we cannot read a page, we say which page it was.
What to do with a statement that does not tie out
- Open the day the check marked.
- Compare its rows with the statement on screen, starting with the largest amount.
- If every row on that day is right, check whether the last row of the day before is missing or doubled.
- Correct the row on the review screen.
- Let the check run again before you download.
On a paid plan a statement that does not tie out uses no pages until you correct it and it ties out, as the pricing page reads on 26 October 2026, so a bad read costs you the correction rather than the month’s allowance.
How was this checked?
On 26 October 2026 we generated 24 statements of 18 business days with a fixed seed, printed their balances three ways, and injected 22,053 errors and cancelling pairs, one case at a time. Each case went through the balance rule in Python 3.9 and through Evidilo’s own TypeScript rule under Node 22, and the two agreed on every case. The statements are generated rather than read from PDFs, so the figures measure the check, not the reader. The results are in dataset.csv, and check.py rebuilds them in a few seconds and re-reads the QuickBooks and Xero pages quoted below.
Questions
What is the best way to check a converted bank statement?
Compare it with the balances the bank printed, not with the statement’s total alone. Evidilo does this whenever the statement prints an opening and closing balance or a balance beside every row, and marks the first day that disagrees. A spreadsheet can be checked the same way by hand, one day at a time, which is slower on a long statement.
How do I know a row was not dropped?
A dropped row changes the total, so the balances printed after it stop agreeing with the rows. Evidilo adds up the rows it read against those printed balances, which is the same thing a bookkeeper checks by hand. It cannot see a row the bank never printed, and it cannot see one that was deleted from the source PDF before it reached you.
Is it safe to upload a client’s bank statement?
That depends on the service and on what your engagement letter allows. Evidilo encrypts each statement in transit and at rest, and the security page names every company that handles a file and how long it is kept. A desktop converter keeps the file on your own machine instead, at the cost of doing the reading and the checking yourself.
What is the difference between a statement that ties out and a reconciled account?
A tied-out statement has been read correctly, row for row, against the bank’s own arithmetic. A reconciled account has been matched against the ledger’s records of what each transaction was. Evidilo proves the first and leaves the second to the accounting software: QuickBooks Online’s help describes reconciling as comparing each transaction in QuickBooks with the bank statement, and Xero reconciles the statement lines that arrive in it, one way being a match to a record already there. A statement can tie out and still need every row categorised.
So what does a clean check actually buy me?
It buys the arithmetic. You can import the file knowing the amounts, the signs and the number of rows add up to what the bank printed, unless two errors cancel out, and that the first disagreement, if there is one, has already been pointed out. It does not buy the payee names or the dates, so those still get a look. The accuracy page sets out what the check catches and what it leaves alone.