Banker Brings Open Banking Data to a Local SQLite Database
A new Rust command-line tool called Banker lets users pull account balances, transactions, and metadata from their banks into a local SQLite database. Built on the Enable Banking API, the tool targets developers and finance-oriented users who want to query their financial data offline rather than relying on bank portals.
How It Works
Banker connects to banks through Enable Banking, a standardized interface that provides uniform access to multiple financial institutions. After authorizing through Enable Banking, the tool syncs account details, balances, and transaction history to a local SQLite database. The default storage location is the operating system's per-user local data directory under a banker folder, though users can override it.
Authorization sessions are stored separately at ~/.config/banker/session.json on Linux, written with owner-only permissions. The private key used to authenticate API requests stays at the configured path and is never bundled with the project.
What You Can Do With It
Once synced, users can browse accounts, check current balances, and list transactions from the local database without hitting the network. The tool supports three output modes: formatted tables, line-delimited JSON via the --jsonl flag, and pipe-friendly text via --lines. JSONL records include IDs, timestamps, and bank data under a content field. Balance and transaction records additionally carry an account_id.
Each account, balance, and transaction record supports metadata through set, get, delete, and schema subcommands. Users can attach validated JSON metadata, such as a category tag. For example:
banker transaction metadata set '{"category":"groceries"}'
banker transaction metadata get
Metadata is validated against an active JSON Schema when one is configured.
Syncing Options
The sync command accepts several time-frame options. Running banker sync --last 7d retrieves the past week's data. A bounded range uses --from and --to with YYYY-MM-DD dates or RFC 3339 timestamps, though only the UTC calendar date is sent to Enable Banking, so time-of-day precision is not preserved. For durations, --last 30d or --last 1month work. Omitting a time-frame flag requests the longest available history, while --all requests the complete record.
If any selected session or account fails during a sync, the command exits with a nonzero status even when other accounts were stored successfully.
Built for Automation
Banker can run as a systemd user timer for periodic synchronization, making it suitable for automated bookkeeping workflows. The tool also supports piping its output into other programs, which makes it viable as a data source for scripts, dashboards, or custom analysis tools.
The author notes that the local data layer also enables AI agents to analyze transactions and suggest or apply categories using large language models. This is a practical use case: a local database with structured transaction data is far more useful to an AI system than screen-scraped text from a bank portal.
Installing and Configuring
Installation runs through Cargo:
cargo install banker
Prebuilt Linux and Windows binaries are also available from the latest GitHub Release. Users need an Enable Banking application ID, its matching private key, and a bank supported by Enable Banking in their region. The configuration file lives at ~/.config/banker/config.toml.
On Linux, the setup commands are straightforward:
mkdir -p ~/.config/banker
chmod 700 ~/.config/banker
chmod 600 ~/.config/banker/config.toml
The private key must match the Enable Banking application. The author explicitly warns never to commit or share it and to keep configuration and backups protected with filesystem permissions and disk encryption.
Early-Stage and Open Source
Banker is an early-stage personal project. The CLI and configuration format may change. Enable Banking and provider banks do not officially support the tool, and users are directed to the project's issue tracker rather than contacting banks directly.
The project includes an AI disclosure noting that AI tools assisted with code and documentation, with the maintainer reviewing all changes and taking responsibility for the project. The Enable Banking client is generated at build time from enablebanking-api.yaml. Banker is licensed under the GNU Affero General Public License, version 3 or later.
For anyone who has ever wanted to run their own transaction analysis on real financial data, Banker offers a functional starting point with the privacy benefit of keeping everything local.