All templatesAudits30 minutesUpdated 3 May 2026

Branded Search Bleed Audit

The report that tells you what percentage of your 'Google Ads revenue' is actually branded search.

Who this is for

  • Founders sceptical of their dashboard ROAS
  • CFOs asking about incremental revenue
  • New operators inheriting an account with high reported ROAS

Why this exists

Most ecom accounts report a healthy ROAS that quietly hides the fact that 60-80% of clicks come from people typing the brand name. This audit splits brand from non-brand cleanly so you can see what your ad spend is actually buying you.

Read this first

If your dashboard says 6x ROAS and your bank balance disagrees, the gap is almost always branded search. The buyer who Googles your brand name was already going to convert; routing them through paid ads buys traffic you would have captured organically and reports it as paid revenue. This audit splits the two streams so you can see what your spend is actually doing.

How to run the audit

  1. Pull the search-terms report for every Search and PMax campaign

    Trailing 28 days minimum, 60 if you have the volume. Export to a sheet. PMax doesn't expose all search terms; for PMax, export the search-themes performance and the asset-group-level conversions instead. The headline number you want is the share of conversions tied to queries that contain your brand name or any close variant.

  2. Tag every query as brand or non-brand

    Build a brand list: exact brand, brand variants, common misspellings (pull from Search Console top queries), brand+product combos, brand+location, branded competitor terms (competitor + alternative). Tag any query that contains any term from the list as brand. Everything else is non-brand. The split is now cleanly visible at row level.

  3. Compute true non-brand ROAS

    Sum revenue and spend for the non-brand rows only. Divide. That's the number your CFO actually wants. Compare to the dashboard ROAS Google reports. The gap is your branded-search bleed.

  4. Decide on structure: separate, exclude, or split campaign

    If branded share is below 25% of total clicks: leave it alone, the bleed is small enough to ignore. 25-50%: carve branded into a dedicated low-budget Search campaign so non-brand campaigns optimise against incremental traffic. Above 50%: full structural split is mandatory, plus brand exclusions across PMax / AI Max so they don't re-acquire the brand stream you just isolated.

Brand-share thresholds and the structural fix

Working benchmarks across the ecom accounts Ad-Lab audits. Calibrate against your own attribution stack before acting on the boundary cases.

Branded share of revenueWhat it meansStructural fix
Below 25%Healthy. Your non-brand engine is doing the work. Branded keywords are a small protective layer.Leave structure alone. Set a low daily cap on the branded campaign and watch monthly.
25-50%Common in mid-stage ecom. The dashboard inflates non-brand performance by ~1.3-1.6x.Carve branded into a dedicated low-budget Search campaign. Add brand exclusions to PMax / AI Max so they stop eating brand traffic.
50-75%The brand is doing the heavy lifting. Most paid revenue would have happened organically.Full split. Branded campaign capped tight. PMax / AI Max with hard brand exclusions. Re-baseline non-brand ROAS targets to match the new ground truth.
Above 75%Your dashboard is mostly a brand-search reporter. Real non-brand acquisition is small.Same as 50-75% plus consider if paid is even needed. Geo-holdout test the brand layer to confirm it's not pure cannibalisation of organic traffic.

True non-brand ROAS calculator (sheet formula)

Drop into a Google Sheet alongside your search-terms export. Tag column already populated with brand / non-brand from step 2.

text
# Inputs (per row of the search-terms export)
A   = query string
B   = clicks
C   = cost (spend)
D   = conversions
E   = conversion value (revenue)
F   = brand_or_nonbrand   (set in step 2)

# Pivot summary
brand_spend     = SUMIF(F:F, "brand", C:C)
brand_revenue   = SUMIF(F:F, "brand", E:E)
brand_conv      = SUMIF(F:F, "brand", D:D)

nonbrand_spend  = SUMIF(F:F, "nonbrand", C:C)
nonbrand_rev    = SUMIF(F:F, "nonbrand", E:E)
nonbrand_conv   = SUMIF(F:F, "nonbrand", D:D)

# Headline metrics
dashboard_roas  = (brand_revenue + nonbrand_rev) / (brand_spend + nonbrand_spend)
true_nonbrand_roas = nonbrand_rev / nonbrand_spend
bleed_factor    = dashboard_roas / true_nonbrand_roas

# bleed_factor of 1.0  = no bleed (you're seeing the truth)
# bleed_factor of 1.4  = dashboard overstates non-brand ROAS by 40%
# bleed_factor of 2.0+ = your reported ROAS is mostly brand search

Brand-exclusion list to deploy alongside the audit

  • Exact brand term plus all common spellings
  • Brand-plus-domain variants (yourbrand.com, yourbrand.io, www.yourbrand.com)
  • Brand misspellings pulled from Search Console top 1,000 queries
  • Brand-plus-product combos for every flagship SKU
  • Brand-plus-location terms (yourbrand uae, yourbrand london, yourbrand near me)
  • Branded competitor terms (competitor + alternative, competitor vs yourbrand)
  • Brand-plus-review intent (yourbrand reviews, yourbrand worth it, yourbrand vs)
  • Brand-plus-buy intent (buy yourbrand, yourbrand discount, yourbrand promo code)

What good looks like after the fix

Branded campaign is isolated and capped at the budget needed to defend the SERP. Non-brand campaigns report their true ROAS and optimise against incremental traffic only. PMax / AI Max have brand exclusions populated so the bleed doesn't return through the side door. Your reported channel ROAS goes down on paper. Your blended MER stays flat. The CFO is happy because the numbers now reconcile.

External resources

Authoritative references we link to alongside the template. Read them before running the audit.

Want this run for you?

Apply for a free audit. Patrick walks you through the most- relevant sections against your real account.