Stop Phantom FX Profits in QBO Xero
- Carla Alviso
- Oct 21, 2025
- 11 min read
Phantom FX profits are like that friend who always insists they paid you back, but your bank balance begs to differ. If you sell in one currency and settle in another, QuickBooks Online and Xero can quietly serve up fake gains or losses that make your P&L look athletic while your cash feels winded. The cure is not a new app or a lucky charm. It is clean multicurrency setup, clear separation of realized and unrealized FX, tight Stripe and PayPal workflows, and month-end revaluations that make AR, AP, and cash agree like adults. Grab a coffee. We are exorcising phantoms today.
What Are Phantom FX Profits?
Phantom FX profits or losses show up when your books recognize currency gains or losses at the wrong time or in the wrong place. The usual culprits are missing revaluations, sloppy Stripe and PayPal postings, and mixing up realized vs unrealized differences. You think you made money on currency swings, but the cash never backed it up. Or you think you lost money, yet the only thing you lost was track of the rate you used last month. The goal is simple. Every foreign AR, AP, and bank balance should convert at consistent rates at period end, and every currency difference should be either realized when cash moves or unrealized until it does.
Set Up Multicurrency Right
In both QBO and Xero, start by choosing your home currency correctly. For U.S. companies that is USD. Turn on multicurrency only when you are sure you need it. In QBO, once multicurrency is on, it is permanently on. No take-backs. Activate only the foreign currencies you actually use.
Create separate bank accounts by currency. If Stripe pays you in EUR, set up a Stripe EUR clearing account. If PayPal pays you out in USD even when customers pay in GBP, you still want a PayPal GBP clearing account to catch the customer-side cash, then a separate USD bank for the payout. The clearing account step gives you a clean place to book fees and capture realized FX when funds convert.
Build AR and AP workflows that respect currency. If you invoice in CAD, keep the receivable in CAD until it settles. Do not post random conversion entries midstream. Let the system do the math when payment hits or when you run month-end revaluations.
Realized vs Unrealized FX
Realized FX happens when cash moves. Your customer paid, your bank converted, your processor settled. If the rate you get on settlement is different from the rate used on the original invoice, the difference is a realized gain or loss. That belongs in your P&L immediately.
Unrealized FX happens when balances are still open at period end. You invoiced a customer in EUR and they have not paid yet. At month end you revalue the open EUR balance to the month-end rate. The difference is unrealized. That is a paper gain or loss that keeps your AR balance sheet value honest until cash arrives.
If you treat unrealized gains like realized ones, your P&L will swing wildly and your cash will never catch up. If you forget to revalue, your AR and AP will sit at dusty historical rates and your balance sheet will lie about what you are owed or what you owe.
Why Stripe and PayPal Create Messes
Processors love to do two things accountants hate. They net fees against deposits, and they convert currencies using their own rates and timing. If you only book the net payout that lands in your home-currency bank, you skip two facts that matter.
- There was a gross sale in the customer’s currency.
- There were fees and possibly a conversion at a processor rate that will never equal your system’s market rate.
That gap is where phantom FX shows up. You see revenue that does not match AR. You see bank that does not match invoices. You see a random line on your P&L that says exchange gain and you have no clue if it is real.
QBO Workflow For Stripe and PayPal
Here is a clean, repeatable flow that keeps QBO tidy when customers pay in a foreign currency and Stripe or PayPal pays you out in your home currency.
- Create a foreign-currency invoice. Use the customer’s currency. QBO stores the base-rate at the time of the invoice.
- Receive payment to a foreign-currency clearing bank. Set up a Stripe or PayPal bank in the customer’s currency, not in USD. Record the payment on the invoice to that account for the full gross amount the customer paid. If Stripe deducted fees before settlement in that same currency, add a line on the deposit or create an expense in that same foreign-currency clearing bank to record processing fees. The key is to keep the entire payment and fee trail in the customer’s currency first.
- Transfer to the home-currency bank when Stripe or PayPal converts. When the processor sends you a USD payout, record a Transfer from the foreign-currency clearing bank to your USD operating bank for the exact USD amount received. QBO will recognize realized FX on that transfer because two different currency accounts are involved.
- Match the bank feed. The USD payout from Stripe or PayPal will match the Transfer. The foreign-currency clearing bank should drop to zero when the payout hits, or it should carry a small balance equal to funds Stripe still holds.
Why this works. You separated the gross sale from the processor fee and pegged the realized FX to the moment the processor converted the cash. QBO now has all the ingredients to calculate a real currency gain or loss without mixing it up with revenue.
What not to do. Do not post a payment directly to the USD bank if the customer paid in EUR. That hides the currency conversion and mashes fees, FX, and revenue into a single mystery net deposit. Also avoid using a generic clearing account in USD for foreign-currency invoices. Use a currency-specific bank or clearing bank per payment processor.
Xero Workflow For Stripe and PayPal
Xero enjoys a similar rhythm, with a few naming differences.
- Create a foreign-currency invoice. Use the customer currency. Xero tracks the base-rate at invoice date.
- Receive money to a matching currency bank account. Set up Stripe EUR, Stripe GBP, PayPal CAD, and so on. Receive the full payment to that account. Post processing fees as Bank fees or Merchant fees from that same currency bank, so the fee is stored in the original currency.
- Transfer to the USD bank when payout lands. Use the Transfer function to move funds from the foreign-currency bank to the USD bank for the exact USD amount received. Xero records the realized FX difference on that transfer.
- Reconcile via the bank feed. The USD payout from Stripe or PayPal will be matched to the Transfer. The foreign-currency bank should reconcile to zero or to an in-transit balance waiting on the next payout.
This flow separates revenue, fees, and realized FX cleanly. It also gives you visibility into how much cash processors are holding by currency.
Month-End Revaluations In QBO
QBO has a Home Currency Adjustment tool that revalues foreign-currency balances at a date you choose. Use it monthly. Here is how to make it useful.
- Choose the revaluation date. Most companies use the last day of the month.
- Revalue AR and AP balances. QBO recalculates the home-currency value of outstanding foreign-currency invoices and bills using the rate at your chosen date. It posts an adjusting journal entry to Unrealized FX Gain or Loss. This keeps the balance sheet correct without pretending cash has moved.
- Revalue foreign-currency bank and credit card balances. QBO also revalues foreign-currency cash accounts at period end. Differences that arise when cash actually moves are realized. Differences booked by the Home Currency Adjustment for cash at month end are the period-end remeasurements to make the balance sheet reflect the month-end rate. Review those entries and ensure they align with your policy.
- Lock it in with docs. Save a copy of the rates you used and a quick tie-out showing beginning balances, activity, and ending balances by currency.
Pitfalls to avoid. Do not backdate home-currency adjustments across closed periods without reviewing the impact on retained earnings. Do not run revaluations on random dates each month. Pick a date policy, usually month end, and stick to it.
Month-End Revaluations In Xero
Xero tracks realized gains and losses when invoices or bills are settled at rates different from the original. For open balances at month end, use Xero’s reporting and your rate policy to keep the GL in sync.
- Update month-end rates. Make sure Xero has the spot or closing rates you actually use for financial reporting. If your policy is last business day of the month, enter that rate.
- Review the Foreign Currency Gains and Losses report. This report shows realized and unrealized items. For open invoices and bills, Xero will display the effect of revaluing to the reporting date rate.
- Revalue cash and open balances. Depending on your reporting needs, you may post a manual journal to reflect unrealized FX on open AR, AP, and foreign-currency bank accounts. Tie the journal to Unrealized FX Gain or Loss on the P&L so the balance sheet reflects the updated rate while unreconciled items remain open.
- Confirm settlement timing. When those invoices get paid next month, the realized gain or loss will flow automatically. If you posted an unrealized entry last month, you do not reverse it manually. Instead, ensure your month-end revaluation this month picks up the new open balances and rates. The key is consistent policy and documentation.
A quick caution. Some users see unexpected unrealized lines tied to foreign-currency cash in Xero. Audit your cash accounts and check for stray transactions coded directly to a bank account without a contact or without a proper transfer. Clean coding prevents surprise unrealized movements.
Tie Out AR, AP, and Cash
If you want to catch phantoms early, build a simple monthly tie-out. You are checking that the subledgers make sense at your chosen reporting rate and that the GL mirrors that total.
Spot And Fix Common Errors
- Netting everything. If you only book the net payout that lands in USD, revenue will be understated, fees will be invisible, and you will never see realized FX cleanly. Fix it by using foreign-currency clearing accounts and recording gross activity first.
- Posting payments to the home-currency bank. If the customer paid in AUD, do not mark the invoice as paid to your USD bank. Receive it to an AUD clearing bank, then transfer to USD. That gives QBO or Xero the proper place to calculate realized FX.
- Mixing rates and dates. If your invoice date is March 28 and the payment hits on April 3, the realized FX is April’s business, not March’s. Your March revaluation covers the open invoice as of March 31. Your April settlement records the real difference. Keep those lines straight.
- Skipping revaluations. If you let open items sit at old rates, your balance sheet will not reflect what those items are worth in home currency. Run monthly revaluations and document the rates used.
- Letting bank feeds auto-post. Bank rules that code Stripe payouts directly to revenue can torch your multicurrency integrity. Disable rules that skip the clearing step for foreign-currency sales.
A Simple Month-End Checklist
- Confirm processor clearing accounts by currency. Each major currency should have a Stripe or PayPal bank account in that currency.
- Reconcile gross to net. For each payout cycle, confirm gross sales, less fees, less refunds, equals net transfer, and chase any foreign-currency balances still in processor custody.
- Run the QBO Home Currency Adjustment or prepare Xero revaluation journals. Use consistent month-end dates and saved rates.
- Review FX gain or loss on the P&L. Large swings should tie back to known settlements or large open balances that moved with the rate.
- Tie out AR, AP, and foreign-currency cash. Use the small template above and match to the GL.
How To Handle Refunds And Chargebacks
Refunds in foreign currency can undo a piece of revenue and generate their own FX differences. If you recorded the original sale in EUR and later issue a refund when EUR moved, record the refund in the same currency bank and the system will pick up realized FX on the cash outflow. Processor fees on chargebacks should also sit in the same currency as the original transaction. When the processor claws back funds and converts on the way out, the realized FX belongs in the period the refund cleared, not the original sale period.
How To Handle Prepayments And Deposits
Customer prepayments in foreign currency should land in a foreign-currency liability account until you issue an invoice. Use a foreign-currency bank or clearing bank to receive the deposit. When you apply the prepayment to the invoice, the system will carry through the FX differences properly. If the prepayment sits across month end, include it in your revaluation process so your liability converts at the month-end rate.
What If You Invoice In USD But Customers Pay In Their Currency?
Some processors quote the customer in their local currency, then settle you in USD after conversion. In your books, keep the sales invoice in USD, because that is what you charged. When payment arrives, record it to the USD bank or USD clearing bank for the invoice amount, then separately record processor fees. There is no AR-related FX in this scenario, but there can be realized FX embedded in the processor’s conversion if you are moving funds between foreign-currency processor balances and your USD bank. Use the clearing bank and transfer method to capture that difference. The mistake is treating the customer-side currency as your AR currency when your contract price was USD all along.
Policy Choices That Keep Auditors Happy
- Document your source rates. Whether you use QBO’s daily rate feed, a bank’s published rates, or a third-party source, save a PDF or screenshot each month. Consistency beats creativity.
- Define your revaluation date. Most companies use the last calendar day of the month. If you close on the last business day, write it down and apply it every month.
- Separate realized vs unrealized accounts. Keep Unrealized FX Gain or Loss in its own P&L line. Realized FX can sit in a separate line or combined with Unrealized if that matches your reporting policy. Just be consistent.
- Do not backdate settlements. Recognize realized FX when the money actually moved. Use the settlement date on processor reports, not the order date.
FAQs
Do I need a separate bank account for each currency in QBO or Xero?
Yes, set up a bank or clearing account for each currency you actually receive or hold. If Stripe or PayPal accepts customer payments in EUR, create a EUR bank in your accounting system even if the final payout hits USD. That clearing step is where you record fees and capture realized FX correctly.
How often should I run revaluations?
Monthly, at minimum. If you report quarterly, still revalue monthly to keep AR, AP, and cash aligned. Use the same date policy every time and document the rates you used.
Where do processor fees belong when customers pay in a foreign currency?
In the same currency as the customer’s payment. Record fees as an expense from the foreign-currency clearing bank. When you transfer to USD, the net you move reflects both the fee and the conversion, and the system calculates realized FX on the transfer.
What creates unrealized FX in the first place?
Any open foreign-currency receivable, payable, or cash balance at period end. Exchange rates move, so the home-currency value of those balances changes until they settle. Unrealized FX keeps your balance sheet updated to the month-end rate.
Can I fix prior phantom FX without reopening closed periods?
You can fix forward by setting up correct workflows, then running clean revaluations month by month. If prior periods contain material errors, talk to your accountant about posting a current-period true-up entry to retained earnings or disclosing the correction.
How do I know if my FX gain or loss is real?
Trace it to a cash event. If it arose from a Transfer between a foreign-currency bank and your home-currency bank, or from an invoice payment that hit cash, it is realized. If it came from a month-end revaluation on open items, it is unrealized. Your P&L should make that distinction clear.


