Importing bank statements into Odoo is only the first step. The real benefit only arises when a bank transaction can be reliably matched to the correct outgoing invoice, vendor bill, credit note or payment.
This is exactly where Odoo 19 Community lacks a convenient option in the user interface. Imported bank lines therefore initially remain on the bank suspense account and have to be assigned to an open journal item for further processing.
For our own Odoo 19 Community installation, we have therefore developed the Bank Statement Matcher. Because this problem does not affect only us, we are making the module available free of charge on GitHub under the free AGPL-3 licence.
To the project on GitHub:
Odoo 19 Bank Statement Matcher
From Bank Statement Import to the Right Invoice
With our already published project Odoo 19 Bank Statement Import, various bank statement formats can be read into Odoo 19 Community. These include CAMT.053, CAMT.054, OFX and SWIFT MT940, among others.
The new Bank Statement Matcher complements this import with the next crucial step:
Which imported bank transaction belongs to which open item?
The module searches open receivables and payables, scores possible matches and shows users why a particular match is being suggested. The suggestion can be reviewed, confirmed, corrected or replaced by a manual selection.
This creates an end-to-end workflow for Odoo 19 Community:
Import the bank statement
determine possible matches
review suggestions in bulk
accept unambiguous matches
process unclear cases manually
What the Odoo 19 Bank Statement Matcher Can Do
The module was developed for practical use in accounting. Among other things, it supports the following functions:
search for matching invoices, vendor bills, credit notes and payments
automatic determination of matching suggestions when a bank line is created
clear display of the matching rule used and its confidence
repeat search at a later point in time
individual matching or joint processing of several bank lines
manual selection of an open item if no suggestion fits
reversal of a match that has already been made
detection of several equivalent matches without an arbitrary decision
notes on quotations or orders for which no open journal item exists yet
optional direct handover from the OCA bank statement import to the matching view
German translation with English source text
The central overview can be reached in Odoo under Accounting → Accounting → Bank Line Matching. There, bank lines that are still open can be searched and processed together.
Traceable Matching Instead of a Black Box
With financial data, it is not enough simply to suggest any match. Users must be able to see why a bank transaction is supposed to match a particular document.
The Bank Statement Matcher therefore works with clearly defined rules and different confidence levels:
| Confidence | Rule | Meaning |
|---|---|---|
| 100 | Reference | A document number, payment reference or origin reference was found in the transaction text. |
| 80 | Partner and amount | Business partner and open amount match. |
| 60 | Unique amount | The amount matches exactly one open item only. |
| 30 | Partner | The partner matches, but the amount does not; this is only a hint. |
For each journal, you can specify from which confidence level an unambiguous suggestion may be accepted via the bulk action. Weaker matches remain visible but must be reviewed and confirmed individually.
What matters here: The module does not post unattended in the background. It creates suggestions. A match is made only through a deliberate action by the user – individually or via controlled bulk processing.
Difficult Bank References Are Taken into Account Too
Banks do not always transmit payment references in a uniform form. An invoice number may be combined with names, digits or other details. Separators may be missing or displayed differently from the original document.
The matcher therefore normalises the comparison values and also takes transitions between letters and digits into account. In this way, references can be recognised even if they were appended directly to other content in the bank text, for example.
The search deliberately runs from the Odoo document to the bank text. This avoids short, generic digit sequences in the transaction text leading to a large number of unsuitable matches.
The rules are not restricted to a particular bank, a particular country or a fixed numbering scheme. This makes the module interesting for other Odoo 19 Community installations too.
Why a Repeat Search Matters
Not every bank payment can be matched at import. In practice, a payment may arrive before the associated invoice has been created or posted in Odoo. A vendor bill or credit note may also be recorded only later.
That is why bank lines can be checked again at a later point in time using “Search again”. As soon as the matching open item exists, a bank transaction that previously could not be matched can become an unambiguous match.
If the bank text mentions, for example, a quotation or an order for which no invoice, and therefore no open item, exists yet, the module provides a helpful hint. Instead of merely displaying “no match”, it points out that the invoice may need to be created first.
Safety Takes Priority
An incorrect automatic match can cause more work in accounting than an open bank line. The Bank Statement Matcher has therefore been deliberately designed to be cautious:
Matches with equal scores are not resolved arbitrarily.
Weak suggestions are displayed but not accepted via the bulk action.
Before matching, a check is made again as to whether the open item is still available.
An item that has meanwhile been reconciled by another user is not processed again.
Each bank line is processed within its own database savepoint.
An error on one bank line does not prevent the processing of all other lines.
Incomplete legacy data without a valid posting date are excluded as a precaution.
The module thus supports automation where it saves time, and requires a manual decision where the data is not clear enough.
Working Together with Our Bank Statement Import
The repository consists of two modules:
| Module | Purpose |
|---|---|
| account_statement_matcher | Provides the actual search, scoring, checking and matching. Requires only the Odoo module account. |
| account_statement_matcher_import_oca | Optional bridge to the OCA bank statement import. After an import, the matching view with the newly imported lines is opened directly. |
The optional bridge installs itself automatically if both the matcher and the OCA module account_statement_import_file are present. Bank statement import and the subsequent matching thereby mesh directly.
You can find out more about importing the supported bank formats in our article:
Odoo 19 Bank Statement Import – Our Extensions for the Odoo Community
Installation in Odoo 19 Community
Installation works as with any usual Odoo add-on module:
Copy the module folders into a configured Odoo addons path.
Update the app list in Odoo.
Install the Bank Statement Matcher module.
For each bank journal, specify whether suggestions should be searched for during import.
Select the desired minimum value for controlled bulk matching.
The module was developed and tested for Odoo 19.0 Community. Before use with other Odoo versions, changes to the internal accounting and reconciliation functions in particular must be checked.
As with any extension in the accounting area, we recommend testing the installation first in a test environment with a copy of your own database and typical bank statements.
Free and Open Source for the Odoo Community
At Biricon IT Services GmbH, we develop solutions first for specific requirements from our own operations. If this results in a generally usable module, we do not want to hide it away in a single installation.
The Odoo 19 Bank Statement Matcher is therefore available free of charge as an open-source project. The source code can be viewed, reviewed, adapted and further developed within the terms of the AGPL-3 licence.
Our aim is not to blindly automate as many booking decisions as possible. We want to reduce recurring work while at the same time ensuring that financial matches remain traceable and controllable.
This is how we understand worthwhile open-source development: solve a real problem, document the solution transparently and then make it available to the community.
Project, Source Code and Contributing
The complete source code, the installation instructions and the technical documentation are available on GitHub:
Open Odoo 19 Bank Statement Matcher on GitHub
We welcome practical experience, bug reports, suggestions for improvement and contributions from the Odoo Community.
Free. Traceable. Open source. For Odoo 19 Community.