ClickCatalystHN TECHNICAL DEEP DIVE
Run Free Audit →

Statistical Waste Detection for Google Ads

How we use Minimum Viable Spend (MVS) thresholds and a 7-category waste taxonomy to detect silent budget leaks — without killing campaigns that are still learning.

01The Problem

Most PPC optimization tools compare your metrics to industry benchmarks and flag anything below average as "waste." This approach is fundamentally broken for one reason: a campaign that launched 3 days ago should have a terrible ROAS — it's still in Google's learning phase.

The result is a false-positive epidemic. Advertisers either panic-pause campaigns that were still gathering signal, or they ignore all alerts because the tools have cried wolf too often. Both behaviors cost money.

Google's own optimization recommendations have a well-documented conflict of interest — many of them (raise budget, enable broad match, expand audiences) directly increase your spend on Google's platform. Third-party tools that rely on benchmarks aren't much better.

ClickCatalyst takes a different approach: before classifying any waste, the system first asks whether the campaign has enough data to be judged at all.

02Minimum Viable Spend (MVS)

The core primitive is a per-campaign statistical threshold called Minimum Viable Spend. It's derived from the standard binomial sample-size formula:

sample-size formula
n = z² × p × (1 - p) / e²

where:
  n = minimum clicks needed
  z = z-score for desired confidence (1.645 for 90%)
  p = campaign's observed conversion rate
  e = acceptable margin of error (absolute)
      we use relative error: e = 0.30 × p (±30% of true CVR)

Minimum conversions: C_min = n × p
MVS (dollars):       varies by bidding strategy ↓

The critical insight: MVS adapts to the bidding strategy. A Target CPA campaign and a Target ROAS campaign need completely different spend thresholds to reach statistical significance:

strategy-specific MVS
Target CPA:   MVS = C_min × target_CPA
Target ROAS:  MVS = C_min × (avg_revenue_per_conversion / target_ROAS)
CPC-based:    MVS = n × avg_CPC   (fallback for manual/maximize-clicks)

Any campaign below its MVS gets protected — the 6 standard waste categories are suppressed. We call this The Shield. No false alarms on campaigns still building signal.

Why 2× and 3× as thresholds?
At 2× MVS with zero conversions, the probability of the campaign eventually converting at a viable rate drops below 5% under our model — statistically indefensible to keep spending. The 3× threshold for volatile-but-converting campaigns is more conservative because there IS signal, just noisy signal. Both thresholds are tunable parameters in the product.

03Worked Example

campaign: Brand Search — US
Bidding:    Target ROAS (target = 4.0x)
CVR:        3.2%
Avg CPC:    $4.50
Avg Rev/Conv: $85

Step 1 — Minimum clicks
  e = 0.30 × 0.032 = 0.0096
  n = (1.645² × 0.032 × 0.968) / 0.0096²
    = (2.706 × 0.03098) / 0.0000922
    ≈ 909 clicks
  C_min = 909 × 0.032 ≈ 30 conversions

Step 2 — MVS (dollars)
  Strategy = Target ROAS
  MVS = C_min × (avg_rev / target_ROAS)
      = 30 × ($85 / 4.0)
      = 30 × $21.25
      = $637.50

Step 3 — Classification
  Spent $400    → EXPLORATION (below MVS, protected by Shield)
  Spent $1,275  → 2× MVS, 0 conversions → BLACK HOLE ☠️
  Spent $1,913  → 3× MVS, volatile → CALIBRATION TRAP ⚠️

04Interactive Calculator

Plug in your own numbers. The calculator implements the same formula the production system runs in BigQuery daily.

▸ Interactive MVS Calculator
// Results
z-score = 1.645
abs_margin = ±1.50%
min_clicks = 572
min_conversions = 29
strategy = CPC-based ($2)
MVS = $1,144
▸ Below MVS → PROTECTED (learning tuition, not waste)
> $2,288 (2× MVS) + 0 conversions → BLACK HOLE
> $3,432 (3× MVS) + high volatility → CALIBRATION TRAP

05The 7-Category Waste Taxonomy

Once a campaign clears the MVS bar (or blows past it), waste gets classified into 7 categories. Categories 1–6 are standard waste types. Category 7 (Exploration Waste) is the MVS-derived type that most tools miss entirely.

01Query Waste

Search terms that triggered your ads but never converted. Terms with 10+ clicks and 0 conversions. Usually the single largest waste source — and the most actionable.

Signal
clicks ≥ 10, conversions = 0
Action
ADD_NEGATIVE
02Match Type Waste

Keywords where the match type works against you. Broad match with CVR below 1% (behaving like display, not search). Exact match getting zero impressions because a broad sibling cannibalizes all traffic.

Signal
broad + CVR < 1%
Action
REDUCE_BID / PAUSE
03Creative Waste

Weak RSA combinations. Ads with 1,000+ impressions but fewer than 10 clicks, or clicks but CVR under 1%. The creative doesn't match the intent.

Signal
impressions > 1K, clicks < 10
Action
PAUSE / REWRITE
04Auction/Bid Waste

Overbidding on low-value traffic. Keywords with avg CPC above $50 and zero conversions after 5+ clicks. You're winning auctions you shouldn't compete in.

Signal
CPC > $50, conversions = 0
Action
REDUCE_BID
05Structural Waste

Campaign and keyword overlap causing self-cannibalization. Ad groups with 100+ keywords competing against each other internally.

Signal
keyword_count > 100 per ad_group
Action
RESTRUCTURE
06Measurement Waste

Campaigns spending $1,000+ with zero conversions — likely a conversion tracking problem, not a campaign problem. Fix tracking before pausing.

Signal
spend > $1K, conversions = 0
Action
FIX_TRACKING
07Exploration WasteTHE 7TH WASTE

The MVS-derived category. Black Hole: zero conversions after 2× MVS (every dollar today = waste). Calibration Trap: has conversions but still volatile after 3× MVS (waste proportional to overshoot depth).

Signal
spend > 2× MVS + 0 conv, or > 3× MVS + CV > 40%
Action
PAUSE / RESTRUCTURE
The Shield in action: Categories 1–4 and 6 are suppressed for any campaign still below its MVS threshold. Only Structural (5) and Measurement (6) waste bypass the shield — because bad tracking and bad structure are problems regardless of statistical maturity.

06What This Finds in Real Accounts

The typical Google Ads account leaks 15–25% of total spend across these 7 categories. Here's what we found in one mid-size e-commerce account:

Total Waste Found
$1,400+/mo
12.2% of spend
Shopping Black Holes
5 campaigns
$0 revenue, months running
Declining Keywords
27 flagged
momentum scores −40 to −90
Biggest Single Leak
Query Waste
12.2% of total spend

The 5 Shopping campaigns had been in Google's "learning" phase for months with nobody noticing — because standard dashboards show them as "active." The MVS model classified them as Black Holes (spend >2× MVS, zero conversions). Every dollar spent daily was waste.

07Tech Stack

architecture
Frontend:    Next.js (App Router)
Backend:     Python + BigQuery
Data:        Google Ads API + GA4 via OAuth (read-only)
Pipeline:    Daily scheduled BigQuery queries
             → 90-day rolling window, keyword-level
             → maturity classification → waste detection
Auth:        Google OAuth 2.0 (read-only scopes)
ML:          None. Statistical thresholds only.
             No black-box models — every threshold
             is derived from sample-size statistics.

The entire pipeline runs once daily as scheduled BigQuery queries — no per-request compute costs on the frontend. The UI serves pre-computed results from the daily pipeline. No ML models, no neural networks — just careful statistical thresholds tuned to how Google's auction system actually behaves.

08Try It

The free waste audit connects via OAuth (read-only — we never modify your campaigns), runs the full 7-category analysis on your actual Google Ads data, and delivers results in about 60 seconds.

Run the audit on your account
Read-only OAuth. No credit card. No campaign modifications. Ever.
Connect Google Ads →
Built by a data scientist with 10+ years in marketing analytics. The methodology is transparent — scrutinize the math, not trust a black box.
Questions? Find me on HN or email: [email protected]
ClickCatalyst — Technical Deep Dive: Statistical Waste Detection for Google Ads | ClickCatalyst