Import bank statements in MT940, CAMT.053, OFX, QIF or CSV and auto-map them to journals — built, installed & supported by ECOSIRE. One-time license from $199.00 USD for Odoo 17, 18, 19 — includes 12 months of updates and support.

Import bank statements in MT940, CAMT.053, OFX, QIF or CSV and auto-map them to journals — built, installed & supported by ECOSIRE.
No payment now. This sends a quote request to our team — we'll follow up by email with pricing and next steps.
If your bank does not offer a live feed to Odoo — or the feed is unreliable, region-specific, or Enterprise-only — your finance team is stuck keying transactions by hand or wrestling with brittle spreadsheet imports. Odoo's core account.statement.import handles OFX, QIF, CAMT and CSV to a point, but real bank exports are messy: German banks ship MT940, some SWIFT statements arrive as CAMT.053, and every bank's CSV puts the date, value date, amount, sign, and reference columns in a different order. That mismatch is exactly where reconciliation breaks down.
MT940 parser (SWIFT / German bank format) handling :61: / :86: transaction and detail lines, opening and closing balances
CAMT.053 (ISO 20022 camt.053.001.xx) XML parser reading Ntry, NtryDtls and end-to-end references
OFX and QIF parsers for personal-banking and legacy exports
Fully configurable CSV/TSV parser: delimiter, quote char, header row, date format, decimal and thousand separators
Saved bank-specific column-mapping templates stored as an Odoo model — pick the bank, upload, done
Support for single signed-amount columns OR separate debit/credit columns, plus sign-inversion per bank
This is a BUILD-TO-ORDER module: ECOSIRE designs, builds, installs and supports a bank-statement import engine tailored to the exact file formats your banks actually produce. It is not an instant apps.odoo.com download — we scope it to your banks, build it against your Odoo edition, and hand it over configured and tested. Typical delivery is 2–4 weeks depending on how many banks and formats you need.
Under the hood it ships as a proper Odoo addon: a versioned __manifest__.py declaring dependencies on account and account_bank_statement_import, ORM models (models.Model) for reusable bank-mapping templates and import runs, parsers for MT940, CAMT.053 (ISO 20022), OFX, QIF and arbitrary CSV, and a guided wizard (TransientModel) that lets your team upload a file, pick the target journal, preview parsed lines, and post the resulting account.bank.statement. Each import creates standard statement lines so Odoo's existing reconciliation, bank-matching rules and reporting work unchanged — nothing is bolted on the side.
Column mapping is stored, not re-guessed every time. We build a saved template per bank (which column is the transaction date, which is the value date, whether amount is a single signed column or separate debit/credit columns, the decimal/thousand separators, the date format, and the currency) so a treasury clerk just chooses "HSBC AED — Current" and uploads. Duplicate-line detection compares the bank's unique end-to-end reference (or a computed hash of date + amount + reference via an @api.depends compute field) against already-imported lines, so re-importing an overlapping date range never double-books a transaction. Multi-currency statements are parsed with the statement currency preserved and converted against the journal currency using Odoo's rate on the transaction date.
Security follows Odoo conventions: access to the import wizard and mapping templates is governed by ir.model.access.csv and, where you need it, record rules scoped to company_id so a multi-company group only sees its own bank templates. Everything is delivered with a QWeb import-summary report, an optional automated action to email finance when a file fails to parse, and — if you integrate upstream systems — the standard XML-RPC / JSON-RPC endpoints to push files programmatically. We build on Community or Enterprise and support Odoo 17, 18 and 19.
Downloads statements from the bank portal every morning and currently types or copy-pastes each line into Odoo. Wants to upload the same file and have transactions land in the right journal, deduplicated, ready to reconcile — in seconds, not hours.
Owns reconciliation accuracy and month-end close across several bank accounts and currencies. Needs guaranteed no-double-booking, a clear audit trail of what was imported, and consistent handling when a bank changes its export layout.
Runs the Odoo instance and cares about a clean, upgrade-safe addon rather than one-off scripts. Wants proper access rights, multi-company isolation, and optionally an XML-RPC/JSON-RPC or SFTP hook so imports can be automated instead of manual.
Buy the license on ecosire.com and download the Bank Statement Import (MT940/CSV/OFX) module ZIP from your account dashboard.
Extract the ZIP into your Odoo custom addons folder on the server (or upload via Apps > Install from file on Odoo.sh / runbot).
Activate Developer Mode, open Apps, click Update Apps List, search for Bank Statement Import (MT940/CSV/OFX), and press Install.
Open the new menu, paste your ECOSIRE license key, connect any external credentials (Shopify, Amazon, Stripe, etc.), and save.
Run the built-in connection test, sync your first 10 records, and schedule the recurring cron. Contact support if anything fails.
| Criterion | ECOSIRE | Custom Build | Competitor | Odoo Native |
|---|---|---|---|---|
| MT940 / CAMT.053 format support | Built-in parsers for MT940 and CAMT.053 plus OFX/QIF/CSV, tested on your real files | Only if the DIY build implements each parser correctly — SWIFT/ISO 20022 edge cases are easy to miss | Varies by add-on; many cover CSV/OFX only and skip MT940 | |
| Per-bank saved column mapping | Saved mapping template per bank (columns, signs, separators, date format) — pick and upload | Possible but usually hard-coded per bank; brittle when layouts change | Some offer mapping UIs, quality and flexibility vary widely | |
| Duplicate-line detection | End-to-end reference match plus computed date+amount+reference hash; re-imports skip duplicates | Only if explicitly coded; commonly overlooked, leading to double-booking | Sometimes included, sometimes basic date-range only | |
| Automatic journal assignment | IBAN/BIC/account in the file header mapped to the correct Odoo bank journal | Must be built and maintained manually | Often requires selecting the journal manually each import | |
| Multi-currency handling | Statement currency preserved and converted at transaction-date rate against the journal currency | Depends entirely on the DIY implementation | Inconsistent; some ignore statement currency | |
| Fit to your Odoo edition & workflow | Built for Odoo 17/18/19, Community or Enterprise, wired to your journals, roles and multi-company setup | Fully custom but you carry all the build and maintenance risk | Off-the-shelf — you adapt to it, not the other way around | |
| Support, source ownership & upgrades | Delivered with docs, training, a support window and paid maintenance; you own the source and we port it across versions | You own it but also own every bug fix and version upgrade | Vendor-dependent; support quality and version updates vary |
This is a build-to-order module, not an instant download. Typical delivery is 2–4 weeks from the point we receive your sample statement files and confirm which banks, formats and Odoo edition you're on. A single bank in one format lands toward the 2-week end; several banks with mixed MT940/CAMT/CSV layouts and multi-currency handling sit toward 4 weeks. We share a scoped timeline before we start and install it on your server or Odoo.sh when it's tested.
Every build includes a defined post-delivery support window to fix any bugs in the delivered scope at no extra cost. Beyond that, we offer a paid maintenance option that covers adding new banks or file formats, adapting when a bank changes its export layout, and porting the module forward when you upgrade Odoo (e.g. 17 to 18 to 19). You own the source code, so you're never locked in.
Yes — that's exactly the case this module is built for. We create a saved mapping template per bank that records which column is the transaction date, which is the value date, whether the amount is one signed column or split debit/credit, the sign convention, the date format, and the decimal and thousand separators. Once built, your team just selects the bank and uploads the file; no re-mapping each time.
No. Duplicate-line detection compares each incoming line against already-imported lines using the bank's unique end-to-end reference where available, and otherwise a computed hash of date, amount and reference (an Odoo compute field with @api.depends). Overlapping or accidentally re-uploaded files skip the lines already present and only import genuinely new ones — the import summary tells you exactly how many were skipped as duplicates.
Odoo core imports OFX, QIF, CAMT and generic CSV but has no MT940 parser and no per-bank saved column mapping, so real-world bank CSVs and German MT940 exports fail or need manual clean-up. A live bank feed (Enterprise) is great when your bank is supported — but many regional banks aren't, feeds cost per connection, and they don't cover historical back-loading. This module fills that gap: it imports whatever file your bank gives you, mapped to the right journal, deduplicated, in your Odoo edition.
Yes. Statements are parsed with their own currency preserved and converted at the transaction-date rate against the journal currency using Odoo's currency rates. For multi-company groups we add company_id record rules so each company only sees and imports against its own bank journals and templates, and access to the import wizard is governed through ir.model.access.csv tied to your existing accounting roles.
They can. On top of the manual upload wizard, we can wire an automated action and expose the importer over Odoo's XML-RPC / JSON-RPC API so an upstream system, script, or a scheduled pull from a bank SFTP drop can push files in automatically — with an email alert to finance if a file fails to parse. We scope this as an add-on since it depends on how your bank delivers files.
Import bank statements in MT940, CAMT.053, OFX, QIF or CSV and auto-map them to journals — built, installed & supported by ECOSIRE.