Channel comparison matrix
Last updated: May 19, 2026
Channel comparison matrix
The Channel comparison block in Cross-Channel mode shows per-platform metrics side-by-side in a sortable matrix. Backed by getChannelComparison() in apps/backend/src/services/cross-channel-analytics.service.ts. Returns ChannelComparisonRow[] — one row per platform with spend, ROAS, CPA, CPC, CTR, conversions. Answers "which platform performs best on metric X right now?".
Who is this for
Mediabuyers comparing platforms at a glance. Especially valuable when deciding budget reallocation or scoping a test campaign on a new platform.
What the matrix shows
A table with one row per selected platform:
Platform | Spend | ROAS | CPA | CPC | CTR | Conversions |
|---|---|---|---|---|---|---|
Meta | €4.500 | 2.8 | €18.50 | €0.42 | 1.8% | 243 |
€3.200 | 1.9 | €25.10 | €0.65 | 2.1% | 127 | |
TikTok | €2.100 | 3.4 | €15.20 | €0.28 | 2.5% | 138 |
Taboola | €800 | 1.2 | €42.00 | €0.15 | 0.9% | 19 |
Sortable by any column (click header).
Per platform: all values reflect the selected date range + target_currency conversion.
How to read it
Sort by ROAS desc
Identifies the most profitable platform right now. Top row = your highest-ROAS channel.
Sort by spend desc
Identifies where most budget is going. Top row = largest channel.
Compare ROAS + spend together
The winning play is high ROAS + meaningful spend. A platform with ROAS 5 but spend €50 means it's working in a small test — not yet validated at scale.
Compare CPA across platforms
For lead-gen / non-purchase campaigns: CPA is the headline. Sort by CPA asc. Best (lowest) at the top.
Compare CTR + CPC together
CTR = engagement; CPC = cost. Best: high CTR + low CPC = engaged audience at efficient cost. Worst: low CTR + high CPC = wasting reach.
Single-screen decision frameworks
"Scale or kill?" decision
For each platform:
ROAS > target × 1.2 AND spend > meaningful → scale
ROAS < target × 0.5 AND spend > meaningful → kill
ROAS in between → keep, optimize creative
"Test or skip a new platform?" decision
Looking at a platform you're not currently running:
High CTR on competitors → audience exists, worth testing
Low CTR everywhere → audience problem, fix targeting first
(For new platforms: cross-link to PRD-13 ad platform integrations for connection.)
"Reallocate budget" decision
Combine with an-109 budget recommendation: comparison shows current state; recommendation shows the rule-based optimal.
Compare against previous period
Enable Compare to previous period toggle: each cell shows delta_pct alongside current value.
Green delta = improvement direction (ROAS up, CPA down, etc.)
Red delta = regression direction
Useful for: "is this platform getting better or worse?" beyond just today's snapshot.
Constraints
90-day max date range (Cross-Channel limit)
10-min Redis cache (
cca:v2:prefix)Currency: all metrics in
target_currencyAuth:
ROLE_GROUPS.DASHBOARD+app.apiKey('insights')Feature gating:
ENABLE_CROSS_CHANNEL_ANALYTICSflag
What it doesn't tell you
The matrix is aggregated — it doesn't expose:
Per-campaign breakdown within a platform → use top campaigns cross-platform for that
Per-audience or per-creative breakdown → use Single Platform mode + creative-performance widget
Why a platform is performing the way it is → drill into the platform's own dashboard or Ads Manager
Use cases
Monday morning health check
5-minute scan: sort by ROAS desc, look for changes. Decide where to focus the week.
Pre-budget-meeting prep
Export the matrix + comparison delta to a CSV for client / leadership review.
Cross-platform A/B retro
Ran same creative on Meta vs TikTok: comparison matrix shows which won on key metrics.
Quarterly channel-strategy retro
90-day window + previous period comparison = each platform's quarter-over-quarter trajectory.
Common mistakes
Sorting by spend without checking ROAS: the platform with most spend isn't necessarily the best — it's just the most utilized
Single-row reading: comparison's value is the comparison; don't read a row in isolation
Ignoring spend column when comparing ROAS: low-spend ROAS is noisy; high-spend ROAS is signal
Expecting the matrix to tell you what to do: it shows state, not action — pair with budget recommendation + your strategy
Common issues
Empty rows for platforms with no spend: by design — included only if scope spend > 0
Numbers differ from platform native UI: currency conversion + attribution window differences; small variance expected
Sort by CTR shows weird order: CTR % values close together; small differences amplified
Related
Channel mix — paired "where is spend going" view
Budget recommendation — what mix should be
Comparing periods — period-over-period mechanics