Bookkeeping when you bank in three countries

Multi-currency bookkeeping means recording both the amount in the currency it moved in and the rate used to value it — on a date, from a source — rather than converting everything to one currency and losing the original.

Diagram in three panels: three stacked tags of differing sizes labelled THREE CURRENCIES; a level balance scale beneath a small amber box containing a slash, labelled THE RATE; and four horizontal bars of differing lengths gathered by a bracket, labelled THE LOTS.
CURRENCIES, RATE, LOTS — THE FACTS OF THIS PLATE ARE IN THE TEXT

If you invoice in euros, hold sterling for a client, and pay yourself in dollars, the honest answer to “how much money do I have” is four numbers and a date. Most tools give you one, and quietly throw the rest away.

Converting at the end is not bookkeeping

The spreadsheet approach is to keep everything in one currency and convert as you go. It produces a number that looks right and cannot be defended, because the rate you used is not written down anywhere and next year’s rate is different.

Proper multi-currency keeps three things per transaction: the amount, the currency it moved in, and the rate that valued it on that day.

2026-08-19 * "Client invoice 041"
  Assets:Bank:Savings     9150.00 EUR @ 1.0800 USD
  Income:Consulting      -9882.00 USD

Read that second line: the income was recorded in USD, the money arrived in EUR, and the rate is on the entry rather than in your head. Shipped

Holdings are lots, not a balance

Shares bought at three different prices are three lots, each with its own cost and date:

2026-03-11 * "Buy VWRL"
  Assets:Broker:VWRL     42 VWRL {98.40 EUR, 2026-03-11}
  Assets:Bank:Savings   -4132.80 EUR

When you sell, the gain depends on which lot you sold. A single balance cannot answer that, which is why “total value of holdings” is the number that is easy and “what did I actually make” is the number that is useful. Shipped

Why the file format matters here

This is where plain-text accounting stops being an aesthetic preference. A price directive is a line in a file:

2026-08-19 price EUR 1.0800 USD

You can read it, grep it, diff it, and see when it changed. In a proprietary tool the same fact is a row in a database you rent access to, formatted by a report you cannot alter, and the exchange rate it used last April is not something you can go and look at.

What this costs elsewhere

Multi-currency, investments and cost lots are normally the thing that pushes you onto a higher tier — QuickBooks puts serious multi-currency work well above its entry plan. Here it is the same engine on every plan, including the free one, because it is Beancount underneath and Beancount does not have tiers. Shipped

The honest edge

There is no automatic rate feed. Not built Rates come from you or from the agent when it books the entry, and the source is recorded. That is fine for invoicing and awkward for a portfolio you mark daily — worth knowing before you pick a tool.