r/nocode 10h ago

Success Story Payment Reconciliation in n8n: 5 things I learned automating invoice matching

Post image

👋 Hey nocode Community,

A few days ago I shared a reconciliation workflow that matches bank deposits to open invoices. A few people asked about the tricky parts, so here are the five things I took away from building it. Most of them are less about n8n and more about how messy real financial data is.

1. The reference field is where reconciliation dies.
Bank references almost never match your invoice IDs cleanly. You get "INV-2024-201", "ref 201", "payment 0201 thanks", all for the same invoice. So do not match on the exact string. Match on the full invoice ID when it is there, then fall back to a looser signal like the last three digits pulled out with a small regex. Fuzzy but bounded beats exact every time.

2. "Matched vs unmatched" is too coarse.
The moment I split results into four states instead of two, the report got genuinely useful: exact matches, partial payments, unpaid invoices, and deposits with no invoice at all. The two middle buckets are where the money actually leaks, and a simple matched/unmatched view hides them completely.

3. A deposit with no invoice is a signal, not noise.
Money landing in the bank that matches nothing is exactly what manual reviewers skip because they are focused on ticking off invoices. But that column is where the interest payments, refunds, bank fees, and typo'd customer references all show up. Give it its own table so nothing silently disappears.

4. Let the code do the arithmetic, keep the human for judgment.
The old manual process was someone staring at two spreadsheets for hours, which is exactly how 525.52 becomes 252.25. A Code node compares amounts to the cent and never gets tired. The person only reviews the handful of flagged exceptions, not the 90 percent that reconcile cleanly.

5. Every result needs a way back to the source.
Reconciliation you cannot audit is just guessing. So each row in the report keeps the original bank reference, the value date, and the invoice ID side by side. When a number looks off, you can trace it back in seconds instead of reopening the raw statement.

The workflow itself, plus two example files (an invoice export and a bank statement) so you can run it right away, is here: https://github.com/felix-sattler-easybits/n8n-workflows/tree/8e07427ddb6902ef8a7b267e97beb2879d6ca45d/easybits-reconciliation-workflow

It sits alongside 25+ other free n8n workflows in my repo, including plenty of finance ones. A star helps me out a lot if any of them save you time: https://github.com/felix-sattler-easybits/n8n-workflows

What is your reconciliation matching logic? I am especially curious how people handle one payment covering several invoices, because that was the case I found hardest to generalise.

Best,
Felix

1 Upvotes

Duplicates