fintl
Financial ETL CLI: parse, normalize, and explore your bank transaction data.
TL;DR
This tool helps you process, visualize and search your balance and transaction information that you have exported from your bank accounts.
Currently supports DKB, Postbank, GLS and Scalable Capital Broker.
Supported file formats: CSV, HTML, and PNG. PNG parsing uses a local ollama / llama-swap instance with a multimodal model — opt-in via fintl.toml (required only for Scalable broker PNG statements; gracefully skipped when not configured).
All your data stays on your machine. No need to trust another entity that is PSD2 certified.
How to install
As a cli tool
uv tool install fintl
As a dependency
From pypi
pip install fintl
or
uv add fintl
From a local repo
git clone https://github.com/eschmidt42/fintl.git
cd fintl
uv sync
uv tool install .
After installation, fintl should be available on your PATH:
which fintl
# e.g. /Users/YOURUSER/.local/bin/fintl
How to use
- Configure your
~/.config/petprojects/fintl.toml. For details see here. - Go to your bank account.
- Select your service, e.g. Giro.
- Export csv file or similar to
~/Downloads, or directly your source dir for your bank / service. - Optionally, if you've stored your file in
~/Downloads, runcd ~/Downloadsfollowed byfintl store(uses yourfintl.tomlfrom step 1). - Optionally, if you want to process PNG screenshots via Ollama, start Ollama.
- Run the etl via
fintl etl(also uses yourfintl.tomlfrom step 1). - Upon success visualize / search your data via
fintl plotorfintl search.
Please see here and below for more usage details.
Repo structure
src/fintl/accounts_etl/— core ETL logic: schemas, parsers, registry, runnersrc/fintl/cli/— CLI entry point and subcommands (etl,store,search,plot)tests/— tests for packages of this repo
Development
Run tests:
uv run pytest -n auto tests
Type check:
uv run ty check src
Lint, format, type check, test and all the other good stuff:
prek run --all-files
Running extraction integration tests
Tests that require a live llama-swap / ollama service are marked ollama / llama_swap and skipped by default. To run them, set FINTL_OLLAMA_MODEL to the name of a multimodal model you have pulled (e.g. qwen3.6:latest) and pass -m ollama or -m llama_swap:
FINTL_OLLAMA_MODEL=qwen3.6:latest uv run pytest -m ollama tests/
FINTL_LLAMA_SWAP_MODEL=qwen-3.6-27b uv run pytest -m llama_swap tests/
FINTL_OLLAMA_BASE_URL can optionally override the default http://localhost:11434.
FINTL_LLAMA_SWAP_BASE_URL can optionally override the default http://0.0.0.0:8080.
Simulating CLI usage without real financial data
Set the FINTL_CONFIG env var to point at any TOML file instead of ~/.config/petprojects/fintl.toml. A dev-config.toml is included at the repo root and wires all CLI commands to the fixture files under tests/.
To try the CLI commands, run:
mkdir /tmp/fintl-dev
Then you can run one of
rm -fr /tmp/fintl-dev/*
FINTL_CONFIG=dev-config.toml fintl etl
FINTL_CONFIG=dev-config.toml fintl plot
FINTL_CONFIG=dev-config.toml fintl store --from-dir <dir> --yes --copy
Output lands in /tmp/fintl-dev. Edit dev-config.toml locally to change providers, paths, or target directory.
Note: FINTL_CONFIG=dev-config.toml fintl etl is expected to produce one warning, failing to parse Screenshot 2026-03-09 at 14.30.54.png, because it in fact is an insufficient png file to parse the requested information from.
Release
For release steps see here.
Metadata
Release files for fintl 0.3.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| fintl-0.3.1.tar.gz | 59.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| fintl-0.3.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 167.8 kB
Release files / fintl-0.3.1.tar.gz
| Download URL | fintl-0.3.1.tar.gz |
|---|---|
| Size | 59.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
78d899dfac2b5e13e47ad66ffb6e99c7ca6bb694cd887e99a623c9a9cdc17d53
|
|
BLAKE2b-256 checksum How to use checksums |
dea242307d1be93d82ac11a95c695a842bfdff1caa9f47a15afff71a9bf28011
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 31, 2026.
Transparency logRelease files / fintl-0.3.1-py3-none-any.whl
| Download URL | fintl-0.3.1-py3-none-any.whl |
|---|---|
| Size | 108.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
4edc8f3168780f2a6420f58031e9de2fa9bb3b0cd99608e10fd4f554211a7a58
|
|
BLAKE2b-256 checksum How to use checksums |
acd7e0985900f8dbe07fc9816ab3307847e16b96e33813d9a35e8cf4efc50cfd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 31, 2026.
Transparency log