Exchange rates per day — multi-currency analytics
Last updated: May 19, 2026
Exchange rates per day — multi-currency analytics
Wevion converts spend from native ad-account currency to a target_currency for cross-platform aggregation. EUR is the intermediate currency. Per-day rates: each transaction is converted at the rate that applied on the day it occurred, not today's rate. Implication: viewing 30 days in USD shows historically-accurate USD values per day, not a flat conversion.
Who is this for
Mediabuyers / agencies running ads in multiple currencies (e.g. EUR for IT clients, USD for US clients, GBP for UK). Anyone wondering why Wevion shows a slightly different total than naïve "apply today's FX rate" math.
How currency conversion works
For each transaction (impression / click / spend / conversion):
Source value in native ad-account currency (Meta US account = USD; Meta IT account = EUR; etc.)
Convert to EUR using the rate that applied on the transaction date
Convert from EUR to
target_currencyusing the rate on the same dateAggregate in
target_currencyfor display
EUR-as-intermediate is a common pattern: avoids storing rates for every currency pair; only EUR↔X rates needed.
Per-day rates (not "today's rate")
Critical: each transaction is converted at the historical rate for its transaction date.
Example: I view "Last 30 days" in USD with a Meta IT account (EUR):
Spend on day 1 of window: €100 → converted at day-1 USD/EUR rate
Spend on day 15: €100 → converted at day-15 USD/EUR rate
Spend on day 30: €100 → converted at day-30 USD/EUR rate
Total: sum of per-day USD values, NOT €3000 × today's USD/EUR rate
Why this matters: FX rates fluctuate. A "flat today's rate" conversion would misrepresent what was spent + earned historically.
target_currency parameter
Every analytics endpoint accepts target_currency:
Default: workspace currency setting
Configurable: per session / per endpoint call
Affects: all aggregated values + comparison deltas
Workspace settings: /settings → Workspace → Default currency. Change here for default; override per session in URL / UI.
Common currency pairs
The most-used:
EUR (workspace default for many EU-based workspaces)
USD (US-based + global)
GBP (UK-based)
BRL (LATAM)
AUD (APAC)
All work via EUR intermediate.
Source of FX rates
Wevion ingests FX rates daily:
Source: typically central bank feeds (ECB) or commercial FX providers
Update: daily — once per day's close
Coverage: major + most regional currencies; exotic currencies may have less precision
For audit: rates stored in exchange_rate table (verified in Prisma).
Implications for analytics
Cross-Channel KPI strip
When viewing Cross-Channel with target_currency = USD:
Meta US account spend: shown in USD natively
Meta IT account spend: converted EUR → EUR (no change) → USD via day rate
Total cross-account in USD: aggregated
Period comparison
Comparing last 30 days vs prior 30 days: each side uses its own per-day rates. Small variance possible if FX moved between the periods.
Export reports
PDF / CSV export shows values in target_currency (consistent with on-screen). The export includes the date range covered.
Account stats
account-stats endpoint aggregates per-account → roll-up to workspace default currency.
Single Platform vs Cross-Channel currency handling
Mode | Currency behavior |
|---|---|
Single Platform | Native ad-account currency by default; can override with |
Cross-Channel |
|
For Single Platform per-account drill: stay in native currency for fewer surprises.
For multi-account / multi-platform aggregation: use Cross-Channel + target_currency.
Edge cases
Newly added currency
Workspace switches default currency from EUR to USD: historical data is re-rendered in USD (using historical rates). No data loss; just relabeled.
Account with unsupported currency
Very rare. If an ad account uses a currency Wevion doesn't have rates for: account excluded from cross-channel aggregation with a warning. Single platform view still works in native currency.
Postback in different currency than spend
E.g. spend in EUR, purchase value reported by tracker in USD: both converted to target_currency via their respective per-day rates. ROAS aggregation handles this correctly.
Hyperinflation currencies
Currencies with extreme daily fluctuation may show large day-to-day variance in totals. Expected behavior of per-day rates.
When NOT to use multi-currency
For workspaces running in a single currency (e.g. one EU agency, all EUR accounts): target_currency doesn't materially change anything. Just use workspace default.
For agencies running same brand across multiple geos in different currencies: critical to set target_currency explicitly for consistent reporting.
Common mistakes
Expecting today's-rate math to match: per-day rates differ from naïve flat conversion
Switching
target_currencymid-comparison: confuses delta_pct — pick one, stick with itComparing Wevion total to platform UI total: platform shows native; Wevion may convert. Use Single Platform in native to match exactly.
Forgetting to set workspace default: the default currency defaults to USD or EUR depending on deployment; explicitly set yours
Common issues
Total looks off by a few %: FX variance between the platform's reporting rate and Wevion's stored rate; small variance expected
Old data shows "rate not available": very rare; FX feed gap; contact admin
target_currency option missing in UI: workspace is single-currency or older deployment; admin needs to enable multi-currency
Related
Data freshness — broader freshness picture
Date ranges, timezones, currency — Ads Manager companion
Account summary — account-stats endpoint