Reconciliation: making imports actually tie out
Inside the pipeline that matches transactions to balances so the numbers are never “close enough.”
"Close enough" is where personal finance apps go to die. A feed drops a transaction, a pending charge settles at a different amount, a transfer shows up twice — and slowly your app's idea of your balance drifts from your bank's. finura's answer is a reconciliation pipeline whose whole job is to keep those two numbers identical.
The invariant
Every synced account holds one rule: the sum of transactions since the last known balance must equal the current balance. If it doesn't, something is wrong, and we surface it rather than paper over it.
Where imports go wrong
- Duplicates — the same transaction arrives from two syncs with slightly different IDs.
- Pending → posted — a charge authorized at one amount settles at another.
- Transfers — money leaving one account and entering another looks like two unrelated events.
- Gaps — a feed outage leaves a hole that later balances silently absorb.
How the pipeline resolves them
- Dedupe on a stable fingerprint, not the provider's ID, so re-syncs don't double-count.
- Match pending to posted so an amount change updates one transaction instead of creating two.
- Pair transfers across accounts so they net to zero in your spending.
- Reconcile to the balance — and when the math doesn't tie out, flag it for review instead of hiding the discrepancy.
A number that reconciles is a number you can stop thinking about. That silence is the feature.
The payoff is boring in the best way: you open finura, the balance matches your bank to the cent, and you never have to wonder which one is lying.
David is the founder of finura, building a personal finance platform for people whose money crosses borders and currencies.