How to budget in two currencies
Earn in one currency, pay rent in another, and still know what is left. The setup, the rate to use, and the two mistakes to avoid.
Drafted with AI assistance, researched, fact-checked and edited by Dejan Bogatinovski. How we write.
On this page
- The two numbers a two-currency budget has to keep apart
- Step 1: Choose the main currency
- Step 2: One budget, not one per currency
- Step 3: Record each entry in the currency it was paid in
- Step 4: Decide which rate you record
- Step 5: Treat transfers between your own currencies as transfers
- Step 6: Savings and debts in the other currency
- A worked month: euro salary, dollar costs, a week in Skopje
- The spreadsheet version
- How Tavala does it
To budget in two currencies, keep one budget with one main currency for the totals, and record every entry in the currency it was actually paid in, together with the exchange rate of that day. The main currency should be the one most of your bills are paid in, not the one your salary arrives in. Once an entry is saved, its converted value never changes. Balances are different: they are worth whatever today's rate says.
Most people who get this wrong make one of two mistakes. They convert their whole history again at today's rate, so last March's spending changes every time the dollar moves. Or they keep two separate budgets, one per currency, that never add up to a single answer to "how much did we spend this month?". This guide sets up the alternative step by step, with a worked month in euros, dollars and Macedonian denars, and a spreadsheet version for people who use no app. If you want to see how an app can do it for you, multi-currency budgeting in Tavala works this way.
The two numbers a two-currency budget has to keep apart
Every amount in a budget answers one of two questions.
- What did this cost? A coffee, a rent payment, a plane ticket. The answer was settled the day you paid. It is history.
- What is this worth? A savings account, a loan, the cash in your drawer. The answer changes whenever the exchange rate changes. It is a balance.
A single-currency budget never has to tell these apart, because a euro spent in March is still a euro in October. With two currencies they come apart. A dollar spent in March cost you a certain number of euros in March, and that number is a fact. A dollar sitting in your account in October is worth a different number of euros than it was in March, and that is also a fact.
So the rule is simple to state:
| What | Convert at | Changes later? |
|---|---|---|
| Spending, income, budget categories, monthly reports | The rate of the day it happened | No |
| Account balances, savings, debts, net worth | Today's rate | Yes, with every rate move |
Everything below follows from that table.
Step 1: Choose the main currency
The main currency is the one your budget adds up in. Your categories, your monthly totals and your "what is left" figure are in it. You will still record a taxi in denars or a subscription in dollars; the main currency is only what they are converted into for the totals.
Pick the currency most of your bills are paid in. Rent, groceries, transport, insurance, phone: if those are in euros, the main currency is the euro, even if your employer pays you in dollars.
The reason is that a budget's job is to tell you whether the bills will be covered, and the bills are fixed in their own currency. Take someone paid in US dollars who rents a flat in Lisbon for €1,500 a month. If their main currency is the dollar, the rent is $1,680 in a month when 1 euro buys 1.12 dollars and $1,575 in a month when it buys 1.05 (example rates). Their rent category has to be reset every month, and the budget shows a rent that "changed" when the landlord changed nothing.
With the euro as the main currency, the rent is €1,500 every month, which is true. What moves is the salary: one month it converts to more euros, another month to fewer. That is also true. Your income really does vary with the exchange rate, and the budget should show the variation where it happens, on the income line, not spread across every bill.
Two cases where a different choice makes sense:
- Your bills are split roughly evenly. Pick the currency your long-term goals are in, for example the one you will retire or buy a home in. You will think in it anyway.
- You are about to move. Pick the currency of where you are going to live. Your history converts once, and the budget is ready on arrival.
Choose once and leave it. Changing the main currency later is possible, but in a spreadsheet it means converting every past row again at its own date's rate, which is the kind of job people put off for a year. (In Tavala, the owner of a space can switch it in Settings, and past entries are re-valued at each entry's own date: see choose or change your main currency.)
Step 2: One budget, not one per currency
The other common setup is a budget per currency: a euro budget for the euro account, a dollar budget for the dollar account. YNAB recommends exactly this. Its help article on multiple currencies says to "make sure all accounts in a plan use the same currency" and, for more than one currency, "we recommend creating a separate plan for each" (YNAB support, "Using multiple currencies in YNAB", loaded 24 October 2026). Moving money between them means an outflow to a "Currency Transfer" category in one plan and an inflow in the other, where you work out the rate and the fees yourself.
Some apps do not convert at all. Monarch's help center says it "does not perform any currency conversion" and shows every amount with a dollar sign (Monarch help); Copilot "only supports USD" (Copilot help).
Separate budgets have one real advantage: each one reconciles exactly with the bank account in its currency, with no rates involved. They have a bigger cost. Nothing adds them up. To answer "what did we spend in October?" or "can we afford the trip?" you convert one budget's totals by hand and add them to the other's, and the rate you use for that addition is usually today's, which brings back the first mistake.
One budget with a main currency gives you both: each account still reconciles in its own currency (the dollar account shows dollars), and every total is a single number.
A budget per currency still makes sense in one case: when the second currency is a separate economy. A rental flat abroad with its own rent coming in and its own repairs going out, or a small business, can live in its own budget, because you want to know whether that thing pays for itself. Your household money should be in one.
Step 3: Record each entry in the currency it was paid in
Write down the amount in the currency it was charged in: 1,200 denars for the taxi, not "about 20 euros". Then add its value in the main currency, at the rate of that day.
Keep the original amount even after converting. It is the only number you can check against a receipt, and it lets you fix the conversion later if you find the real rate on a statement.
If the payment came from an account in a third currency, you have three amounts: what the receipt says, what the account was charged, and what the entry counts as in your totals. A taxi in Skopje paid with a dollar card, in a budget kept in euros, is 1,200 denars on the receipt, some number of dollars on the card statement, and some number of euros in your budget. All three are worth keeping.
Step 4: Decide which rate you record
There are several rates for any day: the mid-market rate, your card network's rate, your bank's rate, the European Central Bank's reference rate. The short version:
- When you know the rate you actually paid, record that. It is on your card or bank statement, or you can work it out from the amount charged: 12.00 USD charged as €10.92 means 1 USD = 0.91 EUR.
- When you do not know it (cash, a pending card payment, an old receipt), record a published reference rate for that day.
- Never change the entry afterwards because the rate moved. Correcting an entry to the amount your statement shows is fixing a fact. Converting it again at a later rate is rewriting history.
The long version, with dynamic currency conversion at card terminals and how to record a fee, is in which exchange rate goes in a budget.
Step 5: Treat transfers between your own currencies as transfers
When you move euros into your dollar account, you did not spend anything. The money changed form. A transfer between your own accounts belongs in neither spending nor income, in any currency.
Two things happen in a currency transfer that are real costs, though, and they get lost if you record only the transfer:
- A visible fee. Your bank or transfer service charges €1.60 to convert. That is spending. Record it as its own expense, in a category such as bank fees, and record the transfer as the amount that was actually converted.
- Rate drift. The rate you got is a little worse than the reference rate. Suppose you convert €398.40 and receive $445.41, at 1 EUR = 1.1180 USD, on a day when the reference rate was 1.1193 (example rates). At the reference rate you would have received $445.93. The 52 cents (0.12 percent) is the provider's margin. It is real, but it is small and hard to see, and you do not need to record it as a separate expense. The transfer records what left one account and what arrived in the other, and your balances carry the difference.
The test is whether your accounts still match the bank. If the euro account shows €400 gone and the dollar account shows $445.41 arrived, and €1.60 of the 400 is in your fees category, everything reconciles and nothing was counted as spending that was not.
A cash withdrawal abroad is the same thing. Taking 12,000 denars out of a machine with a euro card is a transfer from the euro account to a cash wallet in denars, plus a fee if the statement shows one.
Step 6: Savings and debts in the other currency
Balances follow the second row of the table: they are worth what today's rate says, and they move every day without any entry.
A dollar savings account of $6,095.41 is worth €5,445.64 when 1 USD = 0.8934 EUR. If the dollar falls to 0.8500, the same account is worth €5,181.10. You did not spend €264.54. Nothing happened in your budget. Your net worth in euros went down because of the rate, and the budget should show that only in the balance, never as spending.
Debts work the same way in reverse. A student loan of $8,650 is €7,727.91 at 0.8934 and €7,352.50 at 0.8500. A weaker dollar makes a dollar debt smaller in euros.
This has a useful side effect. If you hold savings and debts in the same foreign currency, they partly offset each other. In the example, the dollar savings are $6,095.41 and the dollar loan is $8,650, so the net dollar position is minus $2,554.59. When the dollar falls from 0.8934 to 0.8500 euros, the net position goes from minus €2,282.27 to minus €2,171.40: net worth in euros rises by €110.87, though the savings alone fell by €264.54.
Two practical points:
- Repayments are entries; the balance is a balance. The $350 you paid on the loan in October cost you €312.69 at that day's rate, and that figure stays in October's report. The remaining $8,650 is re-valued every day.
- Plan debt payoff at today's rate, and re-plan when rates move a lot. A payoff plan for debts in several currencies has to convert them into one currency first. The debt payoff calculator takes each debt in its own currency and a rate you choose, and plans them from one budget.
None of this is advice on whether to hold savings or debt in a currency. It is only how to record them so that the numbers are honest.
A worked month: euro salary, dollar costs, a week in Skopje
Mila works in Germany and is paid in euros. They have a dollar account left over from years in the United States, a student loan in dollars, a design-software subscription billed in dollars, and they spent a week in October visiting family in Skopje, where the currency is the Macedonian denar. Rent and most bills are in euros, so the main currency is the euro.
The rates below are examples. The dollar rate, 1 USD = 0.8934 EUR, is the inverse of the European Central Bank's reference rate for 23 October 2026 (1 EUR = 1.1193 USD), used for every day of the month to keep the arithmetic readable. The denar rate, 1 MKD = 0.01626 EUR, is an example rate. Real rates move from day to day; the method does not.
Accounts: Current account (EUR), Dollar account (USD, $6,000.00 at the start of the month), Student loan (USD), and a Cash MKD wallet opened during the trip.
| Date | Entry | Paid in | Account | In the budget (EUR) | Type |
|---|---|---|---|---|---|
| Oct 1 | Salary | 3,400.00 EUR | Current account | +3,400.00 | Income |
| Oct 2 | Rent | 1,150.00 EUR | Current account | 1,150.00 | Spending |
| Oct 3 | Design software | 24.00 USD | Current account (euro card) | 21.87 | Spending |
| Oct 5 | Transfer to Dollar account | 398.40 EUR, arrives as 445.41 USD | Current → Dollar | 0.00 | Transfer |
| Oct 5 | Transfer fee | 1.60 EUR | Current account | 1.60 | Spending |
| Oct 6 | Student loan payment | 350.00 USD | Dollar → Student loan | 312.69 | Debt payment |
| Oct 1 to 31 | Groceries and transport | 610.00 EUR | Current account | 610.00 | Spending |
| Oct 18 | Cash machine in Skopje | 12,000 MKD, charged €195.12 | Current → Cash MKD | 0.00 | Transfer |
| Oct 18 | Cash machine fee | 2.50 EUR | Current account | 2.50 | Spending |
| Oct 18 | Taxi | 1,200 MKD | Cash MKD | 19.51 | Spending |
| Oct 19 | Dinners out | 3,600 MKD | Cash MKD | 58.54 | Spending |
| Oct 21 | Gift for parents | 6,000 MKD | Cash MKD | 97.56 | Spending |
How each row was converted:
- The software was charged to the euro card. The statement says €21.87, so that is the entry, at the rate actually paid: 1 USD = 0.91125 EUR. At the reference rate it would have been €21.44; the card's rate was about 2 percent worse.
- The transfer moved €398.40 at the provider's rate of 1.1180, and the €1.60 fee is its own expense. The Current account lost €400.00 in total.
- The loan payment came out of the dollar account. Its value in the budget is $350 × 0.8934 = €312.69, fixed on October 6.
- The cash cost exactly the reference rate in this example (12,000 × 0.01626 = €195.12), plus a separate €2.50 fee. Each denar entry is converted at that rate: 1,200 × 0.01626 = €19.51, and so on.
October in one currency:
| EUR | |
|---|---|
| Income | 3,400.00 |
| Spending | 1,961.58 |
| Debt payment | 312.69 |
| Left over | 1,125.73 |
Spending is rent 1,150.00, groceries and transport 610.00, software 21.87, fees 1.60 and 2.50, and the Skopje cash 175.61. Mila still holds 1,200 denars in cash; that is a balance, not spending, and it is worth whatever the denar is worth when they look.
What goes wrong if you convert again at today's rate
Suppose that in January the dollar has fallen to 1 USD = 0.8500 EUR (an example), and a spreadsheet converts every dollar row at "today's rate". October's software now reads €20.40 and the loan payment €297.50. October's outgoings drop by €16.66, though nothing happened in October. Worse, the euro account no longer reconciles: the bank took €21.87 for the software, and the spreadsheet says €20.40. Do that across a year of rows and every past month drifts, and no report can be compared with another.
What goes wrong with two budgets
With a euro budget and a dollar budget, the euro budget shows October's spending as €1,961.58 (the denar trip has to go into it, converted by hand, since there is no denar budget). The dollar budget shows a $350.00 loan payment. Each is accurate. Neither answers "what did October cost?" until someone converts the $350 at some rate, usually today's, and adds it to the other.
The spreadsheet version
If you use no app, a spreadsheet does this well with two tabs.
Tab 1, Entries. One row per payment, with these columns:
| Date | Description | Category | Amount | Currency | Account | Rate to main | Amount in main |
|---|---|---|---|---|---|---|---|
| 2026-10-03 | Design software | Subscriptions | 24.00 | USD | Current account | 0.91125 | 21.87 |
| 2026-10-18 | Taxi | Transport | 1200 | MKD | Cash MKD | 0.01626 | 19.51 |
- Rate to main is the rate of that day: from your statement when you have it, from a published reference rate when you do not. For an entry already in the main currency, it is 1.
- Amount in main is Amount × Rate to main. Once it is right, paste it as a value, so it can never recalculate. If you look rates up with a live function, this is the step that protects you: a formula pointing at a live rate is how history starts to move.
- For a transfer between your own accounts, use a category called Transfer and leave it out of your spending totals. Put the fee on its own row.
- Monthly totals are a pivot table, or a SUMIFS, over Amount in main, by month and category.
Tab 2, Balances. One row per account: the balance in its own currency, today's rate, and the value in the main currency (balance × today's rate). This tab is the one place where a live rate belongs. Update the rates when you look, and the net worth figure follows.
The weak spot of a spreadsheet is the rate column: someone has to look up a rate for every foreign entry, on its day. People stop doing it in week three and start writing "about 20". If that happens, put in a reference rate weekly, for all the week's entries at once. A slightly wrong rate written down is better than a blank one.
How Tavala does it
Tavala keeps the two numbers apart the way the table at the top does. Every entry keeps the rate of the day it was saved, for good, and an entry in a different currency from its wallet keeps three amounts: the amount you typed, the amount charged to the wallet, and its value in your main currency, all fixed when you save (how Tavala converts currencies). Typing taxi 1200 MKD in the capture bar against a euro account, at the help center's example rate of 1 MKD = 0.01626 EUR, saves €19.51, and the taxi still reads €19.51 a month later. Wallet balances and net worth are converted again at today's rate every time you look, and a transfer between wallets in different currencies counts as neither spending nor income (move money between your wallets). The rates are daily reference rates, not your bank's, so you can type your own rate for one entry when your statement differs.
What it does not do, since you may expect it: it imports nothing from YNAB or other apps and no bank statement files, so moving from a spreadsheet means starting from today's balances. Bank connections are an optional add-on to Tavala Plus for banks in the United States and Canada only, so a European account is entered by hand. The free plan holds 2 currencies per space, counted from wallets; Plus holds every currency.
