A converted statement can balance to the cent and still be wrong. This guide shows how to check extracted transactions against the statement’s own figures, which errors those checks catch, and which ones only reading the PDF will.
It works for a file from any converter, or typed by hand. The examples are invented, with downloads and formulas to try them yourself.
willow-2026-07-swapped-amounts.csvSample
The first six rows of an extraction whose rent and contractor amounts are swapped, with each row’s running balance difference.
Description
Amount
Balance
Difference
Northstar Studio - Invoice 1045
2,750.00
14,888.50
0.00
Workspace rent
−1,900.00 (differs from the statement)
13,688.50
−700.00
Software subscription
−85.00
13,603.50
0.00
Hardware store - card purchase
−240.00
13,363.50
0.00
Hardware store - refund
240.00
13,603.50
0.00
Contractor payments
−1,200.00 (differs from the statement)
11,703.50
700.00
Closing balance✓Passes
Total credits✓Passes
Total debits✓Passes
Running balances×Fails
Balanced, and still wrong: two amounts swapped between rows leave every total intact.
The method
Six steps, from cheapest to most thorough.
The first and last are a person reading the PDF. The four between are spreadsheet checks that take seconds: three of arithmetic, then dates and the count. Each one catches something the others can miss, so a careful check uses all of them.
1
Copy the printed figures first
Before looking at the extraction, write down what the statement itself prints: the opening and closing balances, the totals of credits and debits, the number of items if it gives one, and the period. These are your independent evidence. Take them from the PDF, never from the converted file.
2
Tie out the closing balance
Opening balance plus every amount must equal the closing balance, to the cent. This catches most lost or doubled rows and most sign errors — unless two errors cancel.
3
Tie out each side separately
Add the credits and the debits on their own and compare each with its printed total. A pair of rows that cancel each other still changes both totals, and a credit read as a debit moves twice its amount.
4
Walk the running balance
When the statement prints a balance after each row, check every link: the balance above, plus this amount, gives this balance. It is the only arithmetic check that sees which row an amount sits on.
5
Check the dates and the count
Count the rows against the number of items the statement lists, if it prints one. Then look for a date outside the statement period, or earlier than the row above it. These flag errors that leave every amount right, but a flag is a reason to look at the PDF, not proof of an error: some statements print items dated outside the period, or list rows out of date order. A faithful extraction keeps the dates and order the statement prints, even where they break these checks.
6
Read a sample against the PDF
Arithmetic cannot read. Compare some rows in full — date, description, amount — with the page, starting where errors gather: page breaks, wrapped descriptions, and the rows around anything that failed above.
The worked example
One fictional statement, extracted five ways.
Willow Studio’s July statement lists ten transactions and prints the figures every check needs. Below it are four extractions with one realistic error each, and what each check makes of them.
Sample BankFictional statement
Account holder
Willow Studio LLC
Period
Jul 1, 2026 – Jul 31, 2026
Opening balance
12,138.50
Total credits
5,800.00
Total debits
4,113.90
Closing balance
13,824.60
Items listed
10
The statement's ten transactions, as printed.
Date
Description
Amount
Balance
2026-07-01
Northstar Studio - Invoice 1045
2,750.00
14,888.50
2026-07-02
Workspace rent
−1,200.00
13,688.50
2026-07-06
Software subscription
−85.00
13,603.50
2026-07-09
Hardware store - card purchase
−240.00
13,363.50
2026-07-09
Hardware store - refund
240.00
13,603.50
2026-07-14
Contractor payments
−1,900.00
11,703.50
2026-07-17
Fieldwork Co. - Invoice 1046
1,850.00
13,553.50
2026-07-22
Insurance premium
−312.40
13,241.10
2026-07-28
Riverside Print - Invoice 1047
960.00
14,201.10
2026-07-30
Utilities
−376.50
13,824.60
Every figure is invented. Amounts are signed the way the formulas below expect: a credit is positive, a debit negative. The download is the faithful extraction, columns date,description,amount,balance.
The rent and the contractor payments trade amounts, as happens when rows are re-paired after a table is split across columns or pages.
Two amounts swapped: the extracted rows, with each row's running balance difference.
Date
Description
Amount
Balance
Difference
2026-07-01
Northstar Studio - Invoice 1045
2,750.00
14,888.50
0.00
2026-07-02
Workspace rent
−1,900.00 (differs from the statement)
13,688.50
−700.00
2026-07-06
Software subscription
−85.00
13,603.50
0.00
2026-07-09
Hardware store - card purchase
−240.00
13,363.50
0.00
2026-07-09
Hardware store - refund
240.00
13,603.50
0.00
2026-07-14
Contractor payments
−1,200.00 (differs from the statement)
11,703.50
700.00
2026-07-17
Fieldwork Co. - Invoice 1046
1,850.00
13,553.50
0.00
2026-07-22
Insurance premium
−312.40
13,241.10
0.00
2026-07-28
Riverside Print - Invoice 1047
960.00
14,201.10
0.00
2026-07-30
Utilities
−376.50
13,824.60
0.00
Closing balance✓Passes
Total credits✓Passes
Total debits✓Passes
Item count✓Passes
Running balances×Fails
Dates in period✓Passes
Date order✓Passes
Both debits are still there, so the closing balance and both totals still agree. Only the running balance chain breaks, on exactly the two swapped rows, by equal and opposite amounts.
07/06/2026 is read day-first, as 7 June instead of 6 July — the usual result of opening a US-format date in a day-first locale.
A date read in the wrong order: the extracted rows, with each row's running balance difference.
Date
Description
Amount
Balance
Difference
2026-07-01
Northstar Studio - Invoice 1045
2,750.00
14,888.50
0.00
2026-07-02
Workspace rent
−1,200.00
13,688.50
0.00
2026-06-07 (differs from the statement)
Software subscription
−85.00
13,603.50
0.00
2026-07-09
Hardware store - card purchase
−240.00
13,363.50
0.00
2026-07-09
Hardware store - refund
240.00
13,603.50
0.00
2026-07-14
Contractor payments
−1,900.00
11,703.50
0.00
2026-07-17
Fieldwork Co. - Invoice 1046
1,850.00
13,553.50
0.00
2026-07-22
Insurance premium
−312.40
13,241.10
0.00
2026-07-28
Riverside Print - Invoice 1047
960.00
14,201.10
0.00
2026-07-30
Utilities
−376.50
13,824.60
0.00
Closing balance✓Passes
Total credits✓Passes
Total debits✓Passes
Item count✓Passes
Running balances✓Passes
Dates in period×Fails
Date order×Fails
Every balance agrees. The date falls outside the statement period and before the row above it, so the two date checks flag it, and the PDF confirms it: the statement prints 6 July.
The closing balance is the check most people stop at. Here it passes every extraction, though only the first is right. Each further check closes a different gap, and one error passes all of them.
The seven checks on each extraction. Computed from the downloadable files, with the formulas in the next section.
Extraction
Closing balance
Total credits
Total debits
Item count
Running balances
Dates in period
Date order
A faithful extraction
✓Passes
✓Passes
✓Passes
✓Passes
✓Passes
✓Passes
✓Passes
Two amounts swapped
✓Passes
✓Passes
✓Passes
✓Passes
×Fails
✓Passes
✓Passes
An offsetting pair dropped
✓Passes
×Fails
×Fails
×Fails
✓Passes
✓Passes
✓Passes
Descriptions on the wrong rows
✓Passes
✓Passes
✓Passes
✓Passes
✓Passes
✓Passes
✓Passes
A date read in the wrong order
✓Passes
✓Passes
✓Passes
✓Passes
✓Passes
×Fails
×Fails
Spreadsheet formulas
The same checks, in Excel or Google Sheets.
Open a downloaded CSV: the date is in column A, the description in B, the signed amount in C and the printed balance in D, with the ten rows in 2 to 11. Type the statement’s figures into column G, then paste each formula anywhere. TRUE is a pass.
For your own file, change 11 to your last row and 10 to the row above it — the dropped-pair sample has eight rows, so there it is 9 and 8. If dates stay left-aligned as text, convert them to dates first, or the date checks compare text. Some locales separate arguments with a semicolon instead of a comma.
Typed in by you, from the PDF
Cell
Figure
Sample value
G2
Opening balance
12138.50
G3
Closing balance
13824.60
G4
Total credits
5800.00
G5
Total debits
4113.90
G6
Items listed
10
G7
Period start
2026-07-01
G8
Period end
2026-07-31
Closing balance
=ROUND(G2+SUM(C2:C11),2)=G3
The opening balance plus every amount equals the printed closing balance.
Total credits
=ROUND(SUMIF(C2:C11,">0"),2)=G4
The positive amounts add up to the printed total of credits.
Total debits
=ROUND(-SUMIF(C2:C11,"<0"),2)=G5
The negative amounts, as a positive figure, add up to the printed total of debits.
Item count
=COUNT(C2:C11)=G6
There are as many amounts as the statement says it lists.
Running balances
Column E, then filled down:
E2 =ROUND(G2+C2-D2,2)
E3 =ROUND(D2+C3-D3,2)
In E2, the opening balance plus the first amount, less the first printed balance. In E3, filled down to E11, the row above's balance plus this amount, less this balance. Any row that is not zero is where the chain breaks.
No date falls before the period's first day or after its last.
Date order
=SUMPRODUCT((A3:A11<A2:A10)*1)=0
No date is earlier than the one above it.
What arithmetic cannot see
Some errors leave every number right.
Reconciliation proves the amounts add up to the statement’s own figures. It cannot say whether each amount, date and description is on the right row. These are the cases to read for by eye.
Descriptions on the wrong rows
A wrapped description attached to its neighbour changes no figure. Read the descriptions around wrapped lines and page breaks against the PDF.
Amounts swapped without a printed balance
When the statement prints no balance per row, nothing ties an amount to its row. Two debits that trade places pass every total.
Errors that cancel inside one side
One debit read 100.00 too high and another 100.00 too low leave the debit total, the closing balance and the count intact.
Legitimate duplicates, and real ones
Two identical charges on one day can be genuine. A duplicate check only points at rows to read; it cannot decide which they are.
Several accounts in one PDF
Each account has its own opening and closing balance. Check each account against its own printed figures, never one combined total.
A misread printed figure
Every check compares against what you copied from the statement. Copy those figures from the PDF yourself; a converter that misreads a total and a row the same way can agree with itself.
Limits
What a passing check does not tell you.
Every check above compares the extraction with something independent. When that something is absent, or comes from the same reading, the check proves less. Say which checks you could run, not just that the file “checked out”.
A pass is evidence, not proof
Passing every check makes many errors impossible and the rest less likely. It never shows that every row is right.
A missing figure is a missing check
If the statement prints no totals, there is nothing to compare totals against. Record that check as not done, never as passed, and lean harder on the running balance and reading.
No running balance, no row-level arithmetic
Many statements print a balance only daily, or not at all. Then only totals and reading remain, and errors that move amounts between rows go unseen by arithmetic.
A failure says where to look, not what is wrong
A broken chain points at rows; a short total points at a side; a flagged date points at a row, which may be just what the statement prints. The cause still has to be read off the PDF.
Where DocShape fits
It runs the balance checks for you, and leaves the reading to you.
DocShape converts PDF bank statements to Excel and CSV, and checks each account’s extracted transactions against the opening balance, the closing balance, the totals and the running balances its statement prints — exactly, with no tolerance.
Its checks are arithmetic. It does not compare dates, counts or descriptions, so the reading steps above still apply to its files, as to any converter’s.
VerifiedThe extracted amounts reconcile with balances or totals DocShape read from the statement. This does not confirm that every transaction, date or description was captured correctly.
Needs reviewOne or more verification checks did not reconcile. Review the extracted data before exporting.
Could not be verified automaticallyDocShape did not recognize enough independent financial figures in this statement to check the extracted amounts automatically. The statement may contain balances or totals in a format DocShape does not yet support. Review the result against your statement before relying on it.