Budget2

● {{ catList.length }} categories ● {{ master.length }} txns ● unsaved

Added {{ lastAdded }} transaction(s) to your ledger ({{ master.length }} total).

🏦

Import your bank transactions

Drop a bank CSV here, or use the button below. Any bank export works — nothing leaves your browser.

  1. Import a CSV → confirm the columns in the Map columns dialog.
  2. Categorise each row.
  3. Add to ledger — adds the rows and opens the Income Statement.
  4. ⤓ Export (top bar) whenever you want to save your budget file to disk.

{{ error }}

Budget2

A private, in-browser cashflow statement — nothing leaves your computer.

{{ error }}

💾
Saved to your computer. Your budget is a single file you control — easy to re-open next time, or hand to an AI later for deeper analysis.
AI-assisted categorising. Let Claude, ChatGPT or Grok take a first pass at your transactions, then adjust by hand as needed.
📊
A company-style income statement. Income − Expenses = Surplus, then investments and net cash — the same shape public companies report.
No transactions yet — import some on the tab.
Nothing to report yet — save some categorised transactions first.
How to use Budget2

The flow: load → import & categorise → add to ledger → export, with a Transactions tab to review/edit and an Income Statement. Nothing is auto-loaded and nothing is uploaded — everything stays in your browser.

1 · Load your budget file
  • On the opening screen, load your latest budget file (budget-….json) so new imports skip duplicates and auto-suggest categories from history. No prior budget? Click start fresh. Either one reveals the rest of the app.
  • Categories are built in — a sensible default list is ready to go, and it's bundled inside your budget file, so it travels with your data. Add more on the fly while categorising (below).
2 · Import & categorise
  • On the Import tab, click ⤓ Import bank CSV (or drag a file onto the box) — any bank export works.
  • In Map columns, tell the app which columns are the date, amount (or separate debit/credit), and description. It pre-guesses for you; check the live preview and hit Continue.
  • For each row, pick a category from the dropdown. Rows you've categorised before are suggested automatically.
  • Edit the amount inline to adjust a transaction's value — e.g. something you bought for someone and will be partly reimbursed. The bank's original amount is kept (shown as “was …”, with a revert link), and the statement uses your adjusted value.
  • ➕ Manual transaction adds a row that didn't come from the bank — e.g. KiwiSaver, which goes straight from pay/employer to the scheme and never hits your account. Set the date, description, amount and category. (To also gross-up income, add a second manual row to Income for the same amount; that keeps Net Cash unchanged.)
  • apply ×N next to a row copies that category to every row with the same description and amount.
  • ✨ Categorise with AI — copy the generated prompt into Claude, ChatGPT, or Grok, paste the JSON reply back, and it fills in the categories. AI-filled rows are tinted and tagged ✨ AI; rows you set or change by hand are tagged ✎ manual, so you can see at a glance what to double-check. No API key needed; your transaction descriptions & amounts are shared with whichever assistant you paste into.
  • Pick 🚫 Ignore for anything you don't want in the statement (it's still saved, so it won't keep re-appearing on future imports).
  • Rows already in your ledger are greyed out and skipped.
3 · Add to ledger, review, export
  • When every new row has a category, click ✓ Add … to ledger — it adds the rows and opens the Income Statement.
  • The Transactions tab lists every saved transaction; search, re-categorise, adjust amounts, or delete any row there.
  • ⤓ Export (top bar) downloads your budget file — a dated budget-2026-06-01.json bundling categories + transactions. It's always available; an unsaved marker and the Export button turn amber when you have changes to save. Keep the file as your new latest ledger and load it again next session.
  • The statement shows Income − Expenses = Surplus, with Investments and a Net Cash line below, and a column per month. Click any number to drill into the underlying transactions; toggle charts / transfers, or 🖨 Print.
Adding categories
  • Pick ➕ New category… from any category dropdown to add one on the spot (choose a Section, type a Group, and an optional Leaf). It's selected immediately and saved into your ledger when you Add & Save.
  • Categories travel inside your budget file, so once added they're saved with everything else.
Map columns
{{ mapping.name }} · {{ mapping.data.length }} rows · tell me which columns to use
Amount
Preview
DateDescriptionAmount
{{ p.date || 'unparsed' }} {{ p.desc }} {{ money(p.amount) }}
Add a category

Will add: {{ newCatPath || '—' }}

✨ Categorise with AI
{{ ai.batch.length }} uncategorised transaction(s) · works with Claude, ChatGPT, or Grok
Nothing to categorise — every imported row already has a category. 🎉
1 · Copy this prompt into Claude, ChatGPT, or Grok
Descriptions & amounts are shared with whichever assistant you paste into.
2 · Paste the JSON reply here

The reply comes back as a JSON block, so you can use the assistant's Copy button on it.

{{ ai.report.error }}

Applied ✨ {{ ai.report.applied }} categor{{ ai.report.applied===1?'y':'ies' }}.

{{ ai.report.missing }} row(s) had no answer — categorise those by hand.

Skipped {{ ai.report.unknown.length }} unrecognised categor{{ ai.report.unknown.length===1?'y':'ies' }}: {{ ai.report.unknown.join(', ') }}

{{ drill.title }}
{{ drill.monthLabel }} · {{ drill.items.length }} transactions · {{ money(drill.total) }} · reassign a category to recategorise
{{ t.date }} {{ t.description }}{{ t.account }} {{ money(t.amount) }}