Nomad Finances: Multi-Currency Beancount for Location-Independent Professionals

Three years ago, I left my Big 4 consulting gig to go freelance. Best decision ever for work-life balance. Six months ago, I took it a step further and went fully location-independent—working from Seattle, Portland, Lisbon, Chiang Mai, and Tokyo over the past half-year. The freedom is incredible, but the financial tracking complexity? That’s a different story.

The Multi-Currency Juggling Act

Here’s what my financial life looks like now: I invoice clients in USD, pay my Airbnb hosts in EUR or THB, grab coffee in GBP or JPY, and occasionally take on projects priced in local currencies. At any given moment, I’m juggling balances across 5+ currencies in different bank accounts, payment processors (Wise, PayPal), and crypto wallets.

Traditional accounting software expects you to pick one “home” currency and treats everything else as an inconvenient edge case. That’s fine if you’re an occasional international traveler, but for true location independence? It falls apart fast.

Why Beancount Works for Digital Nomads

After evaluating options (QuickBooks Multi-Currency, Xero, Wave), I landed on Beancount. Here’s why it’s perfect for the nomad life:

  1. Native Multi-Currency Support: Beancount treats all currencies as commodities. No “primary” vs “foreign” distinction. My account can hold USD, EUR, GBP, JPY, and THB simultaneously without any friction.

  2. Price Directives for Exchange Rates: I track exchange rates at transaction time using price directives. This gives me accurate historical conversion for tax reporting while maintaining the original transaction currency.

    2026-02-15 price EUR 1.08 USD
    2026-02-15 * "Airbnb" "Lisbon apartment - February"
      Expenses:Housing:Lodging          850.00 EUR
      Liabilities:CreditCard:Chase
    
  3. Git-Based = Work From Anywhere: My entire financial ledger is a text file in a private Git repo. Whether I’m on a beach in Bali or a cafe in Berlin, I can commit transactions from any device. No VPN required to access “the cloud.”

  4. Self-Hosted Data Ownership: With Fava running on my laptop, my financial data never leaves my control. Critical when you’re dealing with multiple tax jurisdictions and varying data privacy laws.

Real-World Account Structure

Here’s my simplified account structure:

Assets:
  Banking:
    Wise:USD
    Wise:EUR
    Wise:GBP
    Wise:JPY
  PayPal:USD
Expenses:
  Housing:Lodging  ; Airbnb, hotels
  Travel:Transport  ; flights, trains, taxis
  Office:Coworking  ; coworking day passes
  Living:Food
Income:
  Consulting:USD
  Consulting:EUR  ; European clients

Tax Compliance Benefits

The real win? Come tax season, Beancount gives me:

  • FBAR reporting made simple: Query all foreign accounts, sum balances, done. (Remember: >$10K total triggers FBAR requirements!)
  • FEIE calculation: Form 2555 requires foreign earned income in USD. Beancount’s price directives + Treasury’s annual average exchange rate = accurate conversion.
  • Audit trail: Every transaction documented with original currency, exchange rate, and date. If the IRS comes knocking, I’m ready.

Open Questions for the Community

I’m still figuring out best practices:

  1. Exchange rate tracking frequency: Should I record daily rates or just transaction-day rates? Bean-price can automate daily updates, but is that overkill?

  2. Cryptocurrency payments: Some clients pay in BTC/ETH. How do you track crypto → fiat conversions while respecting tax lot accounting?

  3. Tax software integration: Anyone successfully export Beancount data into TurboTax or similar for Form 2555 / Schedule C preparation?

  4. Multi-jurisdiction VAT/GST: European clients require VAT invoicing. How do you track this in Beancount while staying compliant across borders?

Call to Action

If you’re living the nomad life (or considering it), I’d love to hear your setup. How are you tracking finances across currencies? What mistakes did you make that I can avoid? What Beancount features am I not leveraging yet?

For those curious about the lifestyle: the 2026 Foreign Earned Income Exclusion is $132,900, so if you meet the Physical Presence Test (330 days abroad in a 12-month period), you can exclude a significant chunk of income from U.S. taxes. Just remember—self-employment tax still applies!

Let’s share knowledge and make nomadic finances less painful. :globe_showing_europe_africa:


Disclaimer: I’m a financial analyst, not a tax professional. Consult a CPA specializing in expat/nomad taxes for your specific situation.

Great timing on this post, Fred! Tax season is upon us and I’m seeing more nomad clients than ever. Let me add some critical compliance points:

FBAR Is Non-Negotiable

You mentioned the $10K threshold—worth emphasizing that this is the aggregate of ALL foreign accounts at ANY point during the year. I’ve seen clients get caught because they didn’t realize their PayPal, Wise, Revolut, and crypto exchange accounts all count. The penalty for non-filing? $10K minimum, potentially much higher.

Form 2555 Requirements Beyond Physical Presence

The 330-day Physical Presence Test is one route, but there’s also the Bona Fide Residence Test. For true digital nomads constantly moving, Physical Presence is usually easier to prove. Pro tip: Track your travel dates in Beancount metadata!

2026-02-01 * "Entered Portugal"
  Assets:Travel:Location  "Lisbon" @ 1.00 DAYS

2026-02-28 * "Departed Portugal"
  Assets:Travel:Location  -27.00 DAYS

Self-Employment Tax Has No Foreign Exclusion

This trips up SO many people. The $132,900 FEIE applies to income tax only. You still owe the full 15.3% self-employment tax on Schedule C income. For a $100K freelance income, that’s $15,300 regardless of where you earned it.

Treasury Exchange Rate vs Transaction Rate

You asked about exchange rate tracking frequency. For tax purposes, the IRS allows you to use the yearly average exchange rate if income is received throughout the year. But I recommend tracking transaction-date rates in Beancount for two reasons:

  1. More accurate for financial decision-making
  2. If you have lumpy income (one big project payment), transaction-date rate is more defensible

The Treasury publishes annual average rates here: Treasury Reporting Rates of Exchange

Beancount for Tax Lot Accounting (Crypto)

For your crypto question: YES, you need tax lot accounting. I use a plugin approach:

2026-01-15 * "Client payment" "Project Alpha"
  Assets:Crypto:Coinbase   0.025 BTC {40000 USD}
  Income:Consulting:Crypto

2026-03-01 * "Convert to USD" "Coinbase Pro"
  Assets:Crypto:Coinbase   -0.025 BTC {40000 USD} @ 42000 USD
  Assets:Banking:Wise:USD   1050.00 USD
  Income:CapitalGains:Crypto  50.00 USD

Track cost basis at receipt, then calculate gain/loss on conversion. This is a capital gain/loss event separate from the income event.

State Tax Obligations

Final warning: Some states (California, Virginia, South Carolina, New Mexico) don’t easily release tax residency. If you were a CA resident before going nomad, they may still claim you owe taxes. Document your domicile change carefully!

I’ve got a collection of Beancount tax report templates for nomads (Schedule C, Form 2555 prep, FBAR account summaries). Happy to share if there’s interest.

Disclaimer: IRS Enrolled Agent, not YOUR tax professional. This is education, not advice.

Fred, this is fantastic documentation of the nomad accounting challenge. As a CPA who works with several location-independent clients, I want to add the professional accounting perspective:

Why I Love Beancount for Nomad Clients

Plain text accounting has been a game-changer for my distributed client base. When someone’s emailing me from a cafe in Bali at 3am my time, we need seamless collaboration. Git + Beancount makes this trivial:

  • Client commits transactions to shared private repo
  • I review via pull request
  • Quarterly close becomes a merge + tag
  • Full audit trail of who changed what and why

Common Multi-Currency Mistakes I See

  1. Not tracking exchange rates at transaction date: Using month-end rates retroactively creates inaccurate books. Your price directive approach is correct.

  2. Forgetting Foreign Tax Credit (Form 1116): If you pay taxes to Portugal, Thailand, etc., you may be able to credit those against U.S. tax liability. This is separate from FEIE and can save thousands.

  3. State tax domicile confusion: Tina mentioned this, but it’s worth repeating. Some clients assume “I left the country, therefore no state tax.” Wrong! You need to affirmatively establish domicile elsewhere (lease, voter registration, driver’s license). Document this in your Beancount ledger with metadata.

  4. Mixing personal and business expenses: When everything’s in foreign currencies, it’s tempting to run it all through one credit card. Don’t. Maintain separate accounts or at least rigorous expense categorization.

Recommended Account Structure for Multi-Currency

I suggest a slight enhancement to your structure:

Assets:
  Banking:
    Wise:
      USD
      EUR
      GBP
      JPY
    Local:
      BankOfPortugal:EUR  ; Local account for rent, utilities
      BangkokBank:THB     ; For extended Thailand stays
  FX:
    CurrencyConversion  ; Track gains/losses on conversion

Income:
  Consulting:USD
  Consulting:EUR
  Consulting:Other
  FX:Gains  ; Forex gains (taxable!)

Expenses:
  FX:Losses  ; Forex losses (deductible!)

The separate FX accounts help with tax reporting—currency conversion gains/losses have different treatment than business income.

VAT/GST Compliance

Your question about VAT is critical. If you’re invoicing European clients and exceed certain thresholds (~€10K varies by country), you may need to register for VAT. This is complex:

  • VAT registration in client’s country (or your country if EU-based)
  • Quarterly/monthly VAT returns
  • Reverse charge mechanism for B2B
  • Currency conversion for VAT reporting

I use Beancount metadata to track VAT:

2026-02-15 * "Invoice #2024" "Client in Germany"
  Income:Consulting:EUR   -5000.00 EUR
    vat: "reverse-charge"
    client-vat: "DE123456789"
  Assets:Receivables:EUR   5000.00 EUR

Tax Software Integration

TurboTax doesn’t play nice with Beancount directly, but I’ve built export scripts that generate the data needed for:

  • Schedule C (business income/expenses by category)
  • Form 2555 (foreign earned income, housing expenses)
  • Form 8949 (capital gains for crypto conversions)
  • FBAR FinCEN 114 (max account balances)

It’s mostly query + Python pandas + Excel output. Happy to share the workflow if helpful.

Final Thought: Professional Guidance Pays for Itself

The nomad life is amazing, but tax compliance is genuinely complex. A good CPA who understands international tax will save you more than their fee in avoided penalties and legitimate deductions you didn’t know about.

Beancount makes my job easier because the books are transparent, version-controlled, and auditable. It’s the perfect tool for this use case.

Looking forward to seeing what others share!

This thread is gold! I handle bookkeeping for a couple of travel vloggers and a remote software consultant, and the multi-currency chaos is real.

Practical Daily Workflow

Fred, you asked about exchange rate tracking frequency. Here’s what I do:

Daily Exchange Rates (Automated)

I run bean-price nightly via cron:

#!/bin/bash
bean-price /path/to/ledger.beancount >> /path/to/prices.beancount
git add prices.beancount
git commit -m "Daily price update $(date +%Y-%m-%d)"

This creates a historical record. For transactions, I reference the transaction-date price:

2026-02-15 * "Coworking day pass" "Lisbon"
  Expenses:Office:Coworking   25.00 EUR @ 1.08 USD
  Liabilities:CreditCard:Chase

Having daily prices means reports can convert to USD at any point without manual lookups.

Receipt Management Across Countries

One thing nobody talks about: receipt management when you’re hopping countries. Here’s my system:

  1. Snap photo immediately (phone camera)
  2. Upload to cloud (I use Dropbox, organized by YYYY-MM/)
  3. Name file with transaction details: 2026-02-15_Coworking_Lisbon_25EUR.jpg
  4. Link in Beancount:
2026-02-15 * "Coworking day pass" "Lisbon"
  Expenses:Office:Coworking   25.00 EUR @ 1.08 USD
  Liabilities:CreditCard:Chase
    receipt: "https://dropbox.com/receipts/2026-02/2026-02-15_Coworking_Lisbon_25EUR.jpg"

Bank Reconciliation Strategy

With 5+ currencies across multiple accounts, reconciliation can get messy. I use balance assertions weekly:

2026-02-21 balance Assets:Banking:Wise:EUR  1247.33 EUR
2026-02-21 balance Assets:Banking:Wise:USD  3891.20 USD
2026-02-21 balance Assets:Banking:Wise:THB  45230.00 THB

This catches errors early. Missing a transaction? The balance assertion fails and you know exactly when things diverged.

Handling Time Zones

Weird edge case: when you’re in Thailand (UTC+7) but your bank is in the US (UTC-5), transaction dates can get confusing. Your credit card might post a Feb 15 transaction as Feb 14 US time.

I log transactions by local date where I was and include timezone metadata:

2026-02-15 * "Dinner" "Bangkok" #thailand
  Expenses:Living:Food   450.00 THB @ 0.028 USD
  Liabilities:CreditCard:Chase
    timezone: "Asia/Bangkok"
    utc-date: "2026-02-14"

This helps when reconciling against US bank statements.

Mobile Entry Workflow

Fred mentioned committing from anywhere. I use Termux on Android + Git to:

  1. SSH into my VPS
  2. Edit ledger.beancount with vim
  3. Run bean-check to validate
  4. Commit and push

For quick entries, I use a Telegram bot that appends to a pending.beancount file. Weekly, I review and merge pending transactions into the main ledger.

Question for the Group

Anyone using Fava in a cloud deployment for real-time multi-device access? I’ve been hesitant to expose Fava to the internet even behind auth. What’s the security best practice?

Great discussion, everyone. The knowledge sharing here is exactly why I love this community!

Wonderful thread! I’ve been using Beancount for 7+ years and have tracked 4 years of semi-nomadic life (split time between US, Canada, and Mexico). Let me share some hard-won lessons:

The Philosophy: Optimize for Maintenance, Not Setup

Early on, I made the mistake of over-engineering my account structure. Twenty different expense subcategories, complex tagging systems, elaborate scripts. It worked great… until I was exhausted from categorizing every coffee purchase while sitting in a Mexico City cafe.

Simplicity wins for nomad life. Your account structure looks great, Fred. Don’t add complexity until you need it.

Exchange Rate Philosophy

There are two schools of thought:

  1. Transaction-date rates (what you’re doing): Most accurate, best for tax defense, enables precise financial analysis
  2. Monthly/yearly average rates: Faster data entry, IRS-approved for evenly distributed income, “good enough” for many use cases

I started with #1, eventually moved to #2 for most transactions. For large invoices (>$5K), I still record transaction-date rates. For daily coffee/meals, I use monthly averages.

The bean-price approach Bob mentioned is perfect middle ground: automate daily rates, use them as needed.

The Crypto Rabbit Hole

Fred asked about crypto payments. Fair warning: this gets complicated fast. Beyond the tax lot accounting Tina mentioned, you’ve got:

  • Wallet management (hot vs cold storage as “accounts”)
  • Network fees (deductible? part of cost basis?)
  • Staking rewards (income at receipt, capital gain on sale)
  • DeFi yield (is it interest income? capital gains? the IRS is still figuring this out)

If crypto is a small part of your income, consider requesting USD payment instead. The accounting headache may not be worth it.

The Real Question: Why Are You Tracking?

This might sound philosophical, but it matters: why are you doing multi-currency tracking?

  • Tax compliance only: Simplify aggressively. Use yearly averages. Hire a CPA like Alice.
  • Financial optimization: Track everything. Analyze currency exposure, identify expensive cities, optimize credit card currency conversion fees.
  • Curiosity/data nerd: Track whatever makes you happy. The best tracking system is the one you’ll actually maintain.

What I Wish I’d Known

  1. Healthcare costs are brutal: Even with FEIE excluding income, you’re paying full price for international health insurance. Track this carefully—it adds up faster than you expect.

  2. Retirement contributions get weird: Traditional IRA contributions require “compensation” (W-2 or Schedule C income). If you’re excluding all income via FEIE, you can’t contribute. Roth IRA or taxable accounts only.

  3. Currency risk is real: I had €15K in a European account when EUR/USD dropped from 1.18 to 1.05. Lost $1,950 in purchasing power overnight. Consider this when deciding how much to keep in each currency.

  4. The 183-day trap: Many countries consider you a tax resident after 183 days. You could owe taxes to Thailand, Portugal, etc. in addition to US taxes (though foreign tax credit helps). Track your days carefully!

Resources I Recommend

  • Greenback Expat Tax Services (they understand nomad situations)
  • r/digitalnomad tax megathreads
  • “The Digital Nomad Tax Guide” by Alex Konanykhin

Final Thought

The nomad life is incredible, but it’s not a tax haven. Between FEIE, self-employment tax, foreign tax credits, and compliance costs, you’ll pay your fair share. Beancount just makes it manageable.

Thanks for starting this discussion, Fred. Looking forward to seeing how your setup evolves!

Edited to add: Anyone interested in a Beancount nomad finance meetup? Virtual, obviously. Could do monthly office hours for troubleshooting.