Skip to content

No account required

Start a project

5 min · 4 sections

Analysis for people who reconcile other people's books.

The work is not the addition. It is deciding what each line was, and being able to show the decision afterwards.

By Data Analysis App team

How do I find what a year of bank transactions actually says?

Classify every line before summarising anything, and keep transfers between the client's own accounts out of income. A credit matched to an equal debit from another account they own is not revenue, and refunds netted against the spending they reverse are not income either. Those two rules alone routinely move a year's stated income by more than ten per cent.

Section 01

Transfers are the largest single correction

Money moved from a savings account to a current account produces a credit that looks exactly like revenue in the receiving account. A year of that inflates income by whatever was moved, and the total still reconciles perfectly against the bank.

Catching it needs both sides present, which is the argument for loading every account rather than the trading one. A credit matched to an equal and opposite debit within a few days is a transfer, and the pairing should be listed so a human can disagree with it.

In one worked example, $486,200 came into the accounts across the year. How much of that is income depends entirely on which lines turn out to be transfers.

Section 02

Merchants before categories

A statement says SQ *THE COFFEE HOUSE 04, not a category. The descriptor changes when the merchant changes payment processor, so categorising the raw string produces three merchants where there is one and three category totals that are each wrong.

Normalise the merchant first, then categorise. It is more work and it is the step that makes every downstream number defensible.

Section 03

Report what did not match

Receipts matched to invoices on reference and amount will leave a residue, and part-payments need grouping back to the invoice they belong to. The residue is not a failure; it is the list somebody has to work through.

What matters is that it is counted and named rather than quietly absorbed. An unmatched receipt that disappears into a category total is a reconciliation that reports success and is not one.

Section 04

What to ask the client for

Every account, not just the trading one, because own-account transfers can only be identified when both sides are present. A CSV or OFX export beats a PDF statement: a PDF has already discarded the payment reference field, which is what invoice matching runs on.

Then the sales ledger or invoice list. It is read and handed back as a download, and the report says whether it looks related to the statements, but the figures all come from one table, so receipts are not matched against invoices for you. That half of the work stays manual.

See it on a real project

Two clients, 38% of revenue, accounted for every one of the 38 overdrawn days.

Is winter actually our slow season?

Keep reading

Every check in this guide runs on every upload.

Drop the file in and the problems described here are tested before anything is reported: with the rows behind each repair kept, so you can see exactly what changed.

  • Subtotal rows detected and excluded
  • Duplicates matched on identity, not on whole rows
  • Text-typed numbers found, coerced and counted

No account needed to start. You only pay when you like what you see.