Channel mix — donut explained

getChannelMixTrend service. Donut: current per-platform spend share. Stacked area: trend over time. 90-day max. Spot budget concentration.

Written By Salvatore Sinigaglia

Last updated About 5 hours ago

getChannelMixTrend service. Donut: current per-platform spend share. Stacked area: trend over time. 90-day max. Spot budget concentration.

Channel mix — donut explained

The Channel mix block in Cross-Channel mode shows per-platform spend share as a current donut + trend over time as a stacked area chart. Backed by getChannelMixTrend() in apps/backend/src/services/cross-channel-analytics.service.ts. Returns ChannelMixTrendPoint per day per platform. Use to spot concentration ("Meta consuming 80% of spend") or drift over time ("we silently shifted to Google last month").

Who is this for

Mediabuyers + admins making cross-platform budget allocation decisions. PMs auditing where spend went last month.

What's in the block

The donut chart

Current spend share at the right edge of the date range:

SlicePlatform% of total spend
LargestMeta45%
NextGoogle30%
NextTikTok20%
SmallestTaboola5%

Each slice colored consistently per platform across all Wevion analytics views.

The trend (stacked area)

Same data over time:

  • X-axis: dates within selected range
  • Y-axis: % share (stacked to 100%) OR absolute spend (stacked)
  • Each band = one platform
  • Watch for: shifts in band thickness over time = budget reallocation events

How to read it

Current share

Read the donut. Identify:

  • Concentration: one platform > 60-70% = high concentration; risk if that platform falters
  • Diversification: 25/25/25/25 = healthy diversification; may dilute optimization
  • Outliers: one platform <5% = either unused (consolidate) or a test (note)

Trend over time

Read the stacked area. Identify:

  • Smooth bands = stable allocation, deliberate
  • Step changes = a budget shift on a date (intentional or accidental)
  • Drift = gradual change you didn't notice (Meta's auto-scaling caused share creep)

Cross-reference with calendar: did the shift coincide with a planned change?

Companion blocks

The Channel mix block doesn't tell you whether the mix is good — only what it is. Pair with:

  • Channel comparison (an-108) — per-platform performance side-by-side. Tells you whether each platform's share is earning its keep.
  • Budget recommendation (an-109) — rule-based suggested allocation based on performance. Tells you what the share should be.

Sequence: Channel mix (what is) → Channel comparison (how is each performing) → Recommendation (what should change).

Use cases

Weekly allocation review

Look at current share vs last week's share. Did anything shift? Was it intentional?

Quarterly executive report

Donut + trend chart export → exec sees diversification + recent shifts at a glance.

Onboarding a new client

For agencies: show the client's current channel mix as a starting baseline. Set expectations for how it'll evolve.

Identifying budget leaks

Spending on a platform with no campaign activity = leak (orphan adsets, rogue automation, manual unfinished pause). Donut surfaces unexpected slices.

Constraints

  • 90-day max date range (Cross-Channel limit)
  • 10-min Redis cache (cca:v2: prefix) — small lag possible
  • Currency: all spend in target_currency (EUR intermediate)
  • Feature gating: ENABLE_CROSS_CHANNEL_ANALYTICS flag required

How donut + trend differ visually

DonutTrend
Snapshot at end of date rangeDistribution over date range
Single number per platformTime-series per platform
Easy to grasp current stateEasy to spot changes
Bad for change-over-timeBad for current-state-only

Use both. Donut for "where are we now"; trend for "how did we get here".

Common mistakes

  • Reading the donut and assuming it's been stable: check trend before concluding
  • Confusing % share with $ amount: same % can hide growing or shrinking absolute spend
  • Reading channel mix without channel comparison: high % doesn't mean good performance
  • Expecting real-time updates: 10-min cache + 15-min sync lag = up to 25-min delay

Common issues

  • One platform missing from donut: no spend on that platform in window OR platform not selected in scope
  • Donut total < 100%: rounding; should be very close
  • Trend looks flat: small range or stable allocation — try a longer window
  • Numbers different from platform UI: cross-channel converts to target_currency; tiny FX variance expected

FAQ

What does the Wevion Channel mix block show?

The Wevion Channel mix block shows per-platform spend share two ways: a donut chart of current share at the end of the date range, and a stacked area chart of that share as a trend over time. It's backed by getChannelMixTrend() and helps you spot concentration or drift in how budget is distributed across platforms.

When should I use the donut versus the trend chart?

Use the donut for "where are we now" — it's a snapshot of current spend share per platform, easy to grasp at a glance. Use the stacked area trend for "how did we get here" — it shows distribution over the date range and makes budget shifts, step changes, and gradual drift visible.

How do I spot budget concentration in the Channel mix?

Read the donut: one platform above roughly 60-70% of spend signals high concentration, which is risky if that platform falters. A balanced split like 25/25/25/25 is healthy diversification, and any platform under 5% is either unused or a small test worth noting.

Why is a platform missing from the donut?

A platform is absent from the Channel mix donut when it had no spend in the selected window, or when it wasn't included in the platforms scope for the query. If the donut total looks slightly under 100%, that's just rounding and should be very close.

Does the Channel mix tell me if my mix is good?

No — the Channel mix block only tells you what the mix is, not whether it's good. Pair it with the Channel comparison block to see whether each platform's share is earning its keep, and with the Budget recommendation block to see what the share should be.