StatementDecoder

Using bank statements for taxes and bookkeeping: a practical workflow

2026-07-19 · 8 min read

Every tax season, the same reconstruction job: a year of bank activity needs to become categorised, defensible records. Whether you're self-employed doing your own return, or a bookkeeper onboarding a client whose "records" are a folder of PDFs, the workflow below turns statements into a ledger without the usual weekend of copy-paste.

First, what statements can and can't prove

A statement proves a payment happened — date, amount, payee. It usually does not prove what was purchased or why it was a business expense, which is what receipts and invoices add. Practical standard: statements as the backbone (complete, chronological, bank-issued), receipts attached for significant or audit-sensitive items. Tax authorities generally expect supporting records kept for several years — check your jurisdiction's exact rule and keep the PDFs regardless: banks limit online history, and retrieving old statements later can be slow and chargeable.

Step 1 — gather the whole period at once

Download every statement for the tax year in one sitting, from every account business money touched — including the personal account that "occasionally" paid for business things. Gaps are the classic failure: a missing March statement discovered in the final week. Native CSV exports beat PDFs where offered; PDFs are fine for the months where that's all the bank gives (usually the older ones).

Step 2 — convert everything to one format

Normalise the pile into a single spreadsheet-ready format. This is exactly what the statement converter is for: PDFs (including scanned ones) and mixed exports become consistent CSV or Excel with identical columns — and after each conversion you reconcile three numbers against the statement's own summary: opening balance, closing balance, debit/credit totals. If those match, the rows in between are sound. Batch upload (a zip of the year) does the whole pile in one pass on paid plans.

Step 3 — deduplicate the overlaps

Monthly statements overlap at the edges, and re-downloaded files duplicate whole months. Concatenating naively double-counts income and expenses — the error accountants dread because it inflates both sides plausibly. Dedupe on (date, amount, descriptor) before anything else. When statements are uploaded to one StatementDecoder account this happens automatically, including for re-exported copies whose AI-extracted descriptions differ slightly between runs.

Step 4 — categorise from merchants, not descriptors

SQ *BLUE BTTL 0412 can't be categorised; Blue Bottle Coffee — Cafes can. Identification is the step that turns a converted file into bookkeeping: once each row has a real merchant and category, expense categories follow almost mechanically, and the judgment calls that remain (is this meal deductible?) are at least about known merchants. This is the analyzer's core job — every row identified with a confidence level, so you know which few to double-check by hand.

Step 5 — separate business from personal honestly

For mixed accounts, go line by line with three buckets: business, personal, and split (phone, home office utilities — flag for proportion rules). Recurring charges deserve special attention: subscriptions are easy deductions to miss and easy ones to overclaim — the analyzer's subscription detection gives you the complete recurring list with yearly totals to work from.

Step 6 — reconcile and export for the destination

Final integrity pass: yearly totals per account against the sum of statement closing balances; spot-check the largest transactions against receipts. Then export in whatever the destination wants — CSV/Excel for a spreadsheet return or an accountant, QIF for Quicken/GnuCash, OFX for accounting software imports. If your accountant wants a specific date format or column layout, the AI export transform applies it — with a deterministic verifier proving that amounts, dates and row counts survived the reshaping untouched.

Keep it from piling up again

The reconstruction job exists because statements were never processed when they arrived. The fix costs minutes: upload each statement in the month it lands, let the change alerts flag new recurring charges, and next year's "tax prep" is an export, not an archaeology project.