ofxstatement plugin for the Hungarian bank OTP
Project description
Plugins to read statements provided by OTP (https://www.otpbank.hu).
Current plugin
It’s a fork and adaptation of https://github.com/Jacotsu/ofxstatement-intesasp
The otp plugin reads the post-2026-June netbank XLSX export:
ofxstatement convert -t otp statement.xlsx out.ofx
Selecting a single account
A single OTP export bundles every account into one file (identified only by account number). Without further configuration the plugin emits one statement containing all of them. To get a clean per-account OFX, set the account option to the account number (a case-insensitive substring is enough); rows for other accounts are skipped.
Define named plugin types in your ofxstatement config (ofxstatement edit-config):
[otp:checking] plugin = otp account = 11773535 [otp:credit] plugin = otp account = 11773016
then convert each account from the same export:
ofxstatement convert -t otp:checking statement.xlsx checking.ofx ofxstatement convert -t otp:credit statement.xlsx credit.ofx
Legacy plugins
The otp_legacy plugin parses the pre-2026-June OTP netbank XLSX export – the format the otp plugin itself used to read before OTP changed the export in June 2026:
ofxstatement convert -t otp_legacy old-statement.xlsx out.ofx
In that older format the transaction table started on row 2 (columns A-L), the account id was taken from cell D8 and the statement start date from cell B2. New exports look different (a metadata preamble, a relocated header and a new column order), so use the otp plugin for anything exported from June 2026 onwards.
(Even older XML/CSV exports from the netbank version retired in September 2021 are no longer supported.)
Editing the plugin
You can follow the instructions at https://github.com/kedder/ofxstatement-sample if you want to make changes to this plugin. Pull requests are welcome!
The plugin code lives in its own top-level package, ofxstatement_otp, and is wired into ofxstatement purely through the entry points declared in setup.py (this matches the layout of the upstream sample). The plugin names used on the command line are otp (current export) and otp_legacy (pre-2026-June export).
Development setup
Create a virtualenv and install the plugin in editable mode (this pulls in ofxstatement and openpyxl and registers the entry points):
python3 -m venv .venv .venv/bin/pip install -e .
Because the install is editable, edits to src/ofxstatement_otp/ take effect immediately – no reinstall needed. Confirm the plugins are registered with:
.venv/bin/ofxstatement list-plugins
Manual testing
The automated test suite runs with make test (pytest). For exercising the otp plugin against a realistic file without a real bank export, the manual_test/ directory contains a small helper.
Generate a synthetic OTP-format XLSX (fake data, correct structure):
.venv/bin/python manual_test/generate_sample.py
This writes manual_test/sample.xlsx.
Convert it with the normal CLI and inspect the OFX:
.venv/bin/ofxstatement convert -t otp manual_test/sample.xlsx out.ofx
To convert a real export, point the command at it instead of the sample.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ofxstatement_otp-0.2.0.tar.gz.
File metadata
- Download URL: ofxstatement_otp-0.2.0.tar.gz
- Upload date:
- Size: 10.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d85dff13197958e1d84d8940b3179985163e5541c810e7edafb0ae2ca79e6e32
|
|
| MD5 |
f355c0cc6a7a543b5f349b9e37c82205
|
|
| BLAKE2b-256 |
97df7a239e575ab9b70fb42d58ceccc423ddec86d0d96e2b0b7c93d22d769d08
|
Provenance
The following attestation bundles were made for ofxstatement_otp-0.2.0.tar.gz:
Publisher:
release.yml on gyp/ofxstatement-otp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ofxstatement_otp-0.2.0.tar.gz -
Subject digest:
d85dff13197958e1d84d8940b3179985163e5541c810e7edafb0ae2ca79e6e32 - Sigstore transparency entry: 1819671538
- Sigstore integration time:
-
Permalink:
gyp/ofxstatement-otp@62f1bdabae413e3184411fcb9dfa8a90600a179d -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/gyp
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@62f1bdabae413e3184411fcb9dfa8a90600a179d -
Trigger Event:
push
-
Statement type:
File details
Details for the file ofxstatement_otp-0.2.0-py3-none-any.whl.
File metadata
- Download URL: ofxstatement_otp-0.2.0-py3-none-any.whl
- Upload date:
- Size: 8.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
967af38f57245fed761c123311336e1883385278f9701add88fef75e80f25320
|
|
| MD5 |
b54ff46cc9092863a1a1253368e474d9
|
|
| BLAKE2b-256 |
28cc59f62bcc1068a215740352d730f9e5f14289b67ae21599536f6ced139c81
|
Provenance
The following attestation bundles were made for ofxstatement_otp-0.2.0-py3-none-any.whl:
Publisher:
release.yml on gyp/ofxstatement-otp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ofxstatement_otp-0.2.0-py3-none-any.whl -
Subject digest:
967af38f57245fed761c123311336e1883385278f9701add88fef75e80f25320 - Sigstore transparency entry: 1819671568
- Sigstore integration time:
-
Permalink:
gyp/ofxstatement-otp@62f1bdabae413e3184411fcb9dfa8a90600a179d -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/gyp
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@62f1bdabae413e3184411fcb9dfa8a90600a179d -
Trigger Event:
push
-
Statement type: