Yes, almost every Odoo bank reconciliation problem can be fixed without starting over. Most come from five causes: no opening balance, duplicate or missing transactions, payments recorded twice, transactions with no partner, and no reconciliation models for repeat items like bank fees. Fix them in that order and your Odoo bank balance should match your bank statement again.
Why doesn’t my Odoo bank balance match my bank statement?
Every bank transaction in Odoo posts to your bank account and a suspense account until it is reconciled. Unreconciled lines sit in suspense, so your reports look wrong even when the cash is right. The usual causes are:
- No opening balance. Odoo says to create an opening transaction for the balance on the day you start importing or syncing. Without it, every statement is off by the same amount.
- Duplicate or missing transactions from double imports or bank sync gaps.
- Payments recorded twice: once when registered on the invoice and again when the bank line is written off to an account.
- No partner on the transaction, so automatic matching has little to work with.
- No reconciliation models for bank charges and other repeat items, so small differences stay open.
How do I find and remove duplicate bank transactions?
Odoo has a built-in duplicate check. It flags transactions with the same amount, date and account number, or the same transaction ID if they came through bank sync.
- Go to the Accounting Dashboard and click your bank journal’s name.
- Open the Actions menu and click Find Duplicate Transactions.
- Pick a starting date, review the list carefully, and click Delete Selected only for true duplicates.
For missing transactions, group your lines into statements. Odoo shows a warning when a statement’s starting balance doesn’t equal the previous ending balance, which points you straight to the gap. Menu names here follow the current Odoo documentation; older versions can differ slightly.
Why does my invoice say “In payment” instead of “Paid”?
Registering a payment marks an invoice or bill as In payment. It only becomes Paid after the matching bank transaction is reconciled with it.
A common mistake is reconciling the bank line with Set Account (for example straight to sales income) instead of using Reconcile to pick the open invoice or payment. The cash is booked, but the invoice stays open and your receivables are overstated. Fix it by unreconciling that line and matching it to the existing invoice or payment.
Why isn’t Odoo matching transactions automatically?
Odoo’s default matching depends on the data in the bank line. With no partner set, it compares the transaction label with invoice numbers, customer and bill references, and payment references. With a partner set, it matches on amount: exact match first, then early-payment discount, then an invoice amount found in the label.
| Symptom | Likely cause | Fix |
|---|---|---|
| Nothing auto-matches | Customers don’t quote invoice numbers | Ask customers to put the invoice number in the transfer reference |
| Matches only after manual work | No partner on bank lines | Set the partner; Odoo then filters to that partner’s open items |
| Small leftover amounts | Bank charges deducted from transfers | Create a Bank Fees reconciliation model for the difference |
| Same transfer appears twice | Re-imported statement or sync error | Run Find Duplicate Transactions |
| Invoice stuck “In payment” | Bank line written off to an account | Unreconcile and use Reconcile to match the invoice |
What does a clean monthly reconciliation routine look like?
- Import or sync transactions at least weekly, not once at month end.
- Group them into statements and check the ending balance against the bank’s statement.
- Run the duplicate check before reconciling.
- Let auto-matching and reconciliation models handle the easy lines first.
- Match the rest with Reconcile, and use Set Account only for items with no invoice or bill, such as bank fees.
- Check that the suspense account balance is zero before you close the month.
Get your month-end closing on time again
If your team spends days chasing bank differences, the problem is usually setup, not effort. We review your journals, payment settings and matching rules, clean up the backlog, and set up a routine your accountant can run in an afternoon.
FAQ
Can I undo a bank reconciliation in Odoo?
Yes. Expand the reconciled transaction in the Bank Matching view and delete its counterpart items with the trash icon. The transaction goes back to unreconciled and can be matched again correctly.
Which bank statement formats can Odoo import?
Odoo imports CAMT.053, CSV, Excel (XLSX), OFX and QIF files, plus CODA for Belgium. CSV and XLSX files need a one-time column mapping. If your bank only gives PDF statements, ask for an Excel or CSV export instead.
What happens if a customer pays less than the invoice?
Odoo fully reconciles the bank transaction and leaves the difference open on the invoice. You can keep the balance open to collect later, or mark the invoice as fully paid and write off the difference.
Related service: Odoo Consulting
Sources: Odoo docs: Bank reconciliation, Odoo docs: Transactions, Odoo docs: Payments

