Connectorly is designed to align with Xero’s realised FX journals while also providing a more consistent and transparent view of unrealised foreign exchange and bank revaluation movements over time, which are unavailable through the Xero API (as detailed in this Xero support article).
Because Connectorly and Xero approach FX slightly differently, you may see small differences (typically a few cents or pence) when comparing these. These differences are expected and do not indicate an error.
1. Realised FX always matches Xero
Connectorly does not recalculate realised FX gains or losses for Journals. We use the values from the Xero API.
2. Unrealised FX are calculated by Connectorly
Unrealised FX gains and losses represent the change in value of unpaid foreign-currency invoices based on current exchange rates. Unrealised FX gains and losses are not available through the Xero API.
Xero does not uniformly calculate FX movements for all foreign-currency invoices.
Xero FX treatment can vary depending on:
Currency
Payment timing
Payment method
Internal system logic
To be as consistent as possible with Xero, Connectorly only calculate unrealised gains and losses for unpaid invoices (which don't yet have realised amounts) and paid invoices that Xero has calculated realised gain or loss amounts for.
Invoices included in unrealised FX calculations
Connectorly calculates and creates Journals for daily unrealised FX gains and losses for all AUTHORISED foreign currency invoices (these are invoices that are not yet PAID).
In the case of PAID invoices, only invoices that Xero provides a realised gain or loss value for have daily values calculated.
This means that the unrealised values will properly reverse out and match the provided Xero realised values.
But it may also mean that some foreign currency invoices don't have unrealised gains and where you may have otherwise expected them.
The Connectorly unrealised FX calculation method
Connectorly calculates unrealised FX consistently across supported invoices to provide a clear, auditable, picture of FX exposure over time. Daily unrealised FX gains and losses are calculated as follows:
We use Xero’s exchange rate at the invoice date
We use the closing rate from OpenExchangeRates.org, which are accurate to six decimal places, to calculate daily movements.
We use Xero’s exchange rate at each payment date (including handling multiple partial payments)
By definition:
Unrealised FX is not final
It reflects valuation at a specific date
It will reverse (and hence sum to zero) and crystallise when payment occurs and is recorded as a realised gain or loss
Calculations are evidenced in the Journal Description which shows the source invoice, the closing rate and reporting currency valuation. For example:
Vast Eagle, Invoice Number 2243 for 712.80 NZD valued close of day at 314.46 GBP with GBP:NZD 2.266716 (latest rate on 2025-07-09, up to and including 23:59:59 UTC, source Open Exchange Rates
3. Different exchange-rate sources are used (by design)
For realised FX gains and losses, Connectorly uses Xero’s Journal records verbatim.
For daily unrealised valuations:
Connectorly uses OpenExchangeRates.org
Rates are stored at higher precision.
Rounding is applied later in the calculation process.
Xero typically stores exchange rates at 4 decimal places and may round earlier in its calculation pipeline.
These differences in rate source and rounding methodology can result in small variances.
4. Xero's same-day invoice and payment behaviour
In some cases, invoices created and paid at the same time (for example via card payments) can still result in a small realised FX journal amount in Xero.
This can occur because:
Exchange rates are retrieved at slightly different moments by Xero
Minor rounding differences trigger FX calculations
Settlement logic is event-driven rather than economically continuous
Connectorly reflects Xero’s realised FX outcome in these cases.
5. Bank Revaluations
As in the case for unrealised gains and losses, Xero doesn't provide bank revaluations through the API.
Connectorly calculates daily revaluation movements for bank accounts in a foreign currency and creates corresponding Journals and Bank Transactions.
A similar method to that for unrealised gains and losses is used. The closing rate from OpenExchangeRates.org are used for the revaluation, which are accurate to six decimal places.
Calculations are evidenced in the Journal Description and Bank Transaction Reference which shows the foreign currency bank balance, the closing rate and reporting currency valuation. For example:
Stripe EUR 12.73 balance revalued at GBP 11.18 using latest rate of GBP:EUR 1.1387583163385 on 2025-12-12 Difference of GBP 0.02 from previous valuation of 11.16 (latest rate up to and including 23:59:59 UTC, source https://openexchangerates.org)
Bank Revaluation Journals can be identified as follows:
Account Code | 498 (or whatever set in Settings) |
Account Name | Bank Revaluations (or whatever set in Settings) |
Description | For example:
Stripe EUR 50.00 balance revalued at GBP 43.28 using latest rate of GBP:EUR 1.155146693791 on 2023-10-04 Difference of GBP -0.06 from previous valuation of 43.34 (latest rate up to and including 23:59:59 UTC, source https://openexchangerates.org) |
Journal Number | Starts at 600,000,000 |
Journal Type | FX EXPOSURE |
Reference | Calculated Bank Revaluations |
Bank Revaluation Bank Transactions can be identified as follows:
Bank Transaction ID | Starts at 600,000,000 and matches the corresponding Journal Number |
Source Type | REVALUATION |
Reference | Is the same as the corresponding Journal Description |
6. What you should expect
Realised FX values match Xero
Unrealised FX provides a consistent exposure view
Bank Revaluations provides a consistent view
Small rounding differences are normal
Differences typically reverse as invoices are paid
If you notice a larger discrepancy, our support team is happy to help.
