How a Bali Yoga Retreat Handles 12 Currencies Without Going Crazy

By the InvoiceFlow team — published 26 May 2026 — 11 minute read

The Heron Retreat sits at the end of a long dirt path in the rice fields north of Ubud. It has six bamboo bungalows, a tea-stained yoga shala that opens to the jungle, a kitchen run by a Balinese family who have been cooking for the property since it was a single hut in 2014, and an owner — Ingrid van der Berg — who never intended to start a business and is now ten years deep into one.

The Heron hosts roughly 280 guests per year. They come, in rough order of frequency, from Australia, Germany, the United States, the United Kingdom, the Netherlands, France, Singapore, Japan, Canada, Switzerland, New Zealand, and the United Arab Emirates. That's twelve currencies if you count locally — AUD, EUR, USD, GBP, EUR (yes, again), EUR (yes, yet again), SGD, JPY, CAD, CHF, NZD, AED. Plus IDR, which is what the Indonesian tax authorities require everything to be reported in.

For the first seven years, Ingrid handled this with a spreadsheet, a daily exchange-rate check, and what she called her "trust the universe" approach to bookkeeping. The universe was patient. The Indonesian tax office, eventually, was not.

Why hospitality businesses have a unique multi-currency problem

Hospitality multi-currency is different from freelance multi-currency in one important way: the currency is determined by the customer's preference, not by your contract. A guest from Sydney expects to be quoted in AUD. A guest from Frankfurt expects EUR. A guest from Singapore expects SGD. You can technically force everyone into USD, but you'll convert fewer of them — international guests are price-sensitive and a foreign-currency quote feels less concrete.

The chain of conversions

Before The Heron switched to InvoiceFlow, here is what every international booking involved:

  1. Guest emails asking for a 7-night retreat package.
  2. Ingrid opens her IDR price list and a currency converter.
  3. Converts to the guest's home currency at "today's rate."
  4. Sends a quote PDF in the guest's currency.
  5. Guest accepts (sometimes weeks later) at "today's different rate."
  6. Ingrid sends a deposit invoice.
  7. Deposit lands in her account (in IDR, after her payment processor's conversion).
  8. Final invoice generated at check-in, possibly in a different currency from the deposit.
  9. Final payment lands (in IDR, again).
  10. At month-end, Ingrid attempts to reconcile what she charged in 12 currencies with what landed in IDR, with three different exchange rates touching each booking.

"It was reconciliation theater," she told us. "I'd produce numbers that approximately matched and hand them to my accountant. We both knew they weren't exact."

The setup that actually works

1. Currency stored at booking time

Each booking record stores the guest's currency from the moment the quote is sent. The quote PDF, the deposit invoice, the final invoice, and the receipt are all in that same currency. The exchange rate to IDR is locked when the quote is converted to a confirmed booking. This rate becomes the "official" rate for all of Ingrid's IDR-denominated reporting.

Diagram showing currency lifecycle for an international retreat booking
How one booking moves from quote currency to IDR settlement.

2. Per-booking IDR equivalent everywhere

Throughout the booking lifecycle, the IDR-equivalent total is visible to Ingrid in her dashboard, even when the guest-facing documents are in AUD or EUR. She can see, at any time, the total IDR she has invoiced, the total IDR she has received, and the gap. This isn't visible to the guest, but it's the only number that matters for her tax filing.

3. Settlement-rate tracking

When the actual payment lands in her IDR account, the app records both the foreign-currency amount the guest sent (e.g., EUR 1,400) and the actual IDR received (e.g., IDR 24,150,000). The difference between this and the locked-quote-rate IDR — the FX gain or loss — is tracked as a separate line item her accountant can claim or report appropriately. This is the line item Indonesian tax authorities specifically want to see, and which her spreadsheet workflow never produced cleanly.

4. Multi-currency reports for different audiences

Ingrid pulls three different reports at month-end:

All three come from the same data. None require manual reconciliation.

The reporting clarity that changed her business decisions

This is the unexpected part. Once Ingrid had clean per-currency reports, she could see things she had only intuited before.

The AUD/EUR rebalancing

Australian guests had felt like her biggest market for years. The per-currency report revealed that German and Dutch guests combined (both invoiced in EUR) were actually her largest revenue segment. She shifted her marketing accordingly — more presence on European retreat-finder platforms, less on Australian Instagram.

The strong-yen month

March 2026 had a stretch where the Japanese yen strengthened against the rupiah. Her Japanese guests' bookings, settled at that rate, produced a small but real FX gain. The report made the gain visible. Her accountant suggested holding more of her EUR float — when she had it — instead of converting immediately, since the EUR/IDR rate also showed favorable patterns at certain points in the year. Small adjustment, real money over a year.

The Swiss premium

Swiss guests, who pay in CHF, consistently produced the highest IDR-equivalent margin per booking — they pay top-of-range and the CHF/IDR rate has been favorable for two years. This was invisible to Ingrid when everything was lumped together. Now it's a small but specific marketing target.

The Indonesian tax compliance angle

Indonesia requires hospitality businesses to report in IDR. Bookings denominated in foreign currencies must be reported using the official Bank Indonesia rate on a specific reference date. The FX gains and losses (selisih kurs) must be reported separately.

This sounds straightforward. It is, in practice, the hardest part of running a retreat that takes foreign guests. Most owners get it slightly wrong every year and pay penalties they could have avoided.

Ingrid's setup now produces, at year-end, a clean ledger that:

Her accountant — who is also her cousin's husband and therefore has both professional and family pressure to be honest — calls it "the cleanest set of books in Ubud." We have no way to verify this claim independently. We choose to believe it.

What every multi-currency hospitality business needs

If you run a B&B, retreat, small hotel, glamping site, dive operation, or anything else that takes international guests, here's the operational checklist:

Store the booking currency at quote time

The currency the guest sees in the quote should be the currency on the deposit invoice, the final invoice, and the receipt. Don't switch midway.

Lock the exchange rate at quote acceptance

When the guest accepts, the rate to your home currency should be fixed. This becomes your official rate for that booking.

Track settlement separately from quote

Record what the guest sent (in their currency) and what actually landed (in yours). The difference is real money that your tax authority cares about.

Generate per-currency analytics

You cannot manage what you cannot see. Per-currency revenue trends are how you discover which markets are growing.

Comply locally, charge globally

Your tax obligations are in your local currency. Your customers expect their own currency. Good software lets you do both without compromise.

Ingrid's note to anyone running a retreat

"The mistake I made for seven years was treating currency as a back-office annoyance. It's not. It's a marketing tool, a pricing strategy, and a compliance requirement, all at once. You have to take it seriously. The tools to take it seriously have only really existed for the last few years. There's no excuse for the spreadsheet anymore."

The Heron has six bungalows. They're booked 88% of the year. Her FX gain alone in 2025 paid for the new kitchen roof.