What is FX rate age?
FX rate age is how old the newest European Central Bank reference rate in the warehouse is, in days. All money in the app is dual-stored — the as-reported amount plus its EUR conversion at the ECB rate for that transaction's date — so this one small number is the health check on every currency conversion the system performs.
Formula
FX rate age = today − newest rate_date in canonical.fx_rate
Worked example
The feed normally sits at 0–3 days old (ECB publishes business days only, so weekends and holidays age it slightly). After a silent loader failure it reads 9 days. Nothing visibly breaks: conversion carries forward the most recent prior rate, so a dollar ad account's spend is now converted at a rate over a week old. On a quiet week that is a rounding error; across a 3% currency move it misstates every converted figure by up to 3% — without a single error anywhere.
How Saldo Metrics computes it
canonical.fx_rate holds the ECB reference rates, loaded daily.
v_fx_rate_freshness reports the newest rate date, days_behind, and an
is_stale flag at more than 4 days — the threshold that tolerates weekends and
holiday gaps but catches a genuinely stopped feed. The view is global reference
data by design (no org scoping, like the rate table itself). The alert metric
exposes days_behind so a rule can page on it; the freshness widget shows the
same feed as its ECB row. Conversions always use the rate for the transaction's
own date, carrying forward the most recent prior rate when a date has none —
which is exactly why age matters: carry-forward degrades gracefully and
invisibly.
Why it matters
Single-currency stores barely feel this; anyone advertising in dollars or selling across currencies has FX baked into spend, ROAS and revenue figures. A stale feed biases all of them in the same direction at once, which is harder to notice than a broken number — the metrics stay plausible, just wrong together.
Common mistakes
- Reading weekend age as failure. Two or three days over a weekend is normal; the stale flag starts at five for that reason.
- Expecting an error when rates are old. Carry-forward means conversion never fails, it just quietly uses older rates; the age metric is the only symptom.
- Backfilling analysis during a stale window without re-checking. Once the feed catches up, past dates convert at their true rates — numbers computed during the gap can shift slightly after recovery.
Where you see this in the app
The ECB FX row of the Data Freshness widget, and the FX-rate-age alert metric.
- Formula
- days since the newest ECB reference rate date
- How Saldo Metrics computes it
- canonical.v_fx_rate_freshness, canonical.fx_rate
Last reviewed 2026-08-29