Automation template
Core: Search Term Waste Elimination
Stop ad spend waste by automatically negating inefficient search terms across all campaigns.
Ready to use Merch Jar workflow
- Version
- 1.0
- Type
- —
- Last updated
- 2025-09-26T00:00:00.000Z
- Active
- Yes
Description
Purpose
Stop ad spend waste by automatically negating inefficient search terms across all campaigns.
This Template is for:
- Accounts with wasteful search terms draining budget without converting
- Sellers managing multiple campaigns who need global search term control
- Performance-focused advertisers wanting sophisticated waste elimination with profit protection
- Accounts with Target ACOS configured for dynamic threshold management
Key Features
- Four intelligent negation paths: waste, efficiency, performance, and irrelevance detection
- ROAS-based protection prevents negation of profitable terms despite high click counts
- Dynamic scaling adjusts click requirements based on conversion history
- Target ACOS integration eliminates need for hard-coded thresholds across different campaign types
Configuration Guidance
- Target ACOS Setup: Configure Target ACOS in Ad Manager for different campaign types rather than excluding campaigns. Target ACOS cascades from account to campaign to ad group level.
- Scaling Settings: Start with default scaling (20 clicks per order, $5 spend per order) and adjust based on your average CPC and profit margins. Higher-margin products can handle more aggressive scaling.
- ROAS Protection: The 50% ROAS safeguard protects terms performing at half your target efficiency. Increase for more protection, decrease for more aggressive negation.
Recommended Workflow
Daily Automation: Create Negative Exact Match using built-in logic
How it works
How the Logic Works
The blueprint uses four distinct evaluation paths to identify wasteful search terms while protecting valuable converters. Zero-order terms are evaluated on click efficiency, converting terms are assessed on both efficiency and ACOS performance, with dynamic thresholds that scale based on conversion history.
Key Technical Concepts
- Efficiency vs Performance Evaluation: Terms with fewer than 5 orders use click-per-order efficiency, while terms with 5+ orders switch to ACOS-based performance evaluation
- Dynamic Threshold Scaling: Click and spend requirements increase with order history (base + orders × scaling factor) to allow proven terms more testing room
- ROAS Protection Layer: Calculates target ROAS from Target ACOS and protects any term exceeding 50% of that target, preventing negation of profitable terms regardless of efficiency metrics
Configuration Deep Dive
- Scaling Interaction: Click and spend scaling work together - terms need to exceed both thresholds. Consider your average order value when setting spend scaling, as higher AOV justifies higher spend requirements.
- Irrelevant Terms vs Protected Terms: Irrelevant terms bypass all other logic and negate at just 10 clicks, while protected terms never negate regardless of performance. Use irrelevant for obvious mismatches, protected for strategic terms.
- Safeguard Hierarchy: Order safeguard (10+ orders) overrides ROAS protection, which overrides efficiency evaluation. Terms hitting multiple safeguards show the highest-priority protection reason.
Diagnostic Property Interpretation
- "Exceeds click-per-order limit": Term is converting but requiring too many clicks per order based on your scaling settings
- "ROAS above safeguard threshold": Term is protected because it meets your profitability requirements despite appearing inefficient
- "Zero orders, met click threshold": Classic waste - high clicks with no conversions and sufficient spend investment
- "ACOS far above target threshold": Term converts well but at unsustainable efficiency levels (400% above target)
Common Performance Patterns
- High-confidence negation: Terms showing "greatly exceeds" language have clear efficiency problems and represent the safest negations
- Protected by ROAS: These terms may look inefficient but generate acceptable returns - consider reviewing rather than forcing negation
- Insufficient data patterns: Terms needing "more clicks" or "more spend" are in data collection phase - let them accumulate more performance history before evaluation
Syntax
/* === Core: Search Term Waste Elimination === Purpose: Intelligently negate wasteful search terms using efficiency targets and performance analysis. Recommended: Create Negative Exact Match | Daily */ // === Core Settings === let $clicks_threshold = 20; // CORE: Base click threshold for zero-order terms let $spend_threshold = 5.00; // CORE: Base spend requirement for zero-order terms // === Strategy Settings === let $orders_min_for_acos_eval = 5; // STRATEGY: Orders required for ACOS-based evaluation let $clicks_min_for_acos_eval = 100; // STRATEGY: Clicks required for ACOS-based evaluation let $t_acos_threshold_negate = 400%; // STRATEGY: Negate if ACOS ≥ (Target ACOS × 400%) when min clicks & orders are met [e.g., 30% target = 120% threshold] // === Advanced Settings === let $clicks_scaling_per_order = 20; // ADVANCED: Additional clicks allowed per order [e.g., 2 orders = 20 + (2 × 20) = 60 clicks] let $spend_scaling_per_order = 5.00; // ADVANCED: Additional spend required per order [e.g., 2 orders = $5 + (2 × $5) = $15 spend] let $irrelevant_terms = ["NEVER_MATCH"]; // ADVANCED: Aggressively negate search terms containing these keywords (unrelated terms) let $irrelevant_clicks_threshold = 10; // ADVANCED: Clicks required to negate irrelevant terms (ignores all scaling and spend requirements) // === Safeguards === let $safeguard_orders = 10; // SAFEGUARD: Never negate terms with this many orders or more let $safeguard_min_roas_ratio = 50%; // SAFEGUARD: Protect terms with ROAS ≥ (Target ROAS × 50%) [e.g., 3.33 target ROAS = 1.67 protection] let $protected_terms = ["NEVER_MATCH"]; // SAFEGUARD: Never negate search terms containing these keywords (your brand, product names, strategic terms) // === 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"] // ============================================================================ // === Blueprint Logic === // ============================================================================ // Advanced logic below - modify carefully // Pre-calculate performance metrics let $lifetime_orders = orders(lifetime); let $lifetime_clicks = clicks(lifetime); let $lifetime_spend = spend(lifetime); let $lifetime_acos = acos(lifetime); let $lifetime_roas = roas(lifetime); // Calculate scaled thresholds based on order history let $allowed_clicks = $clicks_threshold + ($lifetime_orders * $clicks_scaling_per_order); let $spend_required = $spend_threshold + ($lifetime_orders * $spend_scaling_per_order); // Data sufficiency check (both clicks and spend) let $sufficient_data = case( $lifetime_clicks >= $allowed_clicks and $lifetime_spend >= $spend_required => 1, else 0 ); // Calculate efficiency for converting terms\ let $actual_clicks_per_order = case( $lifetime_orders > 0 => $lifetime_clicks / $lifetime_orders, else 999 // Treat zero-order terms as infinitely inefficient ); // ROAS-based protection calculation let $target_roas = case( target acos > 0 => 1 / target acos, else 0 ); let $roas_protection_threshold = case( $target_roas > 0 => $target_roas * $safeguard_min_roas_ratio, else 0 ); let $roas_protected = case( $lifetime_orders > 0 and $target_roas > 0 and $lifetime_roas >= $roas_protection_threshold => 1, else 0 ); // Search term relevance analysis let $protected_term = case( search term contains any $protected_terms => 1, else 0 ); let $irrelevant_term = case( search term contains any $irrelevant_terms => 1, else 0 ); // Protection safeguards let $high_order_protection = case( $lifetime_orders >= $safeguard_orders => 1, else 0 ); let $protected_overall = case( $high_order_protection = 1 => 1, $protected_term = 1 => 1, $roas_protected = 1 => 1, else 0 ); // Four negation paths: irrelevant, zero-order waste, efficiency, and ACOS performance let $irrelevant_candidate = case( $irrelevant_term = 1 and $lifetime_clicks >= $irrelevant_clicks_threshold => 1, else 0 ); let $zero_order_waste_candidate = case( $lifetime_orders = 0 and $sufficient_data = 1 => 1, else 0 ); let $efficiency_candidate = case( $lifetime_orders > 0 and ($lifetime_orders < $orders_min_for_acos_eval or $lifetime_clicks < $clicks_min_for_acos_eval) => case( $actual_clicks_per_order > $clicks_scaling_per_order and $sufficient_data = 1 => 1, else 0 ), else 0 ); let $performance_candidate = case( $lifetime_orders >= $orders_min_for_acos_eval and $lifetime_clicks >= $clicks_min_for_acos_eval => case( target acos > 0 and $lifetime_acos > target acos * $t_acos_threshold_negate => 1, else 0 ), else 0 ); let $negation_candidate = case( $irrelevant_candidate = 1 => 1, $zero_order_waste_candidate = 1 => 1, $efficiency_candidate = 1 => 1, $performance_candidate = 1 => 1, else 0 ); // Diagnostic properties let $reason = case( $high_order_protection = 1 => "Protected - too many orders to negate", $protected_term = 1 => "Protected - contains protected keyword", $roas_protected = 1 => "Protected - ROAS above safeguard threshold", $irrelevant_candidate = 1 => "Contains irrelevant terms, met click threshold", $irrelevant_term = 1 and $lifetime_clicks < $irrelevant_clicks_threshold => "Contains irrelevant terms, needs more clicks", $zero_order_waste_candidate = 1 => "Zero orders, met click threshold", $efficiency_candidate = 1 and $actual_clicks_per_order >= $clicks_scaling_per_order * 2 => "Greatly exceeds click-per-order limit", $efficiency_candidate = 1 => "Exceeds click-per-order limit", $performance_candidate = 1 => "ACOS far above target threshold", $sufficient_data = 0 and $lifetime_spend < $spend_required and $lifetime_clicks < $allowed_clicks => "Insufficient spend and clicks", $sufficient_data = 0 and $lifetime_spend < $spend_required => "Insufficient spend", $sufficient_data = 0 => "Insufficient clicks for order level", $lifetime_orders > 0 and ($lifetime_orders < $orders_min_for_acos_eval or $lifetime_clicks < $clicks_min_for_acos_eval) => "Converting within click-per-order limit", $lifetime_orders >= $orders_min_for_acos_eval and $lifetime_clicks >= $clicks_min_for_acos_eval => "ACOS below negation threshold", else "Zero orders, needs more clicks" ); let $result = case( $zero_order_waste_candidate = 1 => "Negate - Zero Orders, High Clicks", $irrelevant_candidate = 1 => "Negate - Irrelevant Term", $efficiency_candidate = 1 => case( $lifetime_orders = 1 => "Negate - Single Order, High Clicks", $lifetime_orders >= 2 => "Negate - Converting but Inefficient", else "Negate - Over Click Limit" ), $performance_candidate = 1 => "Negate - High ACOS (Converting Well)", $high_order_protection = 1 or $protected_term = 1 or $roas_protected = 1 => "Protected - No Action", else "No Action" ); // === Final Filter === negated = false and (campaign name contains any $include_campaigns) and (campaign name does not contain any $exclude_campaigns) and $negation_candidate = 1 and $protected_overall = 0