Last month I invoiced a client in EUR, two clients in GBP, one in JPY. Payments came at different times. I converted EUR at 1.12, but two weeks later GBP converted at 1.25 (it had moved). My bank deposit was $8,400, but my ledger showed $8,650 revenue based on invoice rates.
I have no idea what to do with that $250 difference. Is it a loss? Do I book it as “forex loss”? Or did I just mess up reconciliation?
For Beancount: should I track each currency separately and let Beancount calculate FX differences? Or convert everything to USD immediately when paid?
When did you book the revenue—at invoice time (EUR rate) or payment time? That’s the pivot point. Everything flows from that decision.
I freelance across three currencies. Here’s what I learned: book revenue in original currency at invoice time. When payment arrives, THAT’S when you book forex gain/loss (booked amount vs received amount).
Example: invoiced €1,000, booked at €1.12 = $1,120. Received at €1.15, deposit $1,150. Forex gain: $30. Reconciliation becomes: $1,120 revenue + $30 forex gain = $1,150 bank.
It’s extra bookkeeping, but the numbers actually match your bank then.