Import any statement
ISO 20022 camt.053 out of the box, plus any CSV or Excel export through a column mapping you set up once, with a live preview. Overlapping files never create duplicates, and every import can be undone.
Import bank statements, match bills to payments, reconcile what the tax office counted and watch your net worth grow — without handing your finances to anyone.
Kept turns the files you can already download into a ledger that knows which bills are paid, where the money went and what you owe the tax office.
ISO 20022 camt.053 out of the box, plus any CSV or Excel export through a column mapping you set up once, with a live preview. Overlapping files never create duplicates, and every import can be undone.
Upload a PDF and Kept reads the Swiss QR-bill. Payments are matched by structured reference automatically, suggested by IBAN and amount, or linked by hand — partial payments and credit notes included.
Your own categories and rules that sort transactions on import. A category you set by hand always wins.
Tag payments with a tax year, enter the lines from the tax office's statement, and see what you paid against what they counted — missing lines, differences and the remaining balance.
| Tax year 2025 | You paid | They counted | Δ |
|---|---|---|---|
| Instalment 1 | 2,400.00 | 2,400.00 | ✓ |
| Instalment 2 | 2,400.00 | 2,400.00 | ✓ |
| Instalment 3 | 2,400.00 | — | missing |
| Assessed 7,017.60 | 7,200.00 | 4,800.00 | refund 182.40 |
Net worth over time per currency — never silently converted. This month's income and expenses, bills due, and accounts whose last import is getting old.
Account statements, open bills, net worth and tax reconciliation, ready to print or file.
Pull bills from a tag or saved view and write amount, due date and status back. Entirely optional.
No bank credentials, no screen scraping, no aggregator in the middle. Just the files your e-banking already gives you.
Download a camt.053 statement or a CSV/Excel export from your e-banking. eBill invoices? Save the PDF.
Preview every row before it lands. Kept warns when a file's opening balance doesn't continue your history.
Rules categorize, bills match to payments, budgets fill up, and the dashboard shows where you stand.
/setup right away
— the first user becomes the administrator.
$ docker run -d --name kept -p 3000:3000 \
-v kept-data:/data \
-e KEPT_SECRET_KEY="$(openssl rand -base64 32)" \
-e ORIGIN=https://kept.example.org \
ghcr.io/orellbuehler/kept:latest
KEPT_SECRET_KEYEncrypts stored integration tokens. Keep it with your
backups.
ORIGINYour public URL, needed behind a reverse proxy.
KEPT_BACKUP_DIROptional. Writes a daily database backup here.
No, on purpose. Kept never asks for your e-banking credentials. You download statements yourself and import them — camt.053, CSV or Excel. Re-importing overlapping files is safe.
A self-hosted app can't receive eBill directly. Download the invoice PDF in your e-banking and upload it as a bill — Kept reads the QR data from it.
Yes. Every amount keeps its currency, stored as exact integer minor units. Totals and net worth are shown per currency; Kept never converts them with a made-up exchange rate.
No. Kept stores bill PDFs itself. If you already run Paperless-ngx (2.16+), the optional integration pulls bills from it and writes their status back.
The administrator creates further local users. Each user has their own accounts, bills and budgets and only sees their own data.
Nothing. Kept is licensed under PolyForm Noncommercial 1.0.0 — free for personal and other noncommercial use.
One container. One file. Every franc accounted for.