Skip to Content
Odoo Menu
  • Sign in
  • Try it free
  • Apps
    Finance
    • Accounting
    • Invoicing
    • Expenses
    • Spreadsheet (BI)
    • Documents
    • Sign
    Sales
    • CRM
    • Sales
    • POS Shop
    • POS Restaurant
    • Subscriptions
    • Rental
    Websites
    • Website Builder
    • eCommerce
    • Blog
    • Forum
    • Live Chat
    • eLearning
    Supply Chain
    • Inventory
    • Manufacturing
    • PLM
    • Purchase
    • Maintenance
    • Quality
    Human Resources
    • Employees
    • Recruitment
    • Time Off
    • Appraisals
    • Referrals
    • Fleet
    Marketing
    • Social Marketing
    • Email Marketing
    • SMS Marketing
    • Events
    • Marketing Automation
    • Surveys
    Services
    • Project
    • Timesheets
    • Field Service
    • Helpdesk
    • Planning
    • Appointments
    Productivity
    • Discuss
    • Approvals
    • IoT
    • VoIP
    • Knowledge
    • WhatsApp
    Third party apps Odoo Studio Odoo Cloud Platform
  • Industries
    Retail
    • Book Store
    • Clothing Store
    • Furniture Store
    • Grocery Store
    • Hardware Store
    • Toy Store
    Food & Hospitality
    • Bar and Pub
    • Restaurant
    • Fast Food
    • Guest House
    • Beverage Distributor
    • Hotel
    Real Estate
    • Real Estate Agency
    • Architecture Firm
    • Construction
    • Property Management
    • Gardening
    • Property Owner Association
    Consulting
    • Accounting Firm
    • Odoo Partner
    • Marketing Agency
    • Law firm
    • Talent Acquisition
    • Audit & Certification
    Manufacturing
    • Textile
    • Metal
    • Furnitures
    • Food
    • Brewery
    • Corporate Gifts
    Health & Fitness
    • Sports Club
    • Eyewear Store
    • Fitness Center
    • Wellness Practitioners
    • Pharmacy
    • Hair Salon
    Trades
    • Handyman
    • IT Hardware & Support
    • Solar Energy Systems
    • Shoe Maker
    • Cleaning Services
    • HVAC Services
    Others
    • Nonprofit Organization
    • Environmental Agency
    • Billboard Rental
    • Photography
    • Bike Leasing
    • Software Reseller
    Browse all Industries
  • Community
    Learn
    • Tutorials
    • Documentation
    • Certifications
    • Training
    • Blog
    • Podcast
    Empower Education
    • Education Program
    • Scale Up! Business Game
    • Visit Odoo
    Get the Software
    • Download
    • Compare Editions
    • Releases
    Collaborate
    • Github
    • Forum
    • Events
    • Translations
    • Become a Partner
    • Services for Partners
    • Register your Accounting Firm
    Get Services
    • Find a Partner
    • Find an Accountant
      • Get a Tailored Demo
    • Implementation Services
    • Customer References
    • Support
    • Upgrades
    Github Youtube Twitter Linkedin Instagram Facebook Spotify
    +32 2 290 34 90
    • Get a Tailored Demo
  • Pricing
  • Help
  1. APPS
  2. Accounting
  3. Bank Statement Import v 19.0
  4. Sales Conditions FAQ

Bank Statement Import

by ERP Heritage https://www.erpheritage.com.au/
Odoo
v 19.0 Third Party 101
Download for v 19.0 Deploy on Odoo.sh
Apps purchases are linked to your Odoo account, please sign in or sign up first.
Versions 16.0 17.0 18.0 19.0
You bought this module and need support? Click here!
Availability
Odoo Online
Odoo.sh
On Premise
Odoo Apps Dependencies • Invoicing (account)
• Discuss (mail)
Community Apps Dependencies Show
Accounting Suite Base
Lines of code 5960
Technical Name eh_account_bank_statement_import
LicenseLGPL-3
Websitehttps://www.erpheritage.com.au/
Versions 16.0 17.0 18.0 19.0
ERP Heritage · Accounting Suite
ODOO 19 . COMMUNITY EDITION

Bank Statement Import Pro

Four native statement parsers, two-layer duplicate defense, and a full per-file import history log, the piece Community accounting is missing.

Free · LGPL-3FREE . LGPL-3ODOO 19 . COMMUNITYv19.0.1.1.6
CSV
OFX
QIF
CAMT.053
MT940
Dedup

Why this module

Bank Statement Import Pro

01 / COVERAGE

Five formats, one registry

CSV with per-bank column profiles, OFX, QIF, CAMT.053 against the ISO 20022 element tree, and a full MT940 SWIFT parser with :86: subfield extraction, all behind a pluggable parser registry. A new format is a registered class, not a fork.

02 / DEDUP

Two-layer duplicate defense

An exact unique-reference constraint per journal makes re-import idempotent, and a separate fuzzy scan (amount to the cent, 3-day date window, reference and narration overlap) catches the same payment arriving through a second format with a different reference. It flags for review, it never deletes.

03 / AUDIT

Nothing dropped silently

Every file import writes a history row (file hash, user, line count, skipped count, outcome) on success, duplicate, or failure, with the exact exception captured on a failed run. Bad rows raise a precise error naming the offending field, never a silent drop.

Day in the life

Monday morning. Five banks, three currencies, 1,200 statement lines.

The OFX from the US bank, the CAMT.053 from the EU bank, the MT940 from the SWIFT bank, and the CSV from the AU bank arrive through separate routes, and the registry picks the right parser per file. A comma-decimal European CSV ('1.234,56') is normalised correctly from the bank profile, so no amount is silently corrupted. One bank's CSV had a row inserted since last week, but because the per-line key is content plus occurrence counter and never file position, the unchanged lines do not re-import. A wire that came through both the CSV and the OFX feed under two different references is flagged as a probable cross-source duplicate for the operator to confirm, not deleted. One file has a malformed row: it raises with the offending field named, the failure is written to the import history log with the exception text, and the other four files still post clean.

Edge cases

The cases most modules quietly ignore.

In the shipped code today, each one a place where a cheaper module silently does the wrong thing.

CSV . POSITION-FREE

Re-importing a statement that had a row added or removed elsewhere does not duplicate the unchanged lines, because each line's key is content plus an occurrence counter, never its position in the file. Two genuinely identical rows in one file are disambiguated only by order of appearance.

DEDUP . CROSS-SOURCE

The same payment imported once via CSV and again via OFX under different per-line references is caught even though the exact-reference guard cannot see it, using a plus or minus 3-day value-date window, amount to the cent, and reference or narration overlap. The line is flagged and a chatter note posted, never auto-deleted.

CSV . DECIMALS

Comma-decimal CSVs ('1.234,56') are normalised correctly per profile from a decimal-separator field on the bank profile, closing a common source of silent amount corruption between EU and US conventions.

MT940 . REVERSALS

RC and RD reversal marks flip the debit/credit sign an extra time, so a reversed credit becomes a debit to match bank accounting convention, and two-digit YYMMDD dates are century-pivoted at year 80.

LIVE . ISOLATION

On the live-feed cron, one connector that crashes rolls back only its own profile under a per-record savepoint and the run continues for the rest. The tested behaviour is that a single bad connector never freezes the others.

LIVE . WATERMARK

The since-date watermark auto-advances to the latest fetched posted date after each successful live run, so the next cron pass does not re-pull the same window.

PERF . PARTNERS

Partner resolution batches res.partner lookups by unique name, so a 5,000-line CSV does not fire 5,000 separate queries on import.

What is inside

Built to do the job, end to end.

  • Five native parsers, pluggable registry. CSV with per-bank profiles, OFX, QIF, CAMT.053 (ISO 20022), and MT940 (SWIFT, with :86: extension blocks). Format dispatch lives in a registry; partner packages add formats by registering a parser class.
  • Idempotent re-import per journal. A unique constraint on (journal, line import reference) means re-importing the same file skips the lines already seen on that journal instead of duplicating them.
  • Fuzzy cross-source duplicate flagging. A second scan keyed on journal, amount to the cent, a 3-day date window, and reference or narration overlap flags probable duplicates that the exact guard misses, recording the suspected original and posting a chatter note without deleting.
  • Audited import history log. Each file import writes a row with file hash, importing user, line count, skipped count, and outcome on every result (done, duplicate no-op, or failure), capturing the exception text when a run fails.
  • Precise bad-row errors. Parsers raise a specific error naming the offending row, tag, or field, and the wizard records it as an audited error rather than silently dropping the row.
  • Per-statement and per-line currency capture, with a journal guard. The currency code reported by the file (CSV profile, OFX, QIF, CAMT.053, MT940) is parsed onto the imported lines, and a file whose currency does not match the target journal is rejected with an audited error instead of booking at face value.
  • Pluggable live-connector framework. A connector profile model plus an abstract LiveBankConnector contract, a 2-hourly cron with per-profile savepoint isolation, an auto-advancing since-date watermark, and Plaid, Basiq, GoCardless, and manual adapters shipped as stubs for partner packages to extend.
  • Multi-company aware. Profiles and statements are scoped through the bank journal, which carries the company, so the importer respects company boundaries by construction.

Honest about the edges

What this does not do, so nothing surprises you.

  • OFX import runs on the third-party ofxparse Python package, which is not bundled. Install it once with pip install ofxparse, or let a repo-level requirements.txt install it for you (for example on Odoo.sh). CSV, QIF, CAMT.053, and MT940 need no extra packages.
  • The live-connector framework ships Plaid, Basiq, GoCardless, and manual adapters as stubs only. It defines the contract and the cron, but does not include production transport to any specific bank; partner packages or your own code supply the live connection.
  • The live-connector fetch path records its result on the connector profile and its chatter, but does not write a row to the file-import history log. The history log covers file imports.
  • The import history log is a plain audited record. It captures hash, user, counts, and outcome, but rows are not write-protected or delete-protected at the framework level.
  • PDF statement ingestion is on the roadmap and is not shipped. The five parsers are CSV, OFX, QIF, CAMT.053, and MT940.
  • MT940 is fully implemented and selectable, but does not yet have a dedicated automated test.
Search

odoo 19 bank statement import, odoo community bank statement import, import CAMT.053 odoo, import MT940 odoo, import OFX bank statement odoo, import QIF bank statement odoo, CSV bank statement import per-bank profile, odoo bank statement duplicate detection, idempotent bank statement re-import, ISO 20022 statement import odoo, bank feed connector framework odoo

Languages

Available in 19 languages

The interface ships translated out of the box. Switch language in Odoo and the fields, menus, and messages follow.

ArabicChinese (Simplified)Chinese (Traditional)DutchFrenchGermanHindiIndonesianItalianJapaneseKoreanPolishPortuguese (Brazil)RussianSpanishSwedishThaiTurkishVietnamese
ERP Heritage

Production-grade Odoo accounting, built to an engineering bar and documented honestly. Support: info@erpheritage.com.au
Developed by Odoo Consultant Melbourne • LinkedIn

v19.0.1.1.6 · LGPL-3 · Odoo 19 Community

Please log in to comment on this module

  • The author can leave a single reply to each comment.
  • This section is meant to ask simple questions or leave a rating. Every report of a problem experienced while using the module should be addressed to the author directly (refer to the following point).
  • If you want to start a discussion with the author, please use the developer contact information. They can usually be found in the description.
Community
  • Tutorials
  • Documentation
  • Forum
Open Source
  • Download
  • Github
  • Runbot
  • Translations
Services
  • Odoo.sh Hosting
  • Support
  • Upgrade
  • Custom Developments
  • Education
  • Find an Accountant
  • Find a Partner
  • Become a Partner
About us
  • Our company
  • Brand Assets
  • Contact us
  • Jobs
  • Events
  • Podcast
  • Blog
  • Customers
  • Legal • Privacy
  • Security

Odoo is a suite of open source business apps that cover all your company needs: CRM, eCommerce, accounting, inventory, point of sale, project management, etc.

Odoo's unique value proposition is to be at the same time very easy to use and fully integrated.

Website made with