Every small business hits the same month-end moment: the bank statement on one side, your invoices or ledger on the other, and the quiet hope that they agree. If you do not run accounting software, that check usually means two exports and a long evening with a spreadsheet.
It does not have to. Here is the workflow we use and the thinking behind it.
1. Get both sides into CSV
Export the bank statement as CSV or Excel from your bank's site. Export the other side the same way: your invoice list, payment log or ledger. Keep one currency per run - mixing currencies quietly corrupts every total.
2. Normalize three columns
Every matching method comes down to three fields: date, amount and reference. Make sure each file has them, and check the date format. Day-first and month-first dates are the classic silent killer: 03/04 means April 3 to one side and March 4 to the other.
3. Match in passes, not all at once
Start strict, then loosen:
- Exact pairs first. Same amount, same or nearby date. These need no thought.
- Reference matches next. An invoice number that appears on both sides counts for a lot and can bridge a wider date gap, because bank transfers often land days after the invoice.
- Probable matches last. Amount within a small tolerance, date within a few days. Label them, but do not force them. Anything unclear belongs on a review list, not in the matched pile. Each row gets used once.
4. Expect the two classic traps
- Batch payouts. One deposit often covers several invoices, especially from payment processors. A single bank row can equal the sum of two to six rows on the other side.
- Part-payments. Same reference, different amount. That is not a failed match - it is a signal, and it deserves its own list with the difference shown.
5. Read the unmatched lists - they are the point
The matched pile is comfort. The unmatched lists are the work:
- Bank rows with nothing on the books side: money arrived with no paperwork. Find the missing invoice.
- Book rows with nothing on the bank side: issued but not yet paid. That is your follow-up list.
The tool we built for this
Disclosure: we built it. The Bank Reconciliation Matcher does exactly this in the browser. You drop the two CSV or Excel files in, it pairs rows by amount, date and reference, labels exact, reference and probable matches, groups batch payouts, lists part-payments with the difference, and gives you a workbook with matched, unmatched and amount-differs sheets. Your files stay in the page - there is no server receiving them.
The free page reads the first 150 rows of each file, which covers a typical month. If you need no row cap and offline use, there is a $19 one-time pack. It pairs rows and suggests; you confirm. Try it here: https://statement-converter-c41.pages.dev/bank-reconciliation-matcher/
Month-end stops being a detective story when the unmatched lists are short and named.
Top comments (1)
The batch-payout trap has a tax side worth adding for US freelancers who file Schedule C. A Stripe or PayPal payout lands net of fees and refunds, but the 1099-K the processor sends reports the gross amount before any of that comes out. If you book the deposit as your income, your Schedule C comes in lower than what the IRS already has on file, and that mismatch is a common trigger for a CP2000 notice (the letter that proposes extra tax when reported income doesn't match).
A few things that keep the reconciliation and the tax return in agreement:
Your point about day-first vs month-first dates matters here too: near December 31 it can push a payment into the wrong tax year.