Top campaigns cross-platform

Last updated: May 19, 2026

Top campaigns cross-platform

The Top campaigns cross-platform block in Cross-Channel mode ranks campaigns across all selected platforms in a single list. Backed by getTopCampaignsCrossPlatform() in apps/backend/src/services/cross-channel-analytics.service.ts. Returns TopCampaignRow[]. Sort metric configurable (spend / ROAS / conversions / CPA). Limit configurable (typically 10 / 20 / 50). Answer: "what are my top performers regardless of platform?".

Who is this for

Mediabuyers running campaigns across 2+ platforms. Especially useful when:

  • Identifying universal winners (campaigns that should get more budget across platforms)

  • Spotting cross-platform leaders (a creative concept that works everywhere)

  • Cross-platform A/B retrospectives

What the block shows

A single ranked list combining all selected platforms:

Rank

Campaign

Platform

Spend

ROAS

Conversions

CPA

1

"Spring Sale Lookalike v3"

Meta

€1.250

4.2

87

€14.30

2

"Spring Sale Brand"

Google

€980

3.8

64

€15.30

3

"Spring Sale Hashtag"

TikTok

€720

3.5

52

€13.80

...

...

...

...

...

...

...

Per row: campaign name, platform badge, spend (in target_currency), ROAS / CPA / conversions.

Configuration

Sort metric

Pick which metric drives ranking:

  • Spend — biggest spenders (current attention magnets)

  • ROAS — most profitable (scale candidates)

  • Conversions — highest-volume (top of the funnel)

  • CPA — most efficient acquisition (lowest cost per result; sort ascending)

Limit

Typically 10 / 20 / 50 campaigns shown.

Date range

Inherits from Cross-Channel page date range. Max 90 days.

How to use

"What should I scale?" question

  1. Sort by ROAS desc + limit 10

  2. Filter mentally: must have meaningful spend (not noise)

  3. Top 3-5 = scale candidates

  4. Cross-link to Ads Manager (PRD-16) → increase budget on these

"What's burning budget?" question

  1. Sort by Spend desc + limit 20

  2. Cross-reference ROAS — high spend + low ROAS = problem

  3. Decide: pause OR fix creative / targeting

Cross-platform A/B retrospective

Ran "Spring Sale" campaign on Meta, Google, TikTok with same creative + audience concept:

  1. Sort by ROAS desc + limit 50

  2. Find the 3 variants in the list

  3. See which platform won + by how much

  4. Allocate next cycle accordingly

Cross-account audit

Agency managing multiple clients in one workspace: top campaigns cross-platform shows which client's campaigns are leading. Quick health snapshot per client.

What the block doesn't tell you

  • Per-adset breakdown within campaigns — drill into Ads Manager

  • Per-creative breakdown — Single Platform → creative-performance widget

  • Why a campaign won — needs deeper investigation (audience, creative, time-of-day)

  • Audience overlap across platforms — needs Audience Hub or external analysis

Constraints

  • 90-day max date range (Cross-Channel limit)

  • 10-min Redis cache

  • Currency: target_currency

  • Feature gating: ENABLE_CROSS_CHANNEL_ANALYTICS

Use case: Monday scaling decisions

Workflow:

  1. Open Cross-Channel → date range = last_14d

  2. Top campaigns → sort ROAS desc + limit 10

  3. Identify top 3 (high ROAS + meaningful spend)

  4. Sort by Spend desc + limit 10

  5. Compare lists — top by ROAS that also has good spend = green-light scale candidates

  6. Switch to Single Platform → drill into each → identify which adset / creative is winning

  7. Apply: increase budget on winning entities (or set Rules Engine to do it automatically per PRD-17)

End-to-end: ~15-20 minutes weekly.

Cross-link to Ads Manager

Click a row → opens that campaign in Ads Manager (PRD-16) for tactical edit (pause / scale / duplicate). Top campaigns block is read-only; actions happen elsewhere.

Cross-link to Rules Engine

A campaign at the top of the ROAS list = ideal target for an "increase_budget_pct" rule. From the row: open the campaign → create a Rules Engine rule scoped to that campaign with scale logic. See rul-102.

Common mistakes

  • Sorting by ROAS without spend guard: noisy low-spend campaigns show up artificially top — visually filter by spend

  • Treating "Spring Sale Lookalike v3" + "Spring Sale Lookalike v4" as different concepts: name conventions matter — see am-108

  • Reading without context (no date range comparison): today's top may not be last month's top — compare periods

  • Acting on the block without drilling into Ads Manager: block is read-only; you need to act elsewhere

Common issues

  • Same campaign appears twice: rare; means duplicate campaign IDs across accounts (audit naming + setup)

  • Top is unexpected campaign: probably noisy ROAS on low-spend; verify spend column

  • Block empty: no campaigns met the limit threshold; broaden date range or platforms scope

  • Cross-platform mixing wrong: ensure platforms scope is what you intend

Related