← all mockups
Deep-dive — all 9 tabs, the spec reference
Campaign page, one mock per tab, in tab order. Provider-neutral labels throughout. Ad-set page = same minus Funnel-below-campaign nuances, plus Setup; Ad page = Performance · Creative · Breakdowns · History.
1 · Performance — "is it doing well right now?"
PerformanceFunnelAd setsAdsBreakdownsCreativesAttributionHistoryRules
Spend 7d
$1,689
▲9% vs prior
Internal ROAS
1.94
acct median 1.18
Platform ROAS
2.31
via Meta Pixel
Spend since last purchase
$38
Daily spend · pins = changes (click → History entry)
Fatigue / auction decomposition
Diagnose: ΔROAS −0.21 this week → CTR −14% is the driver (freq ▲, CPM flat) = creative fatigue. Suggested: refresh creatives.
Also: "3 of 14 ads = 88% of spend · 40% of spend in learning" strip. Data-freshness note. Google campaigns swap frequency tiles for Impression-share (capability-driven).
2 · Funnel — "where do we lose people?"
PerformanceFunnelAd setsAdsBreakdownsCreativesAttributionHistoryRules
Landing-page views61.2K · click→view 68% vs bench 81% ⚠
LP CTA clicks19.7K · 32% ✓
Installs + web starts9.8K · 50% ✓
Purchases96 · 0.98% vs bench 1.1%
Stages join OUR data end-to-end: platform → marketing.landing_page_views (utm/campaign id) → AppsFlyer → RevenueCat. Weak step highlighted vs account benchmark; hover = period delta; per-LP split when multiple LPs; unmatched-UTM bucket as data-hygiene canary.
3+4 · Ad sets / Ads — "what's inside?" (scoped Explorer)
PerformanceFunnelAd sets (6)AdsBreakdownsCreativesAttributionHistoryRules
AllMovers (WoW Δ)Problems⚙ Columns
| Ad set | Flags | Status | Budget | Spend ▼ | CPA | Int. ROAS | Δ WoW | |
| ☐ | US-broad-18-45 | learning 37/50 | ACTIVE | —CBO | $1,102 | $16.4 | 2.10 | +0.49 | ⋯ |
| ☐ | T2-stack-25-55 | | ACTIVE | —CBO | $587 | $19.8 | 1.63 | +0.02 | ⋯ |
| ☐ | UK-lookalike-1pct | 1 disapprovedfatigued | PAUSED | $120/d | $338 | $41.2 | 0.58 | −0.31 | ⋯ |
The exact Explorer component pre-scoped — inline edits, switches, bulk bar all work. Additions vs global view: preset chips (All / Movers / Problems) and a Flags column (learning · disapproved · fatigued · rule-touched). Ads tab identical, one level down, creative thumb in row.
5 · Breakdowns — "who does it work for?"
PerformanceFunnelAd setsAdsBreakdownsCreativesAttributionHistoryRules
CountryAge × GenderPlacement · Device☠ Waste view
| Country | Spend · share | CPM | CTR | Purch.* | ROAS* | Δ vs prior 7d |
| 🇺🇸 US | $918 · 54% | $18.4 | 7.9% | 51 | 2.51 | +0.22 |
| 🇬🇧 UK | $342 · 20% | $14.1 | 6.8% | 18 | 2.06 | −0.61 ⚠ |
| 🇦🇺 AU | $192 · 11% | $11.2 | 6.2% | 9 | 1.61 | −0.34 |
* platform-reported (attribution can't split this fine — stated in-UI). Δ column = period comparison per segment. ☠ Waste view = segments with spend > $X and 0 purchases, sorted — the kill-list. Dimensions come from the provider's capability list (Google Search adds Keyword/Search-term; a Keywords TAB appears for Search campaigns).
6 · Creatives — "which videos carry it?"
PerformanceFunnelAd setsAdsBreakdownsCreatives (9)AttributionHistoryRules
GalleryTablesort: spend ▼
▶SCALING
nerd_escort_hook3_v26d · 2 ads · $744int 2.41
hook 31% (med 24%)CP-p $15.2
▶FATIGUING
nerd_escort_hook119d · 3 ads · $1.9kint 1.52
CTR −38% · freq 3.1
▶DEAD
hook2_cut21d · $201int 0.3
$83 since last purch.
One card per ASSET (not per ad — same video in 6 ads rolls up). Poster from creative payload; click-to-play = on-demand preview iframe. Lifecycle tag from spend + trend. Google Search shows RSA assets + strength labels here instead (capability-driven).
7 · Attribution — "is the money real?"
PerformanceFunnelAd setsAdsBreakdownsCreativesAttributionHistoryRules
Cohort ROAS maturation (hatched = immature, ◌ = projected)
| Cohort wk | D7 | D30 | proj D90 | payback | refund% |
| Jun 22 | 0.71 | 1.08 | 1.41 | D26 | 2.1% |
| Jul 6 | 0.74 | ◌1.12 | ◌1.46 | ◌D24 | 1.4% |
Revenue paths (30d)
| Web funnel | $9,834 · 78% |
| App (AF) | $2,771 · 22% |
Three lenses (30d)
| Lens | Revenue | ROAS |
| Platform-reported | $14,102 | 2.18 |
| Internal first-touch | $12,605 | 1.95 |
| AF cohort D30 | $6,921 | 1.07 |
Divergence sentinel: platform/internal ratio trending ▲ = platform over-claiming. Net of refunds. Internal lens floors at campaign grain — never faked below.
8 · History — "who changed what, did it help?"
PerformanceFunnelAd setsAdsBreakdownsCreativesAttributionHistoryRules
AllHumansPlatformRules📝 Add note
Greg budget
$200 → $250 · Jul 11 09:41
3d before: ROAS 2.10 · CPA $16.4→3d after: 1.64 · $21.0
rule* scale-winners budget
$180 → $200 · Jul 8
trigger: ROAS 2.3 > 2.0 (3d)
before: 2.28→after: 2.31
Meta approved nerd_escort_hook4 · Jul 8
Dan 📝 "testing new LP variant" · Jul 7
Sources: platform changelog (meta_activities) + our action ledger (P2) + rule log (P3) + team notes. Impact card = 3d pre/post. Providers with no changelog API (TikTok/Snap) show internal-only + a banner.
9 · Rules (Phase 3) — "what automation watches this?"
PerformanceFunnelAd setsAdsBreakdownsCreativesAttributionHistoryRules
stop-loss-v1 watches 6 ad sets
Pause ad set if spend(today) > $100 AND purchases(today) = 0
Closest: UK-lookalike $87/$100, 0 purchases
scale-winners-v2 last fired Jul 8 · cooldown 41h
+15% budget if Int. ROAS(3d) > 2.0 AND spend > 80% budget · cap $500/d · 1×/72h
Per-entity: proximity-to-trigger meters · exclusion switch · backtest ("would have fired 3× in 14d") · actions link into History · rule pins on the Performance chart.
A
All 9 tabs locked — write the spec
This screen is the spec's visual reference for the deep-dive.
B
Adjust a tab
Name the tab # in the terminal.