Drill-down from campaign to ad set to ad

Click campaign to expand into ad sets, click ad set to expand into ads. Per-level metrics + actions. Identify which adset or ad is driving issue.

Written By Salvatore Sinigaglia

Last updated About 4 hours ago

Click campaign to expand into ad sets, click ad set to expand into ads. Per-level metrics + actions. Identify which adset or ad is driving issue.

Drill-down from campaign to ad set to ad

Ads Manager's 3-tier hierarchy lets you navigate from campaign → ad sets → ads. Drill-down switches the whole table to the next level (campaigns → adsets → ads) — clicking a campaign row changes the view to that campaign's ad sets (via setLevel), and a breadcrumb takes you back up. It's a level switch, not an inline indented tree that expands children in place. Per-level metrics + actions per row. Critical for troubleshooting: "campaign ROAS is 1.5x — which ad set is dragging it down? Which ad within that ad set?"

Who is this for

Mediabuyers investigating underperformance. Anyone wondering "the campaign looks bad, but is it ALL ad sets or just one"?

The hierarchy

Campaign C1 (ROAS 1.5)              ← campaign-level rollup├── Adset A1 (ROAS 2.8)              ← good│   ├── Ad 1 (ROAS 3.2)              ← winning│   └── Ad 2 (ROAS 2.3)              ← decent├── Adset A2 (ROAS 0.8)              ← bad│   ├── Ad 3 (ROAS 0.6)              ← losing│   ├── Ad 4 (ROAS 1.0)              ← break-even│   └── Ad 5 (ROAS 0.9)              ← losing└── Adset A3 (ROAS 1.2)              ← below target    ├── Ad 6 (ROAS 1.1)              ← below    └── Ad 7 (ROAS 1.3)              ← marginal

The campaign's 1.5x ROAS hides three different situations. Action plan emerges from drill-down:

  • Adset A1: scale (winning)
  • Adset A2: kill (losing)
  • Adset A3: refresh creative or kill (marginal)

Per-ad granularity refines further (kill Ad 3, keep Ad 4 even if break-even — has potential).

How to drill down

Step 1: Find the campaign in Ads Manager

Filter / search to the campaign of interest.

Step 2: Click the row to drill in

Click anywhere on the campaign row (not on a per-row action button). The table switches to the ad-set level for that campaign (its ad sets replace the campaign list), with a breadcrumb showing where you are.

Step 3: Drill into ad sets

Click an ad set row → the table switches to the ad level for that ad set. Use the breadcrumb to step back up to campaigns or ad sets.

Step 4: Per-ad detail

Open an ad's detail to see:

  • Full creative (image / video preview)
  • Full copy (primary text, headline, description, CTA)
  • Audience config snapshot
  • Performance breakdown
  • Actions (pause via inline toggle; "edit" opens the Campaign Creator Pro editor; duplicate)

Per-level metrics

LevelMetrics that matter most
CampaignTotal spend, overall ROAS, total conversions (rollup)
Ad SetPer-audience ROAS, CPA, frequency, audience size estimate
AdCTR, conversion rate per ad, creative fatigue indicators

Drilling down narrows from macro view (campaign-level decision) to creative-specific (which ad to keep).

Endpoints behind the drill-down

Verified apps/backend/src/routes/api/:

  • insights-campaigns.route.ts → campaign-level metrics
  • insights-adsets.route.ts → ad set-level metrics
  • insights-ads.route.ts → ad-level metrics
  • insights-sync.route.ts → sync trigger

Per-level data fetched lazily as you expand (not all loaded upfront).

Drill-down for specific use cases

"Which ad set in this campaign is converting?"

  1. Open campaign
  2. Expand ad sets
  3. Sort by Conversions descending
  4. Top ad sets are the converters

"Which ad in this winning ad set is the actual winner?"

  1. Expand the ad set
  2. Sort by ROAS descending (or CTR if conversion data sparse)
  3. Top ad is your winner — scale it up

"Which creative is the worst?"

  1. Drill into an ad set with many ads
  2. Sort by CTR ascending OR by conversions ascending
  3. Bottom ad = candidate to pause

"Where is spend going within a campaign?"

  1. Expand campaign + ad sets
  2. Sort ad sets by Spend descending
  3. Top spend = where most money flowing (often a CBO winner)

"Which audience is underdelivering?"

  1. Drill into ad sets
  2. Look at delivery columns (Impressions vs Reach)
  3. Low impressions = audience too narrow or bid too low
  4. Action: broaden audience or increase bid

Cross-level actions

ActionWhere applicable
Pause / ResumeCampaign, Ad Set, or Ad (inline status toggle)
Edit budgetAd Set (ABO) daily budget — inline cell edit (CBO/lifetime are read-only)
Edit targetingOpens the Campaign Creator Pro editor (audience lives at ad-set level)
Edit creativeOpens the Campaign Creator Pro editor (ad level)
DuplicateCampaign, Ad Set, or Ad (am-106)
Add new ad / ad setNavigates to the Campaign Creator (`/campaign-creator/add-ad

Cascade behavior: pause campaign → all ad sets + ads also pause. Pause ad set → all ads in that ad set pause. Pause ad → only that ad pauses.

Level tabs + breadcrumb

The view is one level at a time (campaigns, ad sets, or ads), selected by level tabs / drill-down. A breadcrumb shows your current path (e.g. Campaign › Ad set) and lets you jump back up a level. There is no "expand all" that shows every level inline at once.

Mobile drill-down

Mobile UI (mobile-ads-manager.tsx) supports drilling with simplified controls:

  • Tap a row to drill into the next level
  • Per-row swipe actions for pause/resume
  • Full edit requires desktop

Performance considerations

  • Campaign-level data: cached aggressively (5 min)
  • Ad set + ad data: fetched on expand (1-3 sec lazy load)
  • For very large hierarchies (1000+ ads in one campaign): pagination within the ad list

What you'll see during drill-down

  • A breadcrumb showing your current level/path
  • The table showing rows for the current level only (campaigns, or ad sets of a campaign, or ads of an ad set)
  • Hover row → action controls appear (inline status toggle, etc.)
  • Click a row → drill into the next level
  • Per-row selection checkbox (for bulk actions; actions are level-scoped)

Common issues

  • "Drilling in shows nothing": the parent may have no children (ad set with 0 ads). Check the ad set was created with at least one ad.
  • "Wrong metrics on ad set vs campaign rollup": campaign aggregates ad sets; sometimes ad set data is stale and campaign refreshed (15-min sync lag). Refresh both.
  • "Cannot find an ad I expected": it may be filtered out; check your status/date filters.

Best practices

Always drill before bulk action

Before pausing a campaign, drill in. Maybe one ad set is great + you'd kill it by killing the campaign. Drill to identify just the bad ad set + pause that instead.

Use drill to identify scale targets

Same approach: drill to find the ONE ad in a winning ad set that's the actual winner. Scale that one with higher budget; pause the rest.

Document findings in audit-friendly notes

When you pause something via drill, note WHY in a comment field (if available) OR in your team's runbook. Future you will thank you.

FAQ

How do I drill down from a campaign to its ad sets and ads in Wevion?

Click a campaign row in Wevion's Ads Manager and the table switches to that campaign's ad sets (a level switch, not an inline expand). Click an ad set row to switch to its ads, and use the breadcrumb to step back up. Open an ad's detail for the full creative, copy, audience config, and performance breakdown.

What happens when I pause a campaign during drill-down?

Pausing cascades down the hierarchy. In Wevion's Ads Manager, pausing a campaign also pauses all of its ad sets and ads. Pausing an ad set pauses all ads within that ad set, while pausing a single ad affects only that ad. Drill in first to pause just a bad ad set instead of killing the whole campaign.

How is the hierarchy displayed — as one big tree?

No. Wevion's Ads Manager shows one level at a time (campaigns, ad sets, or ads) and switches level as you drill, with a breadcrumb to go back up. There is no single inline tree that expands every level at once. Campaign-level data is cached (5 minutes); ad-set and ad data load when you drill into them.

Why does drilling in show nothing on some rows?

The parent likely has no children — for example, an ad set with 0 ads. Confirm the ad set was created with at least one ad. If an expected ad is missing, check your status and date filters.