Skip to Content

Odoo 19 Community: Automatically Matching Bank Payments to Invoices – Our Open-Source Bank Statement Matcher

14 September 2026 by
Odoo 19 Community: Automatically Matching Bank Payments to Invoices – Our Open-Source Bank Statement Matcher
Alexander Biringer | Biricon IT Services GmbH

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:

  1. Import the bank statement

  2. determine possible matches

  3. review suggestions in bulk

  4. accept unambiguous matches

  5. 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:

ConfidenceRuleMeaning
100ReferenceA document number, payment reference or origin reference was found in the transaction text.
80Partner and amountBusiness partner and open amount match.
60Unique amountThe amount matches exactly one open item only.
30PartnerThe 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:

ModulePurpose
account_statement_matcherProvides the actual search, scoring, checking and matching. Requires only the Odoo module account.
account_statement_matcher_import_ocaOptional 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:

  1. Copy the module folders into a configured Odoo addons path.

  2. Update the app list in Odoo.

  3. Install the Bank Statement Matcher module.

  4. For each bank journal, specify whether suggestions should be searched for during import.

  5. 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.