A full-featured personal finance manager, built as a Nextcloud app.
Track accounts, income and expenses, transfers, budgets, and recurring transactions — with full multi-currency support — all stored in your own Nextcloud database. No third-party servers, no subscriptions, no ads.
apps/ directory as apps/fintrack, then enable it under Settings → Apps.Four account types, each serving a different purpose:
| Type | Use for |
|---|---|
| Asset | Bank accounts, cash, savings, investments — anything you own |
| Liability | Credit cards, loans — anything you owe |
| Revenue | Income-source buckets (e.g. “Salary”, “Freelance”) for income-tracking without a real linked account |
| Expense | Spending-category buckets (e.g. “Groceries”, “Rent”) for expense-tracking without a real linked account |
Each account has its own currency, icon, and color, and can be archived (marked inactive) without deleting its transaction history.
Income or expense entries against an account: amount, description, category, tags (free-text, autosuggested from previously used tags), notes, and date. Foreign-currency accounts can carry a per-transaction conversion rate, frozen at entry time, so editing your currency table later never silently re-prices historical transactions.
Move money between two accounts in one step. If the accounts use different currencies, FinTrack converts the amount automatically (with an editable rate) and records both legs. Account pickers support fuzzy search for people with many accounts.
Set up a transaction template with a frequency (daily / weekly / monthly / yearly) and FinTrack posts it automatically on schedule in the background — no need to open the app on the due date. The Dashboard surfaces everything due in the next 5 days so nothing is a surprise, and you can post an occurrence manually early if needed.
Set a spending limit per category (or overall) for a monthly or custom period, in any currency, and track progress with a live progress bar as transactions come in.
Categories are typed (income / expense / transfer) and carry an icon and color. Tags are free-text and shared across all your transactions with autosuggest. Categories can be exported/imported as a set, or generated from a sensible built-in default list (Groceries, Rent/Mortgage, Entertainment, etc.) with one click.
Add any number of currencies with a code, symbol, and exchange rate relative to your base currency. Rates can be entered manually or fetched online — FinTrack tries Frankfurter first (free, no API key needed), then falls back to exchangerate.host (requires a free API key, set in Settings → Currency Rate API Key) for currency pairs Frankfurter doesn’t cover, such as SAR or AED. Every transaction, transfer, and total correctly distinguishes between “priced in this account’s currency” and “converted to your base currency for reporting” — and conversions always prefer a transaction’s own frozen rate over today’s live rate, so past totals stay stable.
Export all transactions to CSV or a full JSON backup. Import a CSV with a downloadable template as a starting point; FinTrack shows a column mapping summary (which file header matched which field) and a preview table before anything is committed, with duplicate, update, and invalid rows clearly flagged. Optional rule-based auto-categorization fills in a category from the description when the file doesn’t specify one. Every row that fails validation is reported individually — row number, the column that failed, and why — in an Import Results dialog after the import runs, instead of just a pass/fail count.
Re-importing a file you’ve exported updates matching transactions
instead of duplicating them: each transaction carries a permanent
unique-key(for-updating) — simply its own row id — included
automatically in every export. Leave that column blank on a row to create
a new transaction instead.
Settings → External Access gives you a token and a shareable link that
lets you (or an automation) add transactions without logging into
Nextcloud — handy for a phone home-screen shortcut, a browser
bookmarklet, or a script. Authenticated by a single API token rather than
a Nextcloud session. See REST API below for the full
request/response format. Both the token and the form link are masked in
Settings and require your Pin Lock PIN to reveal or copy, if one is set.
Opening the link offers to install itself as an app — titled
“FinTrack - <your-domain>” with the same icon as the main app, so
multiple instances stay distinguishable on your home screen — with an
explicit Yes / Maybe Later / Cancel choice remembered locally in your
browser.
An optional PIN layered on top of your normal Nextcloud login — useful on a shared device or if your Nextcloud session stays logged in. Includes an auto-lock timeout after inactivity, lockout after repeated failed attempts, a self-service security-question reset, and an admin-approval reset flow for when both the PIN and the security answer are forgotten.
Once a PIN is set, choose exactly which actions require it under Protected Actions: exporting transactions to CSV, importing transactions from CSV, viewing Recently Deleted, and/or the External Entry Form — each is its own checkbox, on by default except the External Entry Form (opt-in, since it affects anyone with the form link, not just you).
Configure base currency, tags, category rules, the external API token, and Pin Lock from one Settings screen. Deleting an account or transaction always asks for confirmation first — account deletion adds a 3-second cancellable countdown on top, since it can’t be undone. Deleted transactions aren’t gone immediately either: the last 100 land in Recently Deleted (a recycle bin) and can be restored any time, or purged for good. A full backup is written to Nextcloud Files automatically before any full data reset, and settings can be restored from a previous backup.
FinTrack exposes two API surfaces:
/api/* — the full internal API (accounts, transactions, transfers,
budgets, categories, currencies, recurring rules, settings, summary).
Authenticated by your live Nextcloud session; this is what the web UI
itself uses./external/* — a smaller, public, token-authenticated API
(X-FinTrack-Token header) for quick transaction entry from outside
Nextcloud — no session or cookies required. Get your token from
Settings → External Access.Full endpoint list, request/response shapes, and integration examples (including a ready-to-use spec for building your own client) are in the admin manual.
A Beta version Android client for FinTrack, built on top of the External entry form & API.
📦 APK (debug build): FinTrack.v1.1.7.apk
📱 Project / source: github.com/cloudsliberty/fintrack-android
Install FinTrack on your desktop or mobile device for quick access and an app-like experience.
📦 PWA page - https://cloudsliberty.github.io/fintrack-PWA/
📱 Project / source: https://github.com/cloudsliberty/fintrack-PWA
All data lives in your own Nextcloud database — accounts, transactions, budgets, and settings never leave your server. The only optional external calls FinTrack makes are to Frankfurter and/or exchangerate.host for live exchange rates, and only if you enable online rate lookups; everything else works fully offline within your Nextcloud instance.
Issues and pull requests are welcome at github.com/cloudsliberty/fintrack.
AGPL-3.0 — © Abdul Jaleel Adenpulan