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):

  1. Source value in native ad-account currency (Meta US account = USD; Meta IT account = EUR; etc.)

  2. Convert to EUR using the rate that applied on the transaction date

  3. Convert from EUR to target_currency using the rate on the same date

  4. Aggregate in target_currency for display

EUR-as-intermediate is a common pattern: avoids storing rates for every currency pair; only EURX 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 currency query param

Cross-Channel

target_currency mandatory; defaults to workspace

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_currency mid-comparison: confuses delta_pct — pick one, stick with it

  • Comparing 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