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.

Import statement

Import Xero expense claims (PDF)

A print-to-PDF of Xero's "Your own" expenses list — merchant, purpose, date, status, and amount for each claim. Xero's report is sometimes GBP, sometimes USD, but always one currency for the whole file — choose which below. Importing the same file again just refreshes anything that's changed (e.g. a Draft that's since been Submitted) rather than duplicating it. Head to the Work Expenses tab afterward to match these against your transactions.

$0.00
Money Available to Budget
Income available (last month): Carried over: Total available to budget: Budgeted this month:

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
$0.00
Net Worth
This period: Previous period:

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.

$0.00
Spending in period
Previous period:

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.

$0.00
Income in period
$0.00
Expense in period
$0.00
Net (savings)
Savings rate:

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)

MasterAmount% of total

Expense by category (this period)

MasterAmount% 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.

$0.00
Awaiting confirmation
Transactions:
Date Description Memo Account Category Currency Amount Recurring

Uncategorized merchants

$0.00
Uncategorized
Transactions: Merchant groups:

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.

Add bank account

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.

Add master

MasterInclude in budget

Add category

CategoryMasterInclude in budget

Add subcategory

SubcategoryCategoryMasterInclude 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.

Add rule

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.

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.

Add frequency

NameTypical 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.

Add bucket

NameBalance

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.

BackupTakenSize

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.

Log out