Connect your bank accounts to ERPNext via open-banking.io
No eIDAS certificates required. No Plaid contract. From €3/month.
Syncs your bank transactions directly into ERPNext's Bank Transaction doctype, where they appear in the Bank Reconciliation Tool — ready for matching against payment entries and invoices.
- ✅ No eIDAS/QWAC certificates — open-banking.io handles PSD2 compliance
- ✅ Zero-knowledge encryption — your data is encrypted client-side; the service can't read it
- ✅ ~€3/month per account — vs Plaid at $1,000–2,000/month
- ✅ Self-hosted friendly — works with Frappe Cloud or your own bench instance
- ✅ Automated sync — scheduler pulls new transactions every 6 hours
open-banking.io API ──→ encrypted response ──→ ERPNext decrypts locally
↓
Bank Transaction doctype
↓
Bank Reconciliation Tool
The integration uses server-to-server API with zero-knowledge encryption: the credentials bundle contains your private key, and all sensitive data (account numbers, balances, transaction details) is decrypted locally inside your ERPNext instance.
- ERPNext v15 (Frappe Framework v15) — tested; earlier versions are unsupported
- Python 3.10+ (Frappe v15 requirement)
- An open-banking.io account with exported credentials bundle
Install directly from the dedicated app repo (a root-level mirror of this
directory, so bench get-app works with a plain URL):
# From your bench directory:
bench get-app https://github.com/open-banking-io/erpnext --branch v0.1.0
bench --site <your-site> install-app erpnext_open_banking
bench --site <your-site> migrateSource of truth: development happens in the
erpnext/directory of the open-banking-io/clients monorepo (alongside the Python, Node, Rust, Go and other SDKs); eacherpnext/vX.Y.Zrelease subtree-splits it to the open-banking-io/erpnext mirror thatbenchinstalls from. To install from a local checkout instead,bench get-app /path/to/clients/erpnext.
Log in to open-banking.io, connect your banks, and
export the credentials bundle (credentials.json). It contains:
apiBaseUrl— the API endpointapiKey— your server-to-server API keyencryptionKey.privateKey— your PKCS#8 private key (stays on your server)
Go to Open Banking Settings → paste the credentials bundle JSON → select your default company → click Test Connection.
For each bank account you want to sync, create an Open Banking Connection:
- Select the OBI account ID
- Link it to the matching ERPNext Bank Account
- Set status to Active
Click Sync from Open Banking on any Bank Account, or let the scheduler run automatically every 6 hours.
This app lives in the open-banking-io/clients monorepo alongside the official SDKs (Node, Python, Rust, Go, Java, Ruby, PHP, .NET) and the n8n community node. The envelope decryption code is vendored directly into the app (no external runtime dependencies beyond what ERPNext already ships).
erpnext_open_banking/
├── hooks.py # Frappe hooks (scheduler, doctype JS)
├── erpnext_open_banking/
│ ├── doctype/
│ │ ├── open_banking_settings/ # Credentials bundle, company, sync config
│ │ ├── open_banking_connection/ # OBI account → ERPNext Bank Account mapping
│ │ └── open_banking_sync_log/ # Per-sync audit record
│ └── utils/
│ ├── envelope.py # Zero-knowledge decryption (vendored)
│ ├── client.py # OBI API client (vendored, uses requests)
│ ├── mapper.py # OBI Transaction → Bank Transaction field map
│ └── connector.py # Sync engine (fetch → map → dedup → insert)
└── public/js/bank_account.js # "Sync from Open Banking" button
Your private key never leaves your ERPNext server. The open-banking.io API returns only encrypted envelopes that only your key can decrypt. The decryption happens in-process using AES-256-GCM (ECDH P-256 + HKDF-SHA256).
MIT © open-banking.io