Skip to content

Base currency and how foreign amounts are valued

Every total, report, and net worth figure is shown in one currency — your base currency. Individual accounts can hold any currency; the app converts everything to base currency for anything it adds up or compares.

Setting your base currency

Pick it on first run; change it later in Settings → Currency & format. Not purely cosmetic: account balances and transactions convert correctly, since they carry their own native currency. Anything you typed in by hand — income, monthly expenses, a retirement-spend estimate — does not convert; the same number is just re-read as the new currency. USD to EUR doesn’t turn “$5,000 monthly expenses” into its euro equivalent — it turns it into “€5,000,” a different amount. The app warns you and lists exactly which fields are affected before you confirm.

The historical-rate lock

Easy to get wrong intuitively: record a transaction in a foreign currency and its base-currency value is locked in on the day you recorded it — not recalculated every time rates move.

Why: a transaction is a historical fact. Coffee for €4.50 last March cost a fixed number of dollars that day — it shouldn’t silently drift every time the euro moves against the dollar. Without this lock, your spending history would reshape retroactively: a month that cost $2,000 last week could look like $2,050 today, with nothing in your actual spending changed. That’s the bug this rule prevents.

The one exception: changing your base currency re-expresses every past transaction in the new currency using today’s exchange rate, not the rate that applied on the transaction’s original date — a transaction whose stored base amount no longer matches the current base currency gets revalued live from its native leg instead of trusted as-is.

Where exchange rates come from

Live exchange rates are fetched automatically (same market-data source as prices) and cached on the same refresh cycle — you never enter or maintain them yourself. If a rate’s temporarily unavailable, the app keeps the previously-cached one rather than guessing: a stale rate is a smaller error than a wrong one, and self-corrects once a fresh, sane rate comes back. Rates are also sanity-checked against their own reciprocal, specifically to catch the kind of provider glitch that would otherwise inflate a low-value currency’s numbers by 1,000x.