Features
Drills down from account-level spend changes to identify specific entities driving increases or decreases.
Multi-Level Investigation: Review-only | Start at Campaign level, drill to Keywords & Targets for root cause analysis
The template compares recent 7-day spend against a 28-day baseline to detect percentage changes, then decomposes spend into its mathematical components (Clicks × CPC) to identify root causes. When entities show 30%+ spend shifts, it evaluates recent ACOS against target to determine if increases represent problems or healthy scaling. Results are categorized into Problems, Scaling, or Opportunities based on spend direction and performance context. The identical logic works across all datasets (Campaigns, Ad Groups, Keywords & Targets, Product Ads), enabling multi-level drill-down investigation from account to entity level.
The template uses only universal properties available across all datasets (spend, clicks, impressions, CPC, ACOS, orders, state). This enables a consistent investigation workflow: start at Campaign level to identify which campaigns are driving account problems, then switch dataset to Keywords & Targets to drill into specific root causes within those campaigns. The logic, thresholds, and categorization work identically at every level - only the granularity of analysis changes. For complex account structures, Ad Groups provide an intermediate analysis layer between campaigns and individual targets.
Since spend is mathematically defined as Clicks × CPC, the blueprint analyzes both components separately to identify which drove the change. A 50% spend increase could be from 50% more clicks (traffic growth), 50% higher CPC (cost escalation), or a combination. This attribution immediately directs investigation - click-driven changes point to traffic/impression issues, while CPC-driven changes point to competition or Quality Score factors.
Raw spend changes without performance context create false alarms. A 100% spend increase is concerning if ACOS went from 25% to 55%, but perfectly fine if ACOS stayed at 25% - that's just successful scaling. The blueprint applies ACOS thresholds (120% acceptable, 150% problem) to recent performance, categorizing spend increases as either problematic or healthy based on efficiency maintenance.
Problems: Spend increases paired with poor ACOS (>150% of target). These are the entities actively hurting account performance and should be addressed first through bid reductions, budget adjustments, or pausing.
Scaling: Spend increases with good ACOS (≤100% of target). These represent successful growth and typically don't need intervention - they're just context for why total account spend increased.
Opportunities: Spend decreases on entities with good ACOS. These represent high-performing campaigns or targets losing volume, often due to budget constraints or reduced bids, and may benefit from increased investment.
Not all entities matter equally. A 100% increase on a $5/week entity is less important than a 30% increase on a $200/week entity. The [High $] tag identifies entities with $50+ recent spend, ensuring you prioritize changes that meaningfully affect account totals rather than getting distracted by percentage changes on low-volume entities. This is particularly valuable at keyword/target level where spend can be widely distributed, but also useful at campaign level for large accounts.
The moderate (30%) and severe (75%) thresholds create a two-tier sensitivity system. Moderate catches meaningful but not urgent changes for awareness, while severe flags dramatic shifts requiring immediate investigation. In volatile markets (seasonal products, new launches), raise thresholds 10-15 percentage points to avoid alert fatigue. In stable mature markets, lower thresholds 5-10 points to catch problems earlier.
The 120% acceptable and 150% problem thresholds work together to categorize spend changes. With a 30% target ACOS: 36% is acceptable (scaling territory), 45% is a problem (reduce spend territory). The gap between thresholds creates a middle zone for moderate efficiency degradation. Narrow this gap (110%/130%) for thin margins where you can't tolerate efficiency loss. Widen it (130%/175%) for high margins where volume matters more.
The 7-day recent window balances responsiveness with stability - long enough to filter daily noise but short enough to catch current problems. The 28-day baseline provides reliable comparison without being so long that market shifts make it irrelevant. Extending recent to 14 days smooths weekend/weekday variations but reduces responsiveness to new problems. Shortening baseline to 14 days makes the tool more reactive to market changes but less reliable in distinguishing true anomalies from normal variance.
The 25% component threshold determines when the blueprint attributes spend changes to clicks vs. CPC. If clicks increased 30% and CPC increased 5%, clicks are identified as the driver. If both increased 30%, both are identified. Lowering this threshold (15-20%) provides more granular attribution but may over-identify drivers during normal market noise. Raising it (30-35%) ensures you only see attribution for truly meaningful component shifts.
Problem: Severe Increase + Poor ACOS [High $] - Highest priority. Entity is spending significantly more (75%+ increase) with ACOS above 150% of target, and represents $50+ weekly spend. These are actively damaging account performance. At Campaign level, investigate campaign settings and recent changes. At Keywords & Targets level, check if recent bid increases caused this, verify listing quality hasn't declined, consider reducing bids or pausing.
Problem: Moderate Increase + Poor ACOS - Medium priority. Spending 30-75% more with poor efficiency. These contribute to account-level ACOS problems but less urgently than severe cases. Review performance trends to determine if deterioration is accelerating or stabilizing.
Scaling: Severe Increase (Clicks) + Good ACOS - Positive signal, no action needed. Entity is successfully scaling with maintained efficiency. This is healthy growth - the ACOS context confirms the increased spend is justified by strong performance.
Opportunity: Severe Decrease (Clicks) + Good ACOS - Missed revenue potential. High-performing entity losing click volume. At Campaign level, likely hitting budget constraints - consider raising daily budget. At Keywords & Targets level, may be due to parent campaign budget caps or reduced bids - consider raising campaign budget or increasing bids to recapture lost volume from proven performers.
Increase: Severe (CPC Spike) - Neutral but investigate cause. Spending 75%+ more due to CPC increases without clear performance context. Check for: competitor bid increases in auction, Quality Score declines affecting ad rank, recent bid changes you made. Determine if the higher cost is sustainable given current conversion rates.
Decrease: Moderate (Click Loss) - Context-dependent. Spending 30-50% less due to reduced clicks. If performance was poor, this is natural wind-down. If performance was good, investigate: campaign budget constraints, reduced bids, impression loss from competition, dayparting or placement restrictions.
"Severe spend increase from click volume growth with poor ACOS" - You're getting more traffic but it's converting poorly. Check if: new placements activated with different traffic quality, expanded targeting brought in less relevant traffic, organic ranking changed affecting who clicks your ads. The problem isn't the spend increase per se, it's that the additional traffic quality is subpar.
"Severe spend increase driven by CPC escalation" - Same traffic volume but paying more per click. Check: competitor activity in shared keywords, your Quality Score changes, recent bid adjustments. If your bid hasn't changed but CPC rose, competitors are bidding more aggressively. Evaluate whether maintaining position at higher costs makes sense given current conversion rates.
"Moderate spend drop from reduced clicks despite good ACOS" - Proven performer losing volume. Most common causes: campaign budget hitting daily cap earlier in day (check campaign budget utilization), bids becoming less competitive as market evolved (check impression share lost to rank), seasonality reducing overall search volume. Consider raising investment since efficiency is good.
The [High $] suffix appears when recent spend ≥$50/week. These targets should be prioritized because their changes materially affect account totals. A 100% increase on a $5 target adds $5 weekly, while a 30% increase on a $100 target adds $30 weekly - the latter matters more despite the smaller percentage change.
Most effective use case: Account dashboard shows "Spend +40%, ACOS degraded from 30% to 42%." Step 1: Deploy template on Campaigns dataset, sort by $result. Identify 2-3 campaigns showing "Problem" status. Step 2: Note which campaigns, then switch dataset to Keywords & Targets. Filter segment to those problematic campaigns. Step 3: Sort by $result to identify the 5-10 specific targets within those campaigns driving the degradation. This multi-level approach quickly narrows from account problem to actionable entity-level fixes.
Secondary pattern: Use at keyword/target level when you've already identified problematic campaigns. Open template with Keywords & Targets dataset, filter to known problem campaigns, sort by $result. Problems sort to top, immediately identifying the 3-5 targets driving campaign-level degradation. Most commonly these are targets where bids were recently raised or new high-volume but poor-efficiency targets recently enabled.
Pattern across datasets: Account performance is good but total orders are flat. At Campaign level, filter to $result contains "Opportunity" to find campaigns with good ACOS losing spend. At Keywords & Targets level within those campaigns, find specific high-performers losing volume. These often cluster where parent campaigns are hitting budget caps. Raising budget in those campaigns typically shows immediate ROI since the constrained entities have proven efficiency.
Expect higher volumes of "Scaling" results during peak seasons when overall account spend naturally increases. If you see many "Problem" results during peak season, this indicates you're not scaling efficiently - increased demand is bringing lower-quality traffic rather than just more volume of good traffic. This suggests bid optimization or targeting refinement is needed.
Clusters of "Increase: Severe (CPC Spike)" results without corresponding click increases indicate competitive pressure. At Campaign level, this suggests market-wide competition increases. At Keywords & Targets level, multiple targets in same campaign showing this pattern suggests a competitor entered your primary keywords. You'll need to decide whether to match their bids (increasing spend to maintain volume) or accept reduced impression share (maintaining spend but losing volume).
If segment shows few results (<5 entities) despite account-level spend changes, the issue may be at a different level than currently analyzed. At Campaign level with sparse results, spend changes might be distributed across many campaigns rather than concentrated. Switch to Keywords & Targets to see if specific targets are driving changes. At Keywords & Targets level with sparse results, check for: campaign budget changes, campaign pauses/enables, bid strategy switches, bulk bid adjustments across many targets (each small, but cumulative large impact). This template focuses on individual entity anomalies, not structural account changes.
/*
=== Anomaly Detection: Spend ===
Purpose: Identifies entities driving spend changes for account-level investigation.
Datasets: Campaigns | Ad Groups | Keywords & Targets | Keywords | Targets | Ads | Search Terms
Recommended: Ad-hoc investigation tool | Change dataset based on investigation depth needed
*/
// === Time Periods ===
let $period_recent = 0d..7d; // TIME: Recent spend window (7 days)
let $period_baseline = 8d..35d; // TIME: Baseline comparison (28 days)
// === Reliability Thresholds ===
let $spend_min = 5.00; // CORE: Minimum baseline spend for reliable analysis [e.g., $5+ spend]
let $impressions_min = 50; // CORE: Minimum baseline impressions for meaningful context [e.g., 50+ impressions]
let $clicks_min = 5; // CORE: Minimum baseline clicks for reliable spend attribution [e.g., 5+ clicks]
// === Shift Detection ===
let $spend_moderate = 30%; // STRATEGY: Moderate spend shift threshold [e.g., 30% = $100 to $130 or $70]
let $spend_severe = 75%; // STRATEGY: Severe spend shift threshold [e.g., 75% = $100 to $175 or $25]
let $component_threshold = 25%; // STRATEGY: Click/CPC shift to attribute root cause [e.g., 25% shift = meaningful driver]
// === Performance Context ===
let $acos_acceptable_threshold = 120%; // STRATEGY: ACOS threshold for performance assessment [e.g., 120% = 30% target → 36% acceptable]
let $acos_problem_threshold = 150%; // STRATEGY: ACOS threshold for problem identification [e.g., 150% = 30% target → 45% problem]
// === Segment Filters ===
let $include_campaigns = [""]; // FILTER: Apply to all campaigns, or specify terms like ["SP-", "Auto", "Research"]
let $exclude_campaigns = ["NEVER_MATCH"]; // FILTER: Exclude campaigns containing these terms, e.g., ["Brand", "Test", "Archive"]
// ============================================================================
// === Segment Logic ===
// ============================================================================
// === Baseline & Recent Metrics ===
let $spend_recent = spend($period_recent);
let $spend_baseline = spend($period_baseline);
let $impressions_recent = impressions($period_recent);
let $impressions_baseline = impressions($period_baseline);
let $clicks_recent = clicks($period_recent);
let $clicks_baseline = clicks($period_baseline);
let $cpc_recent = cpc($period_recent);
let $cpc_baseline = cpc($period_baseline);
let $acos_recent = acos($period_recent);
let $acos_baseline = acos($period_baseline);
let $orders_recent = orders($period_recent);
let $orders_baseline = orders($period_baseline);
// === Data Reliability ===
let $sufficient_data = case(
$spend_baseline >= $spend_min and $impressions_baseline >= $impressions_min and $clicks_baseline >= $clicks_min => 1,
else 0
);
let $sufficient_for_acos = case(
$orders_recent >= 1 and $orders_baseline >= 1 => 1,
else 0
);
// === Calculate Changes ===
// Spend = Clicks × CPC, so analyze these components
let $spend_change = case(
$spend_baseline > 0 => ($spend_recent - $spend_baseline) / $spend_baseline,
else 0
);
let $clicks_change = case(
$clicks_baseline > 0 => ($clicks_recent - $clicks_baseline) / $clicks_baseline,
else 0
);
let $cpc_change = case(
$cpc_baseline > 0 => ($cpc_recent - $cpc_baseline) / $cpc_baseline,
else 0
);
let $acos_change = case(
$sufficient_for_acos = 1 and $acos_baseline > 0 => ($acos_recent - $acos_baseline) / $acos_baseline,
else 0
);
// === Severity Assessment ===
let $spend_severity = case(
$spend_change >= $spend_severe => "severe_increase",
$spend_change >= $spend_moderate => "moderate_increase",
$spend_change <= -1 * $spend_severe => "severe_decrease",
$spend_change <= -1 * $spend_moderate => "moderate_decrease",
else "normal"
);
let $has_anomaly = case(
$spend_severity != "normal" => 1,
else 0
);
// === Root Cause Analysis ===
// Determine if spend change is driven by click volume or cost per click
let $driven_by_clicks = case(
$clicks_change >= $component_threshold or $clicks_change <= -1 * $component_threshold => 1,
else 0
);
let $driven_by_cpc = case(
$cpc_change >= $component_threshold or $cpc_change <= -1 * $component_threshold => 1,
else 0
);
let $change_driver = case(
$driven_by_clicks = 1 and $driven_by_cpc = 1 => "clicks_and_cpc",
$driven_by_clicks = 1 => "click_volume",
$driven_by_cpc = 1 => "cost_per_click",
else "minor_shifts"
);
// === Performance Assessment ===
let $performance_status = case(
$sufficient_for_acos = 0 => "insufficient_data",
target acos <= 0 => "no_target",
$acos_recent > target acos * $acos_problem_threshold => "poor_efficiency",
$acos_recent > target acos * $acos_acceptable_threshold => "acceptable_efficiency",
$acos_recent > target acos => "near_target",
else "good_efficiency"
);
// === Spend Impact Assessment ===
let $spend_impact = case(
$spend_recent >= 50.00 => "high_impact",
$spend_recent >= 20.00 => "medium_impact",
$spend_recent >= 5.00 => "low_impact",
else "minimal_impact"
);
// === Diagnostic Properties ===
let $reason = case(
$sufficient_data = 0 => "Insufficient spend history",
$has_anomaly = 0 => "No significant spend shift detected",
// Severe increases with performance context
$spend_severity = "severe_increase" and $performance_status = "poor_efficiency" and $change_driver = "click_volume" => "Severe spend increase from click volume growth with poor ACOS",
$spend_severity = "severe_increase" and $performance_status = "poor_efficiency" and $change_driver = "cost_per_click" => "Severe spend increase from CPC escalation with poor ACOS",
$spend_severity = "severe_increase" and $performance_status = "poor_efficiency" => "Severe spend increase with poor efficiency",
$spend_severity = "severe_increase" and $change_driver = "click_volume" => "Severe spend increase driven by click volume growth",
$spend_severity = "severe_increase" and $change_driver = "cost_per_click" => "Severe spend increase driven by CPC escalation",
$spend_severity = "severe_increase" and $change_driver = "clicks_and_cpc" => "Severe spend increase from both click volume and CPC rises",
$spend_severity = "severe_increase" => "Severe spend increase detected",
// Moderate increases with performance context
$spend_severity = "moderate_increase" and $performance_status = "poor_efficiency" and $change_driver = "click_volume" => "Moderate spend increase from click volume with poor ACOS",
$spend_severity = "moderate_increase" and $performance_status = "poor_efficiency" and $change_driver = "cost_per_click" => "Moderate spend increase from CPC rise with poor ACOS",
$spend_severity = "moderate_increase" and $performance_status = "poor_efficiency" => "Moderate spend increase with poor efficiency",
$spend_severity = "moderate_increase" and $change_driver = "click_volume" => "Moderate spend increase from click volume growth",
$spend_severity = "moderate_increase" and $change_driver = "cost_per_click" => "Moderate spend increase from CPC rise",
$spend_severity = "moderate_increase" and $change_driver = "clicks_and_cpc" => "Moderate spend increase from click volume and CPC",
$spend_severity = "moderate_increase" => "Moderate spend increase detected",
// Decreases with performance context
$spend_severity = "severe_decrease" and $performance_status = "good_efficiency" and $change_driver = "click_volume" => "Severe spend drop from lost clicks despite good ACOS",
$spend_severity = "severe_decrease" and $change_driver = "click_volume" => "Severe spend drop due to lost clicks",
$spend_severity = "severe_decrease" and $change_driver = "cost_per_click" => "Severe spend drop due to CPC decrease",
$spend_severity = "severe_decrease" and $change_driver = "clicks_and_cpc" => "Severe spend drop from both click and CPC declines",
$spend_severity = "severe_decrease" => "Severe spend decrease detected",
$spend_severity = "moderate_decrease" and $performance_status = "good_efficiency" and $change_driver = "click_volume" => "Moderate spend drop from reduced clicks despite good ACOS",
$spend_severity = "moderate_decrease" and $change_driver = "click_volume" => "Moderate spend drop from reduced clicks",
$spend_severity = "moderate_decrease" and $change_driver = "cost_per_click" => "Moderate spend drop from CPC decrease",
$spend_severity = "moderate_decrease" and $change_driver = "clicks_and_cpc" => "Moderate spend drop from click and CPC declines",
$spend_severity = "moderate_decrease" => "Moderate spend decrease detected",
else "No significant spend pattern change"
);
let $result = case(
$sufficient_data = 0 => "insufficient_data",
$has_anomaly = 0 => "insufficient_data",
// Problem increases (high spend + poor efficiency) - sort to top
$spend_severity = "severe_increase" and $performance_status = "poor_efficiency" and $spend_impact = "high_impact" => "Problem: Severe Increase + Poor ACOS [High $]",
$spend_severity = "severe_increase" and $performance_status = "poor_efficiency" => "Problem: Severe Increase + Poor ACOS",
$spend_severity = "moderate_increase" and $performance_status = "poor_efficiency" and $spend_impact = "high_impact" => "Problem: Moderate Increase + Poor ACOS [High $]",
$spend_severity = "moderate_increase" and $performance_status = "poor_efficiency" => "Problem: Moderate Increase + Poor ACOS",
// Neutral/good increases
$spend_severity = "severe_increase" and $performance_status = "good_efficiency" and $change_driver = "click_volume" => "Scaling: Severe Increase (Clicks) + Good ACOS",
$spend_severity = "severe_increase" and $change_driver = "click_volume" => "Increase: Severe (Click Volume)",
$spend_severity = "severe_increase" and $change_driver = "cost_per_click" => "Increase: Severe (CPC Spike)",
$spend_severity = "severe_increase" and $change_driver = "clicks_and_cpc" => "Increase: Severe (Clicks + CPC)",
$spend_severity = "severe_increase" => "Increase: Severe",
$spend_severity = "moderate_increase" and $performance_status = "good_efficiency" and $change_driver = "click_volume" => "Scaling: Moderate Increase (Clicks) + Good ACOS",
$spend_severity = "moderate_increase" and $change_driver = "click_volume" => "Increase: Moderate (Click Volume)",
$spend_severity = "moderate_increase" and $change_driver = "cost_per_click" => "Increase: Moderate (CPC)",
$spend_severity = "moderate_increase" and $change_driver = "clicks_and_cpc" => "Increase: Moderate (Clicks + CPC)",
$spend_severity = "moderate_increase" => "Increase: Moderate",
// Opportunity decreases (good performers losing volume)
$spend_severity = "severe_decrease" and $performance_status = "good_efficiency" and $change_driver = "click_volume" => "Opportunity: Severe Decrease (Clicks) + Good ACOS",
$spend_severity = "moderate_decrease" and $performance_status = "good_efficiency" and $change_driver = "click_volume" => "Opportunity: Moderate Decrease (Clicks) + Good ACOS",
// Normal decreases
$spend_severity = "severe_decrease" and $change_driver = "click_volume" => "Decrease: Severe (Click Loss)",
$spend_severity = "severe_decrease" and $change_driver = "cost_per_click" => "Decrease: Severe (CPC Drop)",
$spend_severity = "severe_decrease" and $change_driver = "clicks_and_cpc" => "Decrease: Severe (Clicks + CPC)",
$spend_severity = "severe_decrease" => "Decrease: Severe",
$spend_severity = "moderate_decrease" and $change_driver = "click_volume" => "Decrease: Moderate (Click Loss)",
$spend_severity = "moderate_decrease" and $change_driver = "cost_per_click" => "Decrease: Moderate (CPC Drop)",
$spend_severity = "moderate_decrease" and $change_driver = "clicks_and_cpc" => "Decrease: Moderate (Clicks + CPC)",
$spend_severity = "moderate_decrease" => "Decrease: Moderate",
// Catch-all for any edge cases
else "insufficient_data"
);
// === Final Filter ===
state = "effectively enabled"
and (campaign name contains any $include_campaigns)
and (campaign name does not contain any $exclude_campaigns)
and $sufficient_data = 1
and $has_anomaly = 1
and $result != "insufficient_data"
/*
=== Anomaly Detection: Spend ===
Purpose: Identifies entities driving spend changes for account-level investigation.
Datasets: Campaigns | Ad Groups | Keywords & Targets | Keywords | Targets | Ads | Search Terms
Recommended: Ad-hoc investigation tool | Change dataset based on investigation depth needed
*/
// === Time Periods ===
let $period_recent = 0d..7d; // TIME: Recent spend window (7 days)
let $period_baseline = 8d..35d; // TIME: Baseline comparison (28 days)
// === Reliability Thresholds ===
let $spend_min = 5.00; // CORE: Minimum baseline spend for reliable analysis [e.g., $5+ spend]
let $impressions_min = 50; // CORE: Minimum baseline impressions for meaningful context [e.g., 50+ impressions]
let $clicks_min = 5; // CORE: Minimum baseline clicks for reliable spend attribution [e.g., 5+ clicks]
// === Shift Detection ===
let $spend_moderate = 30%; // STRATEGY: Moderate spend shift threshold [e.g., 30% = $100 to $130 or $70]
let $spend_severe = 75%; // STRATEGY: Severe spend shift threshold [e.g., 75% = $100 to $175 or $25]
let $component_threshold = 25%; // STRATEGY: Click/CPC shift to attribute root cause [e.g., 25% shift = meaningful driver]
// === Performance Context ===
let $acos_acceptable_threshold = 120%; // STRATEGY: ACOS threshold for performance assessment [e.g., 120% = 30% target → 36% acceptable]
let $acos_problem_threshold = 150%; // STRATEGY: ACOS threshold for problem identification [e.g., 150% = 30% target → 45% problem]
// === Segment Filters ===
let $include_campaigns = [""]; // FILTER: Apply to all campaigns, or specify terms like ["SP-", "Auto", "Research"]
let $exclude_campaigns = ["NEVER_MATCH"]; // FILTER: Exclude campaigns containing these terms, e.g., ["Brand", "Test", "Archive"]
// ============================================================================
// === Segment Logic ===
// ============================================================================
// === Baseline & Recent Metrics ===
let $spend_recent = spend($period_recent);
let $spend_baseline = spend($period_baseline);
let $impressions_recent = impressions($period_recent);
let $impressions_baseline = impressions($period_baseline);
let $clicks_recent = clicks($period_recent);
let $clicks_baseline = clicks($period_baseline);
let $cpc_recent = cpc($period_recent);
let $cpc_baseline = cpc($period_baseline);
let $acos_recent = acos($period_recent);
let $acos_baseline = acos($period_baseline);
let $orders_recent = orders($period_recent);
let $orders_baseline = orders($period_baseline);
// === Data Reliability ===
let $sufficient_data = case(
$spend_baseline >= $spend_min and $impressions_baseline >= $impressions_min and $clicks_baseline >= $clicks_min => 1,
else 0
);
let $sufficient_for_acos = case(
$orders_recent >= 1 and $orders_baseline >= 1 => 1,
else 0
);
// === Calculate Changes ===
// Spend = Clicks × CPC, so analyze these components
let $spend_change = case(
$spend_baseline > 0 => ($spend_recent - $spend_baseline) / $spend_baseline,
else 0
);
let $clicks_change = case(
$clicks_baseline > 0 => ($clicks_recent - $clicks_baseline) / $clicks_baseline,
else 0
);
let $cpc_change = case(
$cpc_baseline > 0 => ($cpc_recent - $cpc_baseline) / $cpc_baseline,
else 0
);
let $acos_change = case(
$sufficient_for_acos = 1 and $acos_baseline > 0 => ($acos_recent - $acos_baseline) / $acos_baseline,
else 0
);
// === Severity Assessment ===
let $spend_severity = case(
$spend_change >= $spend_severe => "severe_increase",
$spend_change >= $spend_moderate => "moderate_increase",
$spend_change <= -1 * $spend_severe => "severe_decrease",
$spend_change <= -1 * $spend_moderate => "moderate_decrease",
else "normal"
);
let $has_anomaly = case(
$spend_severity != "normal" => 1,
else 0
);
// === Root Cause Analysis ===
// Determine if spend change is driven by click volume or cost per click
let $driven_by_clicks = case(
$clicks_change >= $component_threshold or $clicks_change <= -1 * $component_threshold => 1,
else 0
);
let $driven_by_cpc = case(
$cpc_change >= $component_threshold or $cpc_change <= -1 * $component_threshold => 1,
else 0
);
let $change_driver = case(
$driven_by_clicks = 1 and $driven_by_cpc = 1 => "clicks_and_cpc",
$driven_by_clicks = 1 => "click_volume",
$driven_by_cpc = 1 => "cost_per_click",
else "minor_shifts"
);
// === Performance Assessment ===
let $performance_status = case(
$sufficient_for_acos = 0 => "insufficient_data",
target acos <= 0 => "no_target",
$acos_recent > target acos * $acos_problem_threshold => "poor_efficiency",
$acos_recent > target acos * $acos_acceptable_threshold => "acceptable_efficiency",
$acos_recent > target acos => "near_target",
else "good_efficiency"
);
// === Spend Impact Assessment ===
let $spend_impact = case(
$spend_recent >= 50.00 => "high_impact",
$spend_recent >= 20.00 => "medium_impact",
$spend_recent >= 5.00 => "low_impact",
else "minimal_impact"
);
// === Diagnostic Properties ===
let $reason = case(
$sufficient_data = 0 => "Insufficient spend history",
$has_anomaly = 0 => "No significant spend shift detected",
// Severe increases with performance context
$spend_severity = "severe_increase" and $performance_status = "poor_efficiency" and $change_driver = "click_volume" => "Severe spend increase from click volume growth with poor ACOS",
$spend_severity = "severe_increase" and $performance_status = "poor_efficiency" and $change_driver = "cost_per_click" => "Severe spend increase from CPC escalation with poor ACOS",
$spend_severity = "severe_increase" and $performance_status = "poor_efficiency" => "Severe spend increase with poor efficiency",
$spend_severity = "severe_increase" and $change_driver = "click_volume" => "Severe spend increase driven by click volume growth",
$spend_severity = "severe_increase" and $change_driver = "cost_per_click" => "Severe spend increase driven by CPC escalation",
$spend_severity = "severe_increase" and $change_driver = "clicks_and_cpc" => "Severe spend increase from both click volume and CPC rises",
$spend_severity = "severe_increase" => "Severe spend increase detected",
// Moderate increases with performance context
$spend_severity = "moderate_increase" and $performance_status = "poor_efficiency" and $change_driver = "click_volume" => "Moderate spend increase from click volume with poor ACOS",
$spend_severity = "moderate_increase" and $performance_status = "poor_efficiency" and $change_driver = "cost_per_click" => "Moderate spend increase from CPC rise with poor ACOS",
$spend_severity = "moderate_increase" and $performance_status = "poor_efficiency" => "Moderate spend increase with poor efficiency",
$spend_severity = "moderate_increase" and $change_driver = "click_volume" => "Moderate spend increase from click volume growth",
$spend_severity = "moderate_increase" and $change_driver = "cost_per_click" => "Moderate spend increase from CPC rise",
$spend_severity = "moderate_increase" and $change_driver = "clicks_and_cpc" => "Moderate spend increase from click volume and CPC",
$spend_severity = "moderate_increase" => "Moderate spend increase detected",
// Decreases with performance context
$spend_severity = "severe_decrease" and $performance_status = "good_efficiency" and $change_driver = "click_volume" => "Severe spend drop from lost clicks despite good ACOS",
$spend_severity = "severe_decrease" and $change_driver = "click_volume" => "Severe spend drop due to lost clicks",
$spend_severity = "severe_decrease" and $change_driver = "cost_per_click" => "Severe spend drop due to CPC decrease",
$spend_severity = "severe_decrease" and $change_driver = "clicks_and_cpc" => "Severe spend drop from both click and CPC declines",
$spend_severity = "severe_decrease" => "Severe spend decrease detected",
$spend_severity = "moderate_decrease" and $performance_status = "good_efficiency" and $change_driver = "click_volume" => "Moderate spend drop from reduced clicks despite good ACOS",
$spend_severity = "moderate_decrease" and $change_driver = "click_volume" => "Moderate spend drop from reduced clicks",
$spend_severity = "moderate_decrease" and $change_driver = "cost_per_click" => "Moderate spend drop from CPC decrease",
$spend_severity = "moderate_decrease" and $change_driver = "clicks_and_cpc" => "Moderate spend drop from click and CPC declines",
$spend_severity = "moderate_decrease" => "Moderate spend decrease detected",
else "No significant spend pattern change"
);
let $result = case(
$sufficient_data = 0 => "insufficient_data",
$has_anomaly = 0 => "insufficient_data",
// Problem increases (high spend + poor efficiency) - sort to top
$spend_severity = "severe_increase" and $performance_status = "poor_efficiency" and $spend_impact = "high_impact" => "Problem: Severe Increase + Poor ACOS [High $]",
$spend_severity = "severe_increase" and $performance_status = "poor_efficiency" => "Problem: Severe Increase + Poor ACOS",
$spend_severity = "moderate_increase" and $performance_status = "poor_efficiency" and $spend_impact = "high_impact" => "Problem: Moderate Increase + Poor ACOS [High $]",
$spend_severity = "moderate_increase" and $performance_status = "poor_efficiency" => "Problem: Moderate Increase + Poor ACOS",
// Neutral/good increases
$spend_severity = "severe_increase" and $performance_status = "good_efficiency" and $change_driver = "click_volume" => "Scaling: Severe Increase (Clicks) + Good ACOS",
$spend_severity = "severe_increase" and $change_driver = "click_volume" => "Increase: Severe (Click Volume)",
$spend_severity = "severe_increase" and $change_driver = "cost_per_click" => "Increase: Severe (CPC Spike)",
$spend_severity = "severe_increase" and $change_driver = "clicks_and_cpc" => "Increase: Severe (Clicks + CPC)",
$spend_severity = "severe_increase" => "Increase: Severe",
$spend_severity = "moderate_increase" and $performance_status = "good_efficiency" and $change_driver = "click_volume" => "Scaling: Moderate Increase (Clicks) + Good ACOS",
$spend_severity = "moderate_increase" and $change_driver = "click_volume" => "Increase: Moderate (Click Volume)",
$spend_severity = "moderate_increase" and $change_driver = "cost_per_click" => "Increase: Moderate (CPC)",
$spend_severity = "moderate_increase" and $change_driver = "clicks_and_cpc" => "Increase: Moderate (Clicks + CPC)",
$spend_severity = "moderate_increase" => "Increase: Moderate",
// Opportunity decreases (good performers losing volume)
$spend_severity = "severe_decrease" and $performance_status = "good_efficiency" and $change_driver = "click_volume" => "Opportunity: Severe Decrease (Clicks) + Good ACOS",
$spend_severity = "moderate_decrease" and $performance_status = "good_efficiency" and $change_driver = "click_volume" => "Opportunity: Moderate Decrease (Clicks) + Good ACOS",
// Normal decreases
$spend_severity = "severe_decrease" and $change_driver = "click_volume" => "Decrease: Severe (Click Loss)",
$spend_severity = "severe_decrease" and $change_driver = "cost_per_click" => "Decrease: Severe (CPC Drop)",
$spend_severity = "severe_decrease" and $change_driver = "clicks_and_cpc" => "Decrease: Severe (Clicks + CPC)",
$spend_severity = "severe_decrease" => "Decrease: Severe",
$spend_severity = "moderate_decrease" and $change_driver = "click_volume" => "Decrease: Moderate (Click Loss)",
$spend_severity = "moderate_decrease" and $change_driver = "cost_per_click" => "Decrease: Moderate (CPC Drop)",
$spend_severity = "moderate_decrease" and $change_driver = "clicks_and_cpc" => "Decrease: Moderate (Clicks + CPC)",
$spend_severity = "moderate_decrease" => "Decrease: Moderate",
// Catch-all for any edge cases
else "insufficient_data"
);
// === Final Filter ===
state = "effectively enabled"
and (campaign name contains any $include_campaigns)
and (campaign name does not contain any $exclude_campaigns)
and $sufficient_data = 1
and $has_anomaly = 1
and $result != "insufficient_data"
© Merch Jar LLC