ClickCatalyst
Back to PMax Audit
Authority Layer · 14 metrics · 15 data sources

Inside the PMax Diagnostics Engine

Every metric in your audit is derived from a documented formula and a specific BigQuery table. This page explains the exact calculation logic, thresholds, and data sources — so you know precisely what each number means before acting on it.

Data Sources

read-only OAuth · no campaign changes ever

All data is read via Google Ads API. Derived intelligence tables are pre-computed in our pipeline before your audit runs.

Google Ads API — Campaign Performance

google_ads_campaign_performance

Currency settings, account-level spend, campaign metadata

Google Ads API — PMax Channel Impressions

google_ads_pmax_channel_impressions

Impression share breakdown by channel type (Search, Shopping, Display, Video)

Google Ads API — PMax Placement Performance

google_ads_pmax_placement_performance

Placement-level impression data with network segmentation for junk placement detection (Mobile Apps, YouTube Channels, Websites)

Google Ads API — Shopping Performance

google_ads_shopping_performance

Product-level spend, clicks, units sold, and gross profit for zombie and margin eater detection

Google Ads API — Budget Recommendations

google_ads_budget_recommendations

End-of-month spend projections, recommended budget amounts, and estimated weekly cost changes per campaign

Google Ads API — Budget Details

google_ads_budget_details

Campaign budget names, amounts, delivery methods, and shared budget configurations

Google Ads API — Audience Performance

google_ads_audience_performance

First-party audience list performance including remarketing segments, customer lists, and conversion data for exclusion recommendations

Google Ads API — Age Demographics

google_ads_age_demographics

Impression, click, conversion, and cost breakdowns by age range for PMax campaigns

Google Ads API — Gender Demographics

google_ads_gender_demographics

Impression, click, conversion, and cost breakdowns by gender for PMax campaigns

Derived Intelligence — Waste Management

waste_management_intelligence_daily

Pre-calculated Black Box Tax, waste categories, leakage rate, and recovery potential

Derived Intelligence — Asset Group

pmax_asset_group_intelligence_daily

Asset group spend, conversions, ad strength, concentration status, and creative fatigue signals

Derived Intelligence — Signal Health

signal_health_intelligence_daily

Cross-platform attribution drift between Google Ads and GA4 conversions

Derived Intelligence — Campaign Maturity

campaign_maturity_daily

90-day learning stage classification, marginal vs average ROAS, and maturity penalty inputs for ACI

Derived Intelligence — Temporal

temporal_intelligence_daily

Hour-of-day bid multipliers, peak spend windows, and worst conversion hours

Derived Intelligence — Geographic

geographic_intelligence_daily

Market classification, location score, CPA by geography, and recommended actions

01

Algorithm Control Index (ACI)

How much structural control you have over PMax

A composite score from 0–100 calculated from two penalty components: a waste penalty (based on your leakage rate) and a maturity penalty (based on how much of your 90-day cumulative spend sits in unstable campaign stages). Lower penalties = higher ACI. A score below 50 means the algorithm is operating without structural constraints.

ACI = 100 − waste_penalty − maturity_penalty

Waste penalty tiers:
  Leakage < 10%  → 0 pts
  Leakage 10–20% → 10 pts
  Leakage 20–30% → 25 pts
  Leakage > 30%  → 40 pts

Maturity penalty tiers:
  Unstable spend < 20% → 0 pts
  Unstable spend 20–40% → 10 pts
  Unstable spend > 40% → 20 pts
< 50Critical Volatility — immediate structural action needed
50–79Moderate Leakage — targeted fixes required
80–100Excellent Control — algorithm operating efficiently
02

Campaign Maturity & Learning Stages

The 90-day algorithm learning lifecycle

PMax campaigns move through distinct learning stages tracked over a 90-day cumulative window. The distribution of your spend across these stages directly feeds the ACI maturity penalty. Campaigns in EXPLORATION or DEGRADATION stages are considered unstable — the algorithm hasn't converged on an efficient strategy yet.

Maturity penalty = f(unstable_spend / total_tracked_spend)

Stages tracked: CALIBRATION, EXPLORATION, SCALING, DEGRADATION
Unstable stages: EXPLORATION + DEGRADATION

Note: 90-day window means maturity figures
will exceed your 30-day spend total.
CALIBRATIONAlgorithm learning basic signals — expected early stage
EXPLORATIONActive audience discovery — partially unstable
SCALINGConverged and efficient — lowest risk stage
DEGRADATIONPerformance declining — algorithm losing signal quality
03

Exploration Efficiency Ratio (EER)

Is the algorithm's learning tax worth paying?

PMax always allocates a portion of budget to exploration — testing audiences and inventory beyond its highest-confidence asset group. The EER measures whether that cost is justified. It divides the CPA of your top-spending asset group (exploitation) by the blended CPA of all remaining groups (exploration). Guardrails are applied: the metric is only calculated when campaigns have sufficient volume to be statistically meaningful.

EER = exploit_CPA ÷ explore_CPA

Where:
  exploit_CPA = spend_rank_1_spend ÷ spend_rank_1_conversions
  explore_CPA = all_other_spend ÷ all_other_conversions

Guardrails (metric shown as NOISE if not met):
  • Campaign total spend < 100 → NOISE_LOW_CAMPAIGN_VOLUME
  • Exploration < 25 spend or < 5% of total → NOISE_LOW_EXPLORATION_SHARE
  • Exploitation conversions < 3 → NOISE_LOW_BASELINE_CONVERSIONS
  • Exploration conversions < 3 → NOISE_LOW_EXPLORATION_CONVERSIONS
< 0.3CRITICAL — probing junk inventory, exploration is waste
0.3–0.8HEALTHY — expected exploration cost range
> 0.8HIGH_POTENTIAL — scaling opportunity discovered
04

Black Box Tax & Waste Waterfall

Total confirmed zero-return spend, classified by category

The Black Box Tax is the sum of all spend that produced zero conversions in the reporting window, sourced from the waste_management_intelligence_daily table. It is broken down by waste_category into the waterfall — each category represents a distinct structural failure type. Both Exploration and Creative waste are recoverable through different fix paths.

Black Box Tax = SUM(wasted_spend) from waste_management_intelligence_daily
Waste Leakage Rate = Black Box Tax ÷ total_spend × 100

Waste categories (from waste_category field):
  EXPLORATION — algorithm learning spend with no return
  CREATIVE — low-performing asset groups funded despite zero conversions
EXPLORATIONAlgorithm testing new audiences — partially recoverable
CREATIVEWeak assets funded by algorithm — fully recoverable
05

Signal Health & Attribution Drift

When Google Ads and GA4 disagree on conversions

Sourced from signal_health_intelligence_daily. Compares Ads-reported conversions against GA4-reported conversions at the campaign level over the last 30 days. When the gap exceeds 20%, the algorithm is bidding on phantom signals — inflating CPCs account-wide and suppressing Quality Scores. The signal_status field is pre-calculated in the pipeline.

Drift % = |ads_conversions_30d − ga4_conversions_30d|
              ÷ MAX(ads_conversions_30d, ga4_conversions_30d) × 100

Status classification (from signal_status field):
  HEALTHY        → drift < 15%
  WARNING_DRIFT  → drift 15–40%
  CRITICAL_BLIND → drift > 40%
  LOW_VOLUME     → insufficient conversion volume for meaningful drift
HEALTHY< 15% drift — conversion signals are aligned
WARNING_DRIFT15–40% — investigate conversion tag setup
CRITICAL_BLIND> 40% — algorithm bidding on phantom data
LOW_VOLUMEInsufficient data — not actionable yet
06

Conversion Quality Breakdown

How PMax actually measures your conversions

Sourced from google_ads_campaign_performance, filtering for PERFORMANCE_MAX channel type. PMax reports multiple conversion types simultaneously: click-attributed (user clicked then converted), view-through (user saw ad, didn't click, converted later), cross-device (interaction on one device, conversion on another), and modeled (Google's statistical estimates). This breakdown reveals what percentage of your reported conversions are based on hard click data vs. softer attribution signals.

Per campaign (PERFORMANCE_MAX only):
  click_conversions = SUM(conversions)
  view_through = SUM(view_through_conversions)
  cross_device = SUM(cross_device_conversions)
  all_conversions = SUM(all_conversions)
  modeled = all_conversions − click_conversions

Percentages:
  view_through_pct = view_through ÷ all_conversions × 100
  cross_device_pct = cross_device ÷ all_conversions × 100
  click_attributed_pct = click_conversions ÷ all_conversions × 100

Key threshold:
  view_through_pct > 30% = algorithm optimizing on impressions, not clicks
Click-attributedHardest signal — user clicked your ad before converting
View-through > 30%Algorithm optimizing on impression exposure, not purchase intent
Cross-deviceModeled from signed-in user data — legitimate but less precise
07

Feed Health & Product Structure

Product feed quality scoring from Shopping performance data

Sourced from google_ads_shopping_performance. Analyzes the structural health of your product feed by checking for missing attributes (category, brand, condition), measuring conversion coverage (what percentage of active products have converted), and counting zero-conversion products with meaningful traffic. Products with missing attributes receive lower placement quality from Google's Shopping algorithm, degrading PMax performance across the entire account — not just for the individual products.

Feed health metrics:
  total_products = COUNT(DISTINCT product_item_id) WHERE clicks > 0
  missing_category = COUNT WHERE product_category_level1 IS NULL
  missing_brand = COUNT WHERE product_brand IS NULL
  converting_products = COUNT WHERE conversions > 0
  zero_conv_products = COUNT WHERE conversions = 0 AND clicks >= 20
  conversion_coverage_pct = converting_products ÷ total_products × 100

Key threshold:
  zero_conv_products > 30% of total = structural feed problem
  missing_category > 0 = immediate Merchant Center fix needed
Missing attrsProducts invisible to Google's taxonomy — fix in Merchant Center
Coverage > 50%Healthy feed — majority of products contribute to conversions
Coverage < 20%Small number of products carrying all conversion weight
08

Zombie Product Detection

Products training PMax on non-converting audiences

Sourced from google_ads_shopping_performance (Google Ads API). A product is flagged as a zombie when it meets all three conditions simultaneously: zero units sold in the 30-day window, at least 20 clicks (ensuring spend is intentional, not accidental), and spend exceeding a currency-scaled guardrail. The guardrail adapts dynamically — it takes the greater of the fixed threshold or 1% of total shopping spend for that account.

Zombie conditions (ALL must be true):
  1. units_sold = 0 (or NULL) in 30-day window
  2. clicks ≥ 20
  3. wasted_cost > MAX(currency_threshold, total_shopping_spend × 0.01)

Currency thresholds:
  USD / EUR / GBP / CAD / AUD / CHF
  KWD / AED / SAR / SGD / NZD → $50
  All other currencies (INR etc.) → ₹2,500
INR threshold₹2,500 fixed OR 1% of total shopping spend (whichever is higher)
USD threshold$50 fixed OR 1% of total shopping spend (whichever is higher)
09

Marginal vs Average ROAS

Where scaling stops being efficient

Sourced from campaign_maturity_daily. Average ROAS tells you what happened historically. Marginal ROAS tells you what the next incremental dollar of spend will return. When marginal ROAS falls below average ROAS, you have hit a diminishing returns threshold — scaling budget at this point destroys efficiency. The breakeven ROAS threshold is set at 1.5x.

Marginal ROAS = change in revenue ÷ change in spend
             (calculated in campaign_maturity_daily pipeline)

Status classification:
  Marginal ROAS < 1.5         → CRITICAL: below breakeven
  Marginal ROAS < Average ROAS → WARNING: diminishing returns active
  Marginal ROAS ≥ Average ROAS → HEALTHY: scaling efficiently
< 1.5xCRITICAL — each new dollar spent returns less than it costs
< avg ROASWARNING — diminishing returns have begun
≥ avg ROASHEALTHY — scaling is still efficient
10

Recovery Potential

Conservative projection built into the pipeline

The recovery figure is pre-calculated in the waste_management_intelligence_daily table as recovery_potential — it is not computed on the client side. The pipeline applies category-level recoverability rates against confirmed waste spend. The 70% baseline described in the audit methodology is a conservative floor, not a flat multiplier — actual recovery varies by waste category.

Recovery = SUM(recovery_potential) from waste_management_intelligence_daily
             (pre-calculated per waste category in the pipeline)

Capture rate rationale:
  • Some exploration spend is genuinely necessary
  • Budget remapping is never perfectly efficient
  • Market conditions introduce variance
  • Real-world accounts recover 55–85% of identified waste
  • 70% baseline is the conservative floor used in methodology descriptions
70% baselineConservative floor of observed 55–85% recovery outcomes
11

Network Segmentation

Where your ads appear across Google's networks

Sourced from google_ads_pmax_placement_performance via Google's new network segmentation reporting. Each placement row now includes an ad_network_type field that classifies whether the impression was served on DISPLAY, YOUTUBE_WATCH, CONTENT, or SEARCH networks. This breaks the "black box" of PMax placement reporting by revealing which network is responsible for each placement type.

Query groups by:
  ad_network_type × placement_type

Output per combination:
  total_impressions = SUM(impressions)
  unique_placements = COUNT(DISTINCT placement)

Key interpretation:
  DISPLAY + Mobile App = highest junk risk
  YOUTUBE_WATCH + YouTube Channel = brand spend without conversion signal
  CONTENT + Website = mixed quality, requires per-site review
DISPLAYHighest proportion of junk inventory — mobile apps dominate
YOUTUBE_WATCHBrand exposure without direct conversion signal
CONTENTWebsite placements — quality varies significantly
12

Budget Projections & Pacing

End-of-month spend forecasting from Google's budget API

Sourced from google_ads_budget_recommendations via Google's budget reporting endpoint. Each campaign budget includes the current daily amount, Google's recommended amount, and the estimated weekly cost change if the recommendation were applied. The audit divides the weekly figure by 7 to display daily variance — aligning the unit with the daily budget column for direct comparison.

Daily variance = estimated_change_weekly_cost ÷ 7

Status classification:
  recommended > current → INCREASE RECOMMENDED
  recommended < current → DECREASE RECOMMENDED
  recommended = current → OPTIMAL

Data joins:
  google_ads_budget_recommendations (costs & recommendations)
  × google_ads_budget_details (budget names & metadata)
  Joined on campaign_budget_id
  Deduplicated via ROW_NUMBER() OVER(PARTITION BY campaign_budget_id ORDER BY date DESC)
INCREASECampaign is budget-constrained — verify with Marginal ROAS before acting
DECREASECampaign is overspending relative to Google's efficiency model
OPTIMALCurrent budget aligns with Google's recommendation
13

First-Party Audience Exclusions

Identifying customer lists that waste PMax budget

Sourced from google_ads_audience_performance, filtering for criterion_type = 'USER_LIST'. The query identifies remarketing segments and customer lists that are consuming budget (SUM(cost) > 50) while generating zero conversions (SUM(conversions) < 1). These audiences should be excluded from PMax campaigns so the algorithm focuses on new customer acquisition.

Exclusion candidates where:
  criterion_type = 'USER_LIST'
  AND SUM(conversions) < 1
  AND SUM(cost) > 50

Output:
  audience_name = COALESCE(user_list_name, display_name, 'Unknown')
  wasted_spend = SUM(cost)
  action = 'Recommend Exclusion'

Ordered by: wasted_spend DESC
Limit: Top 5 highest-waste audiences
USER_LISTYour own customer data segments — past purchasers, email lists
14

Audience Demographics Analysis

Age and gender performance from Google's new demographic reporting

Sourced from google_ads_age_demographics and google_ads_gender_demographics via Google's upgraded audience reporting for PMax. Each demographic segment (age range or gender) reports impressions, clicks, conversions, and cost. CPA is calculated per segment to identify which demographics are converting efficiently and which are consuming budget disproportionately.

Per demographic segment:
  CPA = SUM(cost) ÷ NULLIF(SUM(conversions), 0)

Age ranges: 18–24, 25–34, 35–44, 45–54, 55–64, 65+, Unknown
Gender values: Male, Female, Unknown

Key interpretation:
  High impressions + low conversions + high CPA
  = algorithm over-indexing on expensive segment

  "Unknown" segment typically has highest CPA
  = unclassifiable traffic from low-quality inventory
Unknown segmentTypically highest CPA — includes bots, incognito users, low-quality inventory
Best segmentLowest CPA with meaningful conversion volume — scale here

Proprietary notice: The methodology, scoring models, waste classification logic, ACI formula, EER calculation, and recovery projections are proprietary to ClickCatalyst Digital and provided for informational purposes only. Results are subject to standard market volatility. Recovery projections are estimates, not guarantees. Contact us within 14 days if any metric appears inaccurate.

Ready to see these metrics applied to your account?

Connect via read-only Google OAuth. No campaign changes, ever.

Run My Free PMax Audit

Not sure what the numbers in your report mean? Read the audit interpretation guide →

PMax Diagnostics Methodology — How ClickCatalyst Calculates ACI, EER & Waste