Skip to content

develff/txporter

Repository files navigation

txporter

Quality Gate Status

A Dockerized REST service that fetches transactions from financial accounts and forwards them to Firefly III or CSV files.

Security notice: txporter has no built-in authentication. It is designed exclusively for use on a trusted local network or private Docker network. Never expose port 8090 to the internet. Restrict access via firewall, reverse proxy with authentication, or VPN.

Motivation

txporter was created because I wanted a single tool to sync all my financial accounts to Firefly III — German banks via FinTS/HBCI and CSV-based sources (e.g. Crypto.com) alike. Existing tools either didn't support FinTS/HBCI reliably (at least in my case), or covered only one source type and required juggling multiple importers. The goal was one self-hosted, Docker-based solution that handles everything.

Features

  • Fetch transactions from German banks via FinTS/HBCI (using AqBanking)
  • Import transactions from CSV exports (e.g. Crypto.com)
  • Forward transactions to Firefly III via REST API
  • Export transactions as CSV
  • On-demand sync via REST API or Web UI
  • Scheduled automatic sync
  • Multi-account support
  • Bank account setup via REST API (no shell access needed)

Supported Sources

Source Protocol Status
DKB FinTS/HBCI ✅ working
1822direkt FinTS/HBCI ✅ working
Consorsbank FinTS/HBCI ✅ working
Other German banks FinTS/HBCI should work (untested)
CSV file import ✅ working

Supported Targets

Target Status
Firefly III (REST API) ✅ working
CSV file ✅ working

Screenshots

Account overview

Account overview
Add account wizard

Add account wizard
CSV import — mapping profiles

CSV import overview
CSV import — field mapping wizard

CSV field mapping

Known Issues

  • 1822direkt — manual date range: Fetching transactions with a custom date range triggers a different TAN flow at 1822direkt that is not compatible with txporter. Use the default sync window instead.
  • CSV import — split fields: If a CSV export spreads a value across multiple columns (e.g. a payment purpose split into Vwz.0Vwz.17), txporter can only map one column per field. Manual pre-processing of the CSV is required in that case.

Security

txporter has no built-in authentication or authorization. Every request to port 8090 is trusted unconditionally — anyone who can reach it can read your bank account data, trigger syncs, and modify configuration.

Only run txporter on a trusted local network or private Docker network. Recommended mitigations:

  • Bind the port to 127.0.0.1 only (default) and access via SSH tunnel
  • Place behind a reverse proxy (Nginx, Caddy) with HTTP Basic Auth or SSO
  • Restrict access at the firewall / Docker network level

Requirements

  • Docker
  • Docker Compose

Quick Start

# Clone the repository
git clone https://github.com/develff/txporter.git
cd txporter

# Copy and edit config
cp config/banks.example.json config/banks.json
# Add your Firefly III URL and token to config/banks.json

# Start the service
docker compose up -d

# Open the Web UI
open http://localhost:8090

The Web UI guides you through bank account setup and lets you trigger syncs manually.

Bank account setup (REST API)

Bank registration is done via the REST API — no shell access or manual file editing required.

# Register a bank account (profile-based)
curl -X POST http://localhost:8090/setup \
  -H "Content-Type: application/json" \
  -d '{"bank": "dkb", "login": "YOUR_LOGIN", "pin": "YOUR_PIN"}'

# Confirm the TAN in your banking app, then:
curl -X POST http://localhost:8090/setup/{setup_id}/confirm

See docs/setup.md for the full setup flow including photoTAN/chipTAN banks.

Sync

# Sync a single account
curl -X POST http://localhost:8090/sync/dkb

# For FinTS accounts: confirm TAN in banking app, then:
curl -X POST http://localhost:8090/sync/dkb/confirm

# Sync all accounts
curl -X POST http://localhost:8090/sync

CSV Import

Upload any CSV export (e.g. Crypto.com, N26 export) via the Web UI. A 3-step wizard lets you map CSV columns to Firefly III fields and save reusable profiles.

Architecture

flowchart LR
    subgraph Sources
        B[Bank\nFinTS/HBCI]
        C[CSV file]
    end

    subgraph txporter
        AQ[AqBanking CLI]
        WIZ[CSV Import Wizard]
        API[REST API / Web UI]
    end

    subgraph Targets
        FF[Firefly III]
        CSV2[CSV file]
    end

    B --> AQ
    C --> WIZ
    AQ --> API
    WIZ --> API
    API --> FF
    API --> CSV2
Loading

Configuration

See docs/configuration.md for details on banks.json, environment variables, and the full REST API reference.

Built with

  • AqBanking — FinTS/HBCI banking library (LGPL-2.1)
  • Flask — web framework (BSD)
  • requests — HTTP client (Apache-2.0)

License

txporter is available under a dual license:

  • Open source use: GNU Affero General Public License v3.0 Free for personal and open source projects. Any modifications or hosted versions must be released under the same license.

  • Commercial use: A separate commercial license is required. See LICENSE.commercial or contact the author.

Copyright (C) 2026 develff

About

One tool to sync all your financial accounts to Firefly III — FinTS/HBCI banks + CSV imports

Topics

Resources

License

Unknown, Unknown licenses found

Licenses found

Unknown
LICENSE
Unknown
LICENSE.commercial

Stars

Watchers

Forks

Packages

 
 
 

Contributors