Brand Traffic Leakage
Finds brand search terms leaking into non-brand campaigns (inflating their stats and misleading Smart Bidding) and generic traffic riding in brand campaigns — with the misrouted spend quantified.
by Dmytro Tonkikh·chiliad.io
Overview
Brand clicks are cheap and convert well — when they leak into non-brand campaigns they flatter that campaign's CPA, mislead Smart Bidding, and hide the true cost of generic traffic. Brand Traffic Leakage scans all search terms and splits the misrouting both ways: brand-token queries served by campaigns not marked as brand (fix with brand negatives there), and non-brand queries served inside brand campaigns (fix by tightening brand keywords). Both lists come ranked by cost with the total misrouted spend quantified.
Setup
- 1Open your Google Ads account and go to Tools → Bulk Actions → Scripts.
- 2Click the + button to create a new script and paste the code below.
- 3IMPORTANT: set BRAND_TERMS to your actual brand tokens, including common misspellings.
- 4Set BRAND_CAMPAIGN_MARKER to the naming token that identifies your brand campaigns.
- 5Set EMAIL_ADDRESS to receive the report; leave blank for logs only.
- 6Preview once to verify the classification looks right, then schedule weekly.
Configuration Variables
| Variable | Default |
|---|---|
BRAND_TERMS | ['acme'] |
BRAND_CAMPAIGN_MARKER | brand |
DATE_RANGE | LAST_30_DAYS |
MIN_COST | 1 |
TOP_N | 30 |
Expected Output
=== Brand Traffic Leakage (LAST_30_DAYS) === Search terms scanned: 18342 Brand terms in non-brand campaigns: 24 terms, cost 812.40 Non-brand terms in brand campaigns: 6 terms, cost 96.20 --- LEAKED BRAND - add brand negatives to these campaigns --- "acme running shoes" in Generic — Broad cost: 240.10 clicks: 310 conversions: 18.0 "acme discount code" in Generic — Phrase cost: 121.55 clicks: 164 conversions: 9.0 --- FOREIGN TRAFFIC in brand campaigns - tighten keywords/negatives --- "best running shoes" in Brand — Exact cost: 48.20 clicks: 32 conversions: 0.0 Email sent to you@example.com
Notes
Brand tokens match as substrings, so 'acme' also catches 'acmeshop' — list generic words carefully or they'll over-match. The standard architecture this enforces: brand negatives (usually a shared list) on every non-brand campaign, and exact-ish brand keywords in the brand campaign.