Channel comparison matrix
getChannelComparison service. Per-platform metrics side-by-side in a sortable matrix. Spend / ROAS / CPA / CPC / CTR / conversions per row.
Written By Salvatore Sinigaglia
Last updated About 4 hours ago
getChannelComparison service. Per-platform metrics side-by-side in a sortable matrix. Spend / ROAS / CPA / CPC / CTR / conversions per row.
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()inapps/backend/src/services/cross-channel-analytics.service.ts. ReturnsChannelComparisonRow[]— 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:
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_currency - Auth:
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
FAQ
What does the Channel comparison matrix show?
The Wevion Channel comparison matrix shows per-platform metrics side-by-side in a sortable table, with one row per selected platform. Each row lists spend, ROAS, CPA, CPC, CTR, and conversions for the selected date range in your target_currency. It's backed by getChannelComparison() and answers "which platform performs best on metric X right now?".
How do I find the best-performing platform?
Sort the Channel comparison matrix by ROAS descending to surface the most profitable platform at the top row, or sort by CPA ascending for lead-gen campaigns where lowest cost per acquisition wins. Always read ROAS together with spend — a high ROAS on tiny spend is an unvalidated test, not a proven winner.
Why are some platforms missing rows in the matrix?
By design, the Channel comparison matrix includes a platform only if its spend in the scope is greater than zero. Platforms with no spend in the selected window are excluded, so empty rows simply mean that platform wasn't active for that date range.
How do I decide whether to scale or kill a platform?
Use the matrix's scale-or-kill framework: if a platform's ROAS exceeds target by 1.2× with meaningful spend, scale it; if ROAS is below half the target with meaningful spend, kill it; anything in between means keep it and optimize creative. Pair with the Budget recommendation block for the rule-based optimal.
Why do the matrix numbers differ from a platform's native UI?
Small differences are expected because the Channel comparison matrix converts all metrics to your target_currency and applies unified attribution across platforms. Sorting by CTR can also look odd when percentages sit close together, since small differences get amplified in the ordering.