A multi-currency expense tracker that keeps your real rates.
Most apps silently replace the rate your bank actually charged with a generic reference rate. BudgetLuma stores yours, protects it with database-level triggers, and reuses it on every edit — until you explicitly change it.
- 30 currencies with hourly reference rates
- 870 active currency pairs
- Both original and converted amounts stored
- Custom rate to match your bank statement (Premium)
Free to start. No credit card.
Transparent multi-currency, not silent conversions.
Every conversion has a source, a provider, and a timestamp you can see.
30 currencies, refreshed hourly
Reference rates sourced from Frankfurter and refreshed every hour across a live coverage of 870 currency pairs. Conversions are computed server-side and stored with the transaction.
Original amount never lost
Every transaction keeps both the amount you entered and the converted value in the wallet’s base currency, with the rate used, its source, the provider, and the timestamp. Nothing is inferred.
Custom exchange rate (Premium)
Enter the real rate your bank or card applied. BudgetLuma stores it as the rate for that transaction — and database triggers protect it from being silently overwritten on later edits.
Display override (Premium)
View a wallet or the Insights screen in a different currency, without mutating any stored value. The underlying truth stays intact; only the lens changes.
30 currencies, 870 live pairs.
Every code below is active in production and refreshed hourly.
JPY, KRW, HUF and ISK are stored with 0 decimals; all others with 2. Reference rates are sourced from Frankfurter.
Original in, converted beside — never swapped.
The transaction you enter in ¥ stays in ¥. The wallet total in € uses the rate that was applied the day you recorded it. On edit, you decide whether to keep or refresh the rate — nothing silent, nothing sneaky.
Transaction
Tokyo — Ramen dinner
Original amount
¥ 1 850
Wallet base (EUR)
≈ € 11,72
Stored rate — source
1 EUR = 157.83 JPY — system reference (Frankfurter), 14 Jan 2026
Illustrative. Real transactions store the same fields exactly.
Multi-currency — questions answered honestly
Which 30 currencies are supported?
EUR, USD, GBP, JPY, AUD, BRL, CAD, CHF, CNY, CZK, DKK, HKD, HUF, IDR, ILS, INR, ISK, KRW, MXN, MYR, NOK, NZD, PHP, PLN, RON, SEK, SGD, THB, TRY and ZAR. JPY, KRW, HUF and ISK are stored with 0 decimals; all others with 2.
Are exchange rates real-time?
No. Reference rates are refreshed hourly from Frankfurter. They’re provided for informational purposes; BudgetLuma is not a currency exchange service. For a rate that matches exactly what your bank charged, use the Premium custom exchange rate on a transaction.
If I edit a transaction, do you silently change its exchange rate?
No. The stored rate is protected. On edit, you explicitly choose whether to keep the existing rate, auto-fetch a fresh reference rate, or enter a new custom rate. A bare amount edit on a custom-rated transaction preserves the custom rate.
What happens when I combine wallets with different base currencies?
Cross-wallet views in Insights use reference rates (not your custom rates) to combine wallets, and the UI labels this explicitly with an “≈” signal and a “Combined across N wallets · reference rates” note. You can always reconcile with your bank statement.
Is there a historical exchange-rate feature?
Not today. Rates are applied at transaction time and stored. Point-in-time historical lookups are on the backlog but not shipped. We don’t present unavailable features as if they exist.
Related guides
Custom exchange rate
Deep dive into the Premium feature that preserves the exact rate your bank charged.
Read the guide GuideTravel budget app
A wallet per trip, in the local currency you think in, with real-rate reconciliation.
Read the guide GuideBudget tracking
Real-transaction budgets that inherit the same stored rates your wallet trusts.
Read the guideTrack what you spent. Not what an app guessed.
Free to start on iOS. Premium unlocks custom rates and display overrides.