Gold and EUR/USD come from providers that allow direct calls from this page, so they work with no setup. Yahoo Finance, the only free source that covers VUAA, does not — its servers refuse requests from a page opened off your disk. That one needs a relay in between. Pick one below and press Test.
Everything is stored in this browser only — nothing leaves your computer except the price requests above. Clearing browser data wipes it, so export a backup now and then.
The public relays above need no signup but are shared, rate-limited and can disappear without notice. A relay of your own is free, private and takes about fifteen minutes once: create a Cloudflare account, deploy their ready-made “CORS header proxy” Worker template, and paste the resulting https://something.workers.dev/?url={url} address into the field above. After that every chart on this page works, permanently, and nobody else sees what you are looking up.
One limit per main category, in euros, applied to every month. Leave a category empty to leave it unbudgeted — it still counts in the totals. The column on the right is what you actually averaged over the last six months, which is usually the honest place to start.
Give a trip a start and an end and everything you spend between those dates is tagged automatically — on import and whenever you press the button below. Trips you tag by hand keep working as before.
Mark an expense as paid back and it stops counting as your spending. Repaid in part, only your share is counted; repaid in full, it leaves every total and moves to the register below — nothing is deleted, so you keep the history.
Rename anything and every movement follows it. Move a subcategory with the dropdown beside it. Delete a category that still has movements and I ask you where to put them first — nothing is ever left uncategorised.
The switch at the top splits the app in three. Today is the page to open every day: what is left this month, what is coming in the next thirty days, and anything worth a second look. Investments tracks what you own and what it is worth. Spending tracks where your money goes each month. They share one file and one backup, but nothing else — a share bought is not an expense, and a coffee is not a position.
Three sections at the top, four tabs in each — the ones you open every week. Everything else lives behind the ⋯ button in the corner: your categories, the rules the app has learned, trips, reimbursements, where prices come from, the backups, and this page. When you open one of those, it appears in the tab strip so you can see where you are.
On the Overview, the Filters button holds the category switches. While anything is switched off the button says so, so a number is never quietly filtered without you knowing.
Under each chart there is a Show the numbers link. Colour is never the only way to read this app — every chart has a table behind it.
Under ⋯ → Price sources there is a Sync panel. Put in the address of your own sync space and a passphrase, and the app keeps the computer and the phone in step by itself.
What travels is a block of bytes nobody can read. Your passphrase never leaves the device: it is stretched into a key, the file is encrypted here, and only then does it go up. The passphrase also decides the name of your space, so the server cannot even tell whose block it is holding. The six-character fingerprint shown in the panel has to read the same on both devices — if it does not, the passphrases are different and the two are talking past each other.
Both sides are merged rather than overwritten: if you add something on the phone and something else on the computer before either syncs, you end up with both. And because nobody but you holds the key, losing the passphrase means losing that copy — keep exporting backups.
Undo. Deleting a movement, clearing every budget, changing forty rows at once, removing a trip window — each of those puts an Undo button in the message at the bottom of the screen for a few seconds. One click and it never happened.
Undo a whole statement. Every import is kept as a batch on the Expenses tab, under Statements you have imported. Undoing one takes back exactly the movements that came with it, including any deposit it created on the investing side.
Backups. Everything lives in this browser. If it has been more than a month since you exported one, a warning appears at the top of the page — the ⇩ button in the corner downloads a file with both halves in it, and ⇧ puts it back.
Many rows at once. On the Expenses tab every row has a tick box. Tick a few — or the box in the header to take everything the filters show — and a bar appears: move them all to another category, tag them with a trip, mark who owes you, or delete them together.
Rules. Each time you classify something at import, the app remembers the merchant. The Rules tab shows every one of those, with how many movements it matches: change where a merchant goes and every future statement follows, or apply the rule to what you already have.
Search. The box on the Expenses tab looks at the description, the category, the trip, the person who owes you and the amount — typing 12,50 finds what cost €12.50.
A statement row in pounds or dollars is no longer thrown away. It comes in with a badge showing the original amount, and you set what one unit is worth in euro at the top of the import — change the rate and every row in that currency follows. An internal Revolut exchange (euros into dollars, say) is left out on purpose: it is the same money changing clothes, not spending.
On the Portfolio tab, under the allocation bar, you can write down a target for each asset class. The table then shows how far each one has drifted and how many euros it would take to get back — which is the useful form of the question "am I diversified?".
On the Settings tab you can name an index to compare against. It does not draw the index: it replays your own contributions, on your own dates, into that index, so the line answers "would the same money have done better elsewhere?". The dotted grey line does the same for inflation, at whatever rate you set.
In the Revolut app, ask for the statement as CSV for the month that just ended, in any language. Open Spending → Expenses and drop the file on the box at the top. You get a preview of only what is new: rows the app already recognises come classified, and you fix the rest. Tick show only the ones I am not sure about to skip everything it already knows. You can rename anything and change any amount right there — useful when part of a payment was cash, or when you got change back. Press Import, and every choice you made becomes a rule, so next month there is less to do.
You can drop the same statement as many times as you like. Each row carries the bank's own timestamp, so anything already recorded is left out and listed separately — renaming a movement or changing its amount never confuses it. Rows that merely share a date and an amount with something you already have are shown too, with an import anyway button, because two coffees at the same price on the same day are a real thing.
A movement is filed under the date the payment started, not the date it settled — that is when the money was actually spent, and it keeps a card payment made on the 30th out of the following month.
Then open Investments → Prices and press Fetch latest, or type this month's closing prices by hand. That is the whole routine.
Amounts are always positive. What decides the direction is the type: expense, money in, or moved to savings. Money you move to your own investing account is savings, not spending, and never counts against a budget.
Money someone owes you. Put their name on the expense when you record it. When they pay you back, go to Reimbursements and mark it — in part or in full. Your spending drops by exactly what came back, and a fully repaid expense moves to the register, out of every chart, without being deleted.
Trips. Give a trip a name and a date range on the Trips tab, and everything you spend between those dates is tagged for you. The cost lands in the month it happened, not spread out.
The Erasmus switch. On the Overview there is a box that leaves that semester out of every comparison. Turn it on before comparing 2026 with 2025 — otherwise you are comparing a year with a supermarket bill against one without.
Categories are yours. Rename, add, delete and move on the Categories tab. Renaming carries the movements with it; deleting asks where to put them.
Result is market value plus every cash flow: it already contains gains, coupons, dividends, fees and tax. Return divides that by what you put in and ignores time. XIRR is the annual rate that accounts for when each euro went in, and is the only fair way to compare two investments bought at different moments.
The 1D to Max buttons change the chart and the two “over the period” lines underneath. Money you added during the period is never counted as a gain — that is why the figure there is smaller than the raw change in value.
The Romania bond carries dirty prices, meaning the market price plus interest accrued since the last coupon. Its quantity is the nominal divided by a hundred. Coupons still have to be recorded as movements when they land.
Everything lives in this browser, on this computer, and nothing is sent anywhere. Clearing your browser
data erases it. Press the ↓ button in the top bar every now and then and keep the
.json somewhere safe — that same file restores everything on any computer through the
↑ button.
A limit per category, the same every month. Beside it, what you have actually been averaging since September 2025, so you can see how big a promise you are making to yourself.