Importing bank statements into Odoo is only the first step. The real value comes when a bank transaction can be reliably matched to the correct customer invoice, supplier invoice, credit note or payment.
This is precisely where Odoo 19 Community lacks a convenient option in the user interface. As a result, imported bank statement lines initially remain in the bank suspense account and must be matched to an outstanding journal item for further processing.
We therefore developed Bank Statement Matcher for our own Odoo 19 Community installation. As others face the same problem, we are making the module available free of charge on GitHub under the AGPL-3 licence.
View the project on GitHub:
Odoo 19 Bank Statement Matcher
From importing bank statements to finding the right invoice
Our previously released project, Odoo 19 Bank Statement Import, allows various bank statement formats to be imported into Odoo 19 Community. These include CAMT.053, CAMT.054, OFX and SWIFT MT940.
The new Bank Statement Matcher adds the next crucial step to this import process:
Which imported bank transaction belongs to which outstanding item?
The module searches outstanding receivables and payables, assesses potential matches and shows users why a particular match is suggested. Users can review, confirm or correct the suggestion, or replace it with a manual selection.
This creates an end-to-end workflow for Odoo 19 Community:
import a bank statement
identify potential matches
review suggestions in bulk
accept unambiguous matches
handle ambiguous cases manually
What Odoo 19 Bank Statement Matcher can do
The module was developed for day-to-day accounting work. Its features include:
searching for matching customer invoices, supplier invoices, credit notes and payments
automatic generation of suggested matches when a bank statement line is created
clear display of the matching rule used and its confidence level
running the search again later
matching individual bank statement lines or processing several together
manual selection of an outstanding item when none of the suggestions fit
undoing an existing match
detection of multiple equally suitable matches without making an arbitrary choice
references to quotations or orders for which no outstanding journal item exists yet
optional direct handover from the OCA bank statement import to the matching view
German translation of the English source text
The central overview is available in Odoo under Accounting → Accounting → Bank Statement Matching. Here, outstanding bank statement lines can be searched and processed together.
Transparent matching rather than a black box
When working with financial data, suggesting just any match is not enough. Users need to understand why a bank transaction is considered a match for a particular document.
Bank Statement Matcher therefore uses clearly defined rules and different confidence levels:
| Confidence | Rule | Meaning |
|---|---|---|
| 100 | Reference | A document number, payment reference or source reference was found in the transaction description. |
| 80 | Partner and amount | The business partner and outstanding amount match. |
| 60 | Unique amount | The amount matches exactly one outstanding item. |
| 30 | Partner | The partner matches, but the amount does not; this is only a hint. |
For each journal, you can specify the minimum confidence level at which an unambiguous suggestion may be applied through the bulk action. Lower-confidence matches remain visible but must be reviewed and confirmed individually.
A key point: the module does not post entries unattended in the background. It creates suggestions. A match is applied only when the user explicitly takes action – individually or through controlled bulk processing.
Even tricky bank references are taken into account
Banks do not always transmit payment references in a consistent format. An invoice number may be combined with names, digits or other details. Separators may be missing or appear differently from those in the original document.
The Matcher therefore normalises the values being compared and also recognises transitions between letters and digits. This allows it to recognise references even when they are attached directly to other content in the bank transaction description.
The search deliberately works from the Odoo document to the bank transaction description. This prevents short, generic sequences of digits in the transaction description from producing large numbers of irrelevant matches.
The rules are not restricted to a particular bank, country or fixed numbering scheme. This also makes the module useful for other Odoo 19 Community installations.
Why searching again matters
Not every bank payment can be matched during import. In practice, a payment may arrive before the corresponding invoice has been created or posted in Odoo. A vendor bill or credit note may also be entered later.
Bank statement lines can therefore be checked again later using “Search Again”. Once the relevant outstanding item exists, a previously unmatched bank transaction can become a clear match.
If, for example, the bank transaction description mentions a quotation or order for which no invoice, and therefore no outstanding item, exists yet, the module provides a helpful message. Rather than simply displaying “no match”, it points out that the invoice may need to be created first.
Safety comes first
An incorrect automatic match can create more accounting work than an unmatched bank statement line. Bank Statement Matcher has therefore been deliberately designed to err on the side of caution:
Equally scored matches are not resolved arbitrarily.
Low-confidence suggestions are displayed but are not applied through the bulk action.
Before matching, the module checks again that the outstanding item is still available.
An item that another user has since reconciled is not processed again.
Each bank statement line is processed within its own database savepoint.
An error on one bank statement line does not prevent the other lines from being processed.
Incomplete legacy data without a valid posting date is excluded as a precaution.
The module therefore supports automation where it saves time and requires a manual decision where the available data is not clear enough.
Integration with our Bank Statement Import
The repository contains two modules:
| Module | Purpose |
|---|---|
| account_statement_matcher | Provides the core search, scoring, validation and matching functions. Requires only the Odoo account module. |
| account_statement_matcher_import_oca | Optional bridge to the OCA bank statement import. After an import, the matching view opens immediately with the newly imported lines. |
The optional bridge installs automatically when both the Matcher and the OCA module account_statement_import_file are present. This directly connects the bank statement import with the subsequent matching process.
For more on importing the supported bank formats, see our article:
Odoo 19 Bank Statement Import – our extensions for the Odoo Community
Installation in Odoo 19 Community
Installation follows the usual process for an Odoo add-on:
Copy the module folders to a configured Odoo addons path.
Update the Apps list in Odoo.
Install the Bank Statement Matcher module.
Specify for each bank journal whether to search for suggestions during import.
Select the desired minimum confidence level for controlled bulk matching.
The module was developed and tested for Odoo 19.0 Community. Before using it with other Odoo versions, check in particular for changes to the internal accounting and reconciliation functions.
As with any accounting extension, we recommend first testing the installation in a test environment using a copy of your own database and typical bank statements.
Free and open source for the Odoo Community
At Biricon IT Services GmbH, we initially develop solutions to meet specific needs within our own business. When that produces a module others can use, we do not want to keep it hidden away in a single installation.
Odoo 19 Bank Statement Matcher is therefore available free of charge as an open-source project. Its source code can be viewed, reviewed, adapted and developed further under the AGPL-3 licence.
Our aim is not to automate as many accounting decisions as possible without scrutiny. We want to reduce repetitive work while ensuring that financial matching remains traceable and under the user’s control.
This is what meaningful open-source development means to us: solving a real problem, documenting the solution transparently and then making it available to the community.
Project, source code and contributions
The full source code, installation instructions and technical documentation are available on GitHub:
View Odoo 19 Bank Statement Matcher on GitHub
We welcome feedback from real-world use, bug reports, suggestions for improvements and contributions from the Odoo Community.
Free. Transparent. Open Source. For Odoo 19 Community.