Only showing this month by default, so the grid loads quickly — use "Show all time" if you need to search across every transaction ever imported. Amounts are shown converted to the currency above; nothing is changed in the database.
| Date | Description | Memo | Account | Category | Currency | Amount | Recurring |
|---|
Import a bank or account statement CSV in pretty much any shape - the app tries to automatically figure out which column is which (and any preamble some banks print above the real data), and only asks you to confirm anything it can't work out on its own. New transactions are matched against your category rules automatically; anything unrecognised is left as Uncategorized so you can review it on the Transactions tab. Every category you confirm there is remembered for next time.
Income posted to a flagged Income category becomes available to budget starting the following month. Anything you don't assign keeps carrying forward. Only categories flagged "include in budget" (Admin → Categories) show up below — manage that flag there. Click a category or master's ▾ to collapse it; click a subcategory's row count to see the actual transactions behind it. Your Savings buckets (Admin → Savings Buckets) show up as their own "Savings" section at the bottom — its Budgeted column is what you move into each bucket that month, and Remaining shows that bucket's running balance instead of a per-month figure.
| Category | Budgeted | Activity | Remaining | Last month | Progress |
|---|---|---|---|---|---|
| Total |
Transactions can be in USD, GBP, or ZAR, so this report totals everything converted to USD at each transaction's own date, rather than adding unlike currencies together.
| Category | Budget (USD) | Actual (USD) | Variance (USD) | # Txns |
|---|---|---|---|---|
| Total |
Net worth over time
| Account | Type | Currency | Balance | % of total |
|---|---|---|---|---|
| Total | 100% |
"Spending" here means actual outflow against Expense categories only — Income and Transfers are excluded, the same distinction the Budget tab and Monthly Summary already draw. A red change means you spent more than before; green means less.
Spending over time
Spending by category (this period)
Click a slice (or its legend row) to drill into subcategories; click a subcategory to see its transactions.
Income and Transfer-type categories are classified the same way everywhere else in this app (Budget pool, Monthly Summary) — Transfers count toward neither side here, since an internal transfer between your own accounts is neither real income nor real spending.
Previous period: net ( income, expense)
💰 Savings Buckets currently hold about of average monthly expenses for this period.
Income vs. expense over time
Income by category (this period)
| Master | Amount | % of total |
|---|
Expense by category (this period)
| Master | Amount | % of total |
|---|
Unconfirmed imports
Every transaction just imported sits here first — none of it counts anywhere else yet (Budget, Reports, Net Worth, Uncategorized, the Transactions grid itself) until you confirm it, so a bad auto-categorization can never slip into your numbers before you catch it. Fix anything wrong inline, then confirm — individually, or select several and confirm them at once.
| Date | Description | Memo | Account | Category | Currency | Amount | Recurring |
|---|
Uncategorized merchants
Grouped by merchant and sorted by dollar impact, biggest first, so you can clear the most value with the fewest clicks. Assigning a category applies it to every transaction in that group and remembers it as a rule, so future imports from the same merchant won't land here again. Only confirmed transactions show up here — an unconfirmed import still sitting Uncategorized shows in the grid above instead.
| Merchant | Memo | Account | Transactions | Total | Assign category |
|---|
Matches transactions categorized Work Transfer against claims imported from Xero (Import tab), by date (within a few days) and amount (converted to GBP, within the tolerance set in Admin → Other — Xero's own GBP conversion and this app's own historical exchange rate don't always land on exactly the same number).
Xero expense claims
Every claim imported from Xero this month (Import tab), and whichever transaction it resolved to, if any — a claim-centric view of the same matches the two grids below only show slices of (a claim's match might be a Work Transfer transaction, a potential miscategorization elsewhere, or no match at all).
| Spent on | Merchant | Purpose | Status | Amount | Matched transaction | ||
|---|---|---|---|---|---|---|---|
| Total (GBP) | |||||||
Work Transfer transactions
Every transaction currently categorized Work Transfer this month — matched ones show which Xero claim they're accounted for by; unmatched ones may be miscategorized, or the claim just hasn't been imported yet.
| Date | Description | Account | Amount | Matched | ||
|---|---|---|---|---|---|---|
| Total (GBP) | ||||||
Potential matches in other categories
Transactions categorized something other than Work Transfer that still match a Xero claim by date and amount — likely filed under the wrong category. "Mark as Work Transfer" recategorizes it in place; "Not a match" tells the matcher this pairing is a coincidence, not a real match, and it won't be suggested again.
| Date | Description | Account | Category | Amount | Matched claim | ||
|---|---|---|---|---|---|---|---|
| Total (GBP) | |||||||
Manage the bank accounts this app knows about. Once added, an account shows up in the Account dropdown when adding a transaction or importing a statement — you can only pick from accounts added here, not type an arbitrary name, so the same account is always spelled the same way everywhere.
| Name | Account number | Type | Currency | Opening balance | Opening date | Balance (calculated) |
|---|
Manage the Master → Category → Subcategory taxonomy used throughout the app. Each Master gets an automatically assigned color, and each Category gets a shade of its Master's color — subcategory pills on the grid use their Category's color, so related categories are easy to spot at a glance. Colors are assigned automatically; there's nothing to pick.
| Master | Include in budget |
|---|
| Category | Master | Include in budget |
|---|
| Subcategory | Category | Master | Include in budget |
|---|
A rule auto-assigns a category to any transaction whose description
contains the merchant text (case-insensitive). Example: merchant
netflix → category Entertainment. This list
starts pre-loaded from your historical spending and grows automatically
every time you confirm a category.
| Merchant text contains… | Assign category |
|---|
Rule health check
Rules fire in a fixed order (whichever a rule was added — not the alphabetical order shown above), first match wins. That means a rule can be silently shadowed by an earlier one that always matches the same transactions first, or simply unused (its merchant text never actually appears anywhere), with nothing in this list showing it. This runs every rule against every transaction to check — it takes a couple of seconds, which is why it's on demand rather than automatic.
| Merchant text | Category | Status | Would match | Actually wins | Last won | Shadowed by |
|---|
The list of options offered by the "How often?" dropdown on the transaction form. "Typical days" is how many days normally separate one occurrence from the next — the app uses it to guess which existing transactions are recurring on its own, by checking whether same-merchant transactions land roughly that many days apart.
| Name | Typical days |
|---|
Pattern lookback
How many of a merchant's most recent transactions detection looks at when deciding if it's still a consistent recurring pattern. A long-running merchant sometimes has an old, one-off gap somewhere in its history — a statement that was never imported, a subscription paused and resumed, a switched account. Without this, that single old gap can make detection judge the pattern "irregular" forever, even once it's been landing right on schedule for months — raise or lower this if a merchant you know is recurring keeps needing to be flagged by hand.
Scan for recurring patterns
Also runs automatically after every import — this is the same scan, available on demand in case a pattern's only become recognizable since the last one ran (e.g. after cleaning up descriptions) without a new transaction to trigger it. Also catches up any already-recognized pattern's newest transaction(s) that haven't been flagged yet (e.g. after changing "Most recent occurrences to consider" above), without needing review the way a brand new pattern does.
Named buckets for the Budget tab's Savings feature — e.g. "Emergency Fund", "House". Each has its own running balance, built up from whatever you move into (or out of) it each month on the Budget page.
| Name | Balance |
|---|
Backup database
Saves a copy of the entire database — every transaction,
account, category, budget, and savings bucket — as a single
file, exactly as it is right now, into a backups
folder next to the app's data on your Mac. Nothing here is
changed or deleted; this just makes a copy. A backup is also
taken automatically right before every import, in case
anything about the import needs undoing afterward.
Create blank database
Downloads a brand new database file, set up exactly like this app's own on a first-ever run — the full category list and category rules, but no transactions, accounts, budgets, or savings buckets. Doesn't touch your live data at all. Useful if your database ever gets corrupted and you need a clean file to restore into place before re-importing your statements, or if you want to hand this app to someone else so they can start with their own clean slate instead of yours.
Restore from backup
Replaces everything in the app right now with what's in a chosen backup — every transaction, account, category, budget, and savings bucket reverts to exactly how it was at that backup's moment. The current data is backed up automatically first, so restoring is itself always undoable. The app restarts right after, which takes a few seconds.
| Backup | Taken | Size |
|---|
Grid font size
Changes the text size used in every grid across the app (Transactions, Budget, Bank Accounts, Category Rules, Recurring, Savings Buckets, Net Worth, Uncategorized) — a matter of taste, not a per-grid setting.
Work expense match tolerance
How close a transaction's converted GBP amount needs to be to a Xero claim's amount to count as a match, on the Work Expenses tab. Xero's own currency conversion and this app's own historical exchange rate lookup don't always land on exactly the same number for the same day, so some tolerance is expected — raise it if genuine matches aren't showing up, lower it if it's suggesting matches that aren't real.
Change password
Auto-lock
Signs you out after this many minutes with no mouse/keyboard activity in the browser tab — a locked-out session is actually invalidated on the server, not just hidden behind a screen, so it can't be gotten around by simply reloading the page. Set to 0 to turn this off.
Recovery codes
One-time codes that let you back into this app if you ever forget your password — see Admin → Security's own setup for where these get shown. Regenerating replaces the whole batch; every code from the old batch stops working immediately.