You invoice a client in USD. Your costs are in IDR. Your bank account is in SGD. By the time you reconcile, the invoice sits in a different currency than your revenue line, your expenses don't match your costs, and your accountant is waiting for you to explain why a single transaction has three exchange rates attached. Most invoicing software treats multicurrency as a checkbox feature. Xero, FreshBooks, Wave, and others can technically handle multiple currencies—but they break silently in ways that only surface during tax season or when your accountant asks why cash received doesn't match invoice amount. This is not a minor inconvenience. In Southeast Asia, where cross-border receivables are common and tax rules vary by country, the wrong invoicing choice compounds monthly and gets exponentially worse at year-end reconciliation. Why standard invoicing tools fail on exchange rate timing Here's the scenario: You invoice USD 1,000 to a client on 1 January when the USD/IDR rate is 15,000. Your costs in Indonesia are IDR 12,000,000. You set your base currency to SGD (where your bank is). By 15 January when the payment arrives, USD/IDR is 15,200. Most invoicing tools give you three bad choices: Lock the exchange rate at invoice date —Clean in your records, but your bank receives 15,200 IDR per USD while your invoice shows 15,000. The difference vanishes into an unexplained exchange gain or loss. Revalue on payment date —Matches cash in the bank, but now your revenue changes after you've recorded it. Reconciliation becomes a guessing game. A payment reversal or late arrival can flip a profit into a loss retroactively. Leave it to your accountant —The most common choice. Your accountant manually adjusts everything in the GL, and you never know what your invoicing software actually recorded. FreshBooks and Wave both lock rates at invoice date by default and offer no clean way to adjust for realized exchange movements. Xero does allow revaluation but requires manual journal entries or monthly batch processing—which means if you receive payment after month-end, you either have to adjust the prior month's records or create a floating liability. The real problem: Exchange timing only matters when payment timing is uncertain. In SEA, delayed payment, partial payment, or currency conversion delays at the bank are normal. Your invoicing software needs to be able to update the exchange rate closer to actual settlement, not guess at invoice date. Foreign tax withholding eats margin silently Your Singapore client pays you USD 1,000 but Singapore's Inland Revenue Authority withholds 10% (or 5%, depending on the service and treaty). The bank receives USD 900. Your invoice says USD 1,000. Your cost was IDR equivalent. You are now reconciling three amounts, two currencies, and one country's tax code. Xero, FreshBooks, and Wave can record withholding in different ways, but none do it well: As a separate invoice adjustment (Xero)—Works, but requires manual entry and creates a separate line item. If you forget to log withholding, your revenue looks complete until the bank statement arrives and doesn't match. As a payment note (FreshBooks)—Not recorded in GL at all. You'll have to manually create a journal entry or note it for your accountant. Not at all (Wave)—Wave assumes payment equals invoice amount. You'll reconcile against a discrepancy you can't explain in Wave. The withholding amount is also tax-deductible in many SEA jurisdictions (it's a prepayment toward your own tax liability), so it matters for both cash flow and your effective tax rate. Software that doesn't handle it natively means every cross-border payment requires manual accounting work. Statement reconciliation breaks when rates shift between invoice and settlement Here's what happens at month-end reconciliation in a real scenario: 1 January: Invoice USD 1,000 to client (rate 15,000 IDR per USD). Record as SGD equivalent, ~SGD 740 at that day's rate. 10 January: Client requests invoice in IDR (they prefer to pay in local currency). You send amended invoice for IDR 15,000,000. Now you have two line items in your system: one in USD, one in IDR, for the same receivable. Some software marks one as void and creates a new one. Others creates confusion about which is live. 20 January: Payment arrives: IDR 15,000,000 transferred to your bank in Singapore, which converts it to SGD at their rate (~SGD 740.50 after fees). Month-end reconciliation: Your bank statement shows SGD 740.50 received. Your AR shows SGD 740 invoiced. The SGD 0.50 difference sits there. Was it an exchange gain? A fee? Your software doesn't know because it doesn't track the settlement method or the settlement exchange rate separately. This is not exotic. This happens monthly in any SEA business. Xero handles this better than most because it allows you to link payments to invoices with realized exchange rates, but it requires manual intervention. FreshBooks and Wave will either ignore the difference or f