Where Money Docs

Using the app

Transactions

Every row in the file, newest first. This is where you go when you don't know where a transaction came from — "what was that 300 zł in March" has no import and no category to start from.

Changes here save immediately.

Searching#

The box reads every field a row carries: title, counterparty, counterparty IBAN, your note, date, currency, account name, category name, and the amount as printed. Typing 12,50 finds the row.

Several words must all match, each in any field, so biedronka 12,50 means both.

Note

Case matching is ASCII-only, so ZABKA finds Żabka only if the file spells it that way. Bank exports overwhelmingly strip diacritics, so this rarely bites.

Filters#

The search box holds one line to itself. Everything else lives behind Filters, which carries the number of them that are on.

Opening it drops a panel over the table rather than above it, so the rows do not move and the one you were reading is still there when you close it again. Inside are three things:

  • Account.
  • Category, with two extra entries above the real ones — Uncategorized, everything no rule reached, and Blocked by never-match, rows a never-match term deliberately stopped a rule from guessing at. Both are also one click as a chip under the select, next to the category you file most.
  • Date range, as a from – to pair with This month, Last 3 months, This year and All time underneath. A range writes the two dates it means, so you can then edit either one.

The panel's header says what the filters as they stand leave you with — 200 of 300 rows — before you commit to the next one. esc closes it, as does a click anywhere else.

Nothing becomes hidden state. Every filter the panel holds is written back onto the line outside it as a chip that drops it, so "why is this list short" never requires opening anything. Clear filters is always there too, disabled when there is nothing to clear, with a count of what is active — and it counts the search along with the three, which is why its number can be one higher than the one on Filters. The right of the line shows 120 of 3 481 rows and per-currency sums over all matches, not just the page.

Other screens hand slices here — the Categories tab sends a category, the dashboard sends a month and category. You land filtered, and the filters stay live.

The record#

Rows page 200 at a time. Click one and the dock underneath takes it. ▸ Record opens the whole thing over the table: every parsed field, the exchange rate and original amount for converted rows, the original CSV line cell by cell, which import it came from, and why it has its category — assigned by you, the rule and value that matched, or the term that blocked everything.

Assigning a category#

The dock here is the one from the import review screen, and it works the same way. Pick a scope — this row, every row a keyword matches, or the rows you have ticked — set the keyword, and one button reads the decision back before you press it: Assign 14 rows → 🛒 Groceries. Tick always match to keep the keyword as a standing rule, and the button counts the rows that rule will claim along with the ones in scope. You can also drag rows onto a category tile.

One thing reaches further here than on an import screen. An import screen counts a keyword against its own file. This screen counts it against the whole ledger, so matching «BIEDRONKA» covers rows outside the filters you have set and below the page you are on. The number on the button says how many; only the rows on screen can be highlighted, and the count speaks for the rest. That is the same reach the rule itself has once it runs, which is why the two agree.

Everything the dock writes leaves a receipt with undo — including a never-match term, which is the one action here that is hard to spot afterwards.

  • Never match this — for merchants where a rule would be confidently wrong.
  • Reset to auto — drop a manual assignment so rules apply again.
  • A note — free text. What a broad counterparty is for: check the order history once, record the answer here.
  • Delete a single transaction, for a junk row that slipped through.

Retry auto-categorization (N) re-runs the current rules over blocked and uncategorized rows. Assigned categories are never touched, so it cannot undo your work.

Reading rather than assigning#

Hide categorization, at the right of the dock's top bar, folds the dock down to a single line and gives the table the height back — roughly twenty rows instead of ten. This screen is read at least as often as it is answered, and "what was that 300 zł in March" needs rows, not tiles.

Nothing you have assigned is touched, and the folded line keeps the one thing nothing else on the screen reports: how many rows you have ticked. Show categorization brings it back, and so does dragging a row or pressing ⌥N — both are asking for a category, so the dock returns rather than the gesture ending nowhere.

While it is folded the keys that assign are inert: 1–9, ⏎ and x do nothing rather than writing against a keyword you cannot see. ↑ ↓, space and / keep working.

The two import screens do not offer this. A file has an end, and a dock you can hide there is a file you can leave half-answered without noticing.

Keys#

↑ ↓ move · 1–9 pick a category · ⏎ commit · ⇧⏎ commit without the rule · ⌥N new category · space select a row · x never-match the keyword · / search.

The full table, and why picking and committing are two keys, is in Keyboard.

Where Money is independent software, not connected to any bank, and its figures are not a substitute for your bank's own statements. Privacy, disclaimer & terms.