The balance check, explained
Any converter can misread a row: a digit, a sign, a line lost at a page break. A statement prints enough to catch most of that, because it states where the balance started and where it ended. Cleanrow checks every converted statement against those figures and shows the answer before you download anything.
What it checks
Two things, both in whole cents, with no rounding:
- Opening balance + every transaction = closing balance. The opening and closing balances are the ones printed on the statement; the transactions are the rows Cleanrow read.
- Every running balance agrees. When the statement prints a balance after each row (or each day), each one has to equal the previous balance plus that row's amount.
The answer is one of three banners above the rows:
| Banner | What it means |
|---|---|
| Verified | Both checks pass, to the cent. |
| Off by an amount | Something doesn't add up. The banner gives the difference and the rows where the running balance stops agreeing. |
| Can't verify | The statement prints no opening and closing balance that Cleanrow could find. It says so rather than calling the rows verified. |
A worked example
A made-up test statement, the Copperfield Trust checking account ending 1544, 2025-01-01 to 2025-01-31, as the converter's engine read it:
| Amount | |
|---|---|
| Opening balance printed on the statement | $3,606.09 |
| Money in (15 rows) | $15,293.32 |
| Money out (58 rows) | -$11,835.46 |
| Opening + every transaction | $7,063.95 |
| Closing balance printed on the statement | $7,063.95 |
The two bottom lines match, so the banner reads Verified.
Now suppose row 4's amount had been misread, coming out $18.00 too high. The same check, run by the engine on the changed rows, gives:
The banner reads Off by $18.00: row 4 doesn’t add up, and under it: Opening $3,606.09 + transactions = $7,081.95, but the statement says $7,063.95.
The running balances show where:
| Row | Date | Description | Amount as read | Running balance printed | Opening + rows so far |
|---|---|---|---|---|---|
| 1 | 2025-01-01 | Check 1650 | -1,149.46 | 2,456.63 | 2,456.63 |
| 2 | 2025-01-01 | BRIGHTPATH ELECTRIC AUTOPAY WEB ID 437965622 | -237.18 | 2,219.45 | 2,219.45 |
| 3 | 2025-01-02 | HEARTH GAS CO AUTOPAY WEB ID 312706058 | -169.22 | 2,050.23 | 2,050.23 |
| 4 | 2025-01-03 | ONLINE TRANSFER TO SAVINGS XXXXXX9884 REF #IBXWDE4PUH | -554.25 | 1,477.98 | 1,495.98 |
| 5 | 2025-01-03 | ACH DEPOSIT ACORN DENTAL GROUP PAYROLL PPD ID: 2443433977 RECURRING TRACE 688597419335453 PINE CREST MN | 3,966.81 | 5,444.79 | 5,462.79 |
Up to row 3, opening plus the rows so far equals the balance the statement printed. At row 4 they part, so the mistake is on that row (or, when a balance is printed only once a day, on the rows of that day). The banner links straight to it; compare it with the PDF, click Edit, correct the amount, click Save, and the check runs again.
What it catches
- A digit or a decimal point misread in any amount.
- A row read as money in when it was money out, or the other way round.
- A row missed or read twice, for example at a page break.
- A total or summary line taken for a transaction.
What it can't catch
The check proves the amounts add up. It doesn't prove everything else, so it's worth knowing the gaps:
- Dates and descriptions. A wrong date or a garbled description doesn't change any total. Rows dated outside the statement period are flagged, but a date moved within the month isn't.
- A bank statement read as a card statement, or the reverse. That flips every amount and both balances together, so the sum still works. That's why the converter shows the detected Type with a switch: check it says Bank account or Credit card correctly.
- Two mistakes that cancel out, such as two amounts swapped between rows, when the statement prints no running balances to separate them.
- Statements without balances. Some card summaries and transaction lists don't print an opening and closing balance. Those show Can't verify; compare the totals with the statement yourself.
Bank CSV files
A bank's CSV export usually has no opening balance, only a running balance column, if that. When you map that column, Cleanrow checks each balance against the one before it plus the row's amount, which proves the rows and their signs agree with each other. It can't prove that no row is missing before the first one, and the banner says so. Without a balance column the file shows No balances in this file, can't verify. See cleaning up a bank CSV.
Where the check runs
In your browser tab, like the rest of the converter. The statement isn't uploaded to check it, and the result isn't sent anywhere. The privacy policy has the details. The same check runs in Cleanrow for Mac (coming to the Mac App Store), which also reads scanned statements; text recognition can misread digits, and the check is what shows it.
Try it
Add a statement to the converter: the preview, the balance check and row edits are free for any number of statements, and your first file downloads free in every format.