Skip to content

FX rate gap at settlement

Detecting Stripe Connect FX slippage

This one is different from the other three. There is no missing flag and nothing to claw back — the conversion happened and the spread is gone. What you can do is measure it, and measurement is what turns an invisible cost into a negotiable one.

Measuring without a third-party FX feed

Comparing Stripe's rate against a mid-market feed mostly restates the fact that Stripe charges a spread. That is a pricing negotiation, not a reconciliation finding, and it adds an external dependency with its own spread to a number you need to trust.

The useful measure is relative: how did this transfer's realised rate compare to the rate the same currency pair achieved on comparable transfers the same day? That isolates outliers — the transfers where something actually went wrong.

A 1.2% deviation on $200k monthly cross-border volume
Monthly cross-border volume
$200,000
Typical spread
~0.5%
Observed on affected transfers
~1.7%
Excess cost per month
$2,400
Annualised if unchanged
$28,800
const balanceTx = await stripe.balanceTransactions.retrieve(
  transfer.balance_transaction as string,
);

// Populated only for cross-currency transfers
const realisedRate = balanceTx.exchange_rate;
const deviation = Math.abs(realisedRate - dayBaseline) / dayBaseline;

if (deviation > 0.008 && realisedRate < dayBaseline) flag(transfer.id);

Only losses, never windfalls

A conversion better than the day's baseline is a good outcome, not a discrepancy. Flagging it would be noise in a queue people are trying to work through.

The check must be directional: flag only where the realised rate is worse than baseline beyond tolerance. Symmetric deviation checks roughly double the finding count while adding nothing actionable.

What an outlier usually means

A deviation several times your normal spread rarely indicates one bad conversion. It usually indicates a misconfigured settlement currency — and that keeps costing money on every future transfer until someone changes a setting.

That is why FX findings are worth surfacing despite being unrecoverable: the individual loss is sunk, but the cause is often still live.

Reducing it

Hold a balance in the destination currency where volume justifies it. Batch cross-border payouts rather than converting per transaction. And once you can quantify annual conversion cost, negotiate it — a documented figure is the only thing that makes that conversation productive.