Features
Automatically negate zero-converting search terms to stop budget waste.
✓ Accounts with obvious search term waste - zero-order terms burning through clicks
✓ Conservative automation approach - only targets the most clear-cut waste
✓ First-time negative keyword automation - simple, safe starting point
✓ Accounts wanting budget protection without complex performance analysis
Daily Automation: Create Negative Exact Match using $action
This blueprint uses the simplest possible waste detection: zero orders + high clicks = clear waste. It evaluates each search term's lifetime performance and negates terms that have generated 20+ clicks without a single order. No complex calculations, no performance ratios - just pure waste elimination.
Conservative Targeting Philosophy: Only acts on terms with zero orders, eliminating any risk of accidentally negating valuable converting terms. This makes it ideal for first-time automation users or accounts wanting maximum safety.
Lifetime Performance Analysis: Uses complete historical data rather than recent periods, ensuring terms get adequate opportunity to convert before negation. A term needs to accumulate the full click threshold over its entire lifetime.
Binary Decision Logic: No gray areas or complex scoring - terms either qualify for negation (zero orders + sufficient clicks) or they don't. This transparency makes the automation predictable and trustworthy.
Click Threshold Selection: The 20-click default provides conservative waste removal suitable for most accounts. Increase to 30-40 clicks for accounts with higher average order values or longer consideration cycles. Decrease to 15 clicks only for very budget-conscious accounts with clear waste patterns.
Campaign Filtering Strategy: Use include/exclude filters to target specific campaign types rather than running separate blueprints. For example, set include_campaigns to ["Auto"] to focus on automatic targeting waste, or exclude_campaigns to ["Brand"] to protect brand campaigns.
Action Results: Simple "Negate" or "Keep" output makes it easy to audit automation decisions. "Negate" indicates the term met both criteria (zero orders + click threshold). "Keep" covers all other scenarios including converting terms and terms below the click threshold.
Expected Volume: In healthy accounts, expect 5-15% of search terms to qualify for negation. Higher percentages may indicate targeting issues, while very low percentages suggest the click threshold might be too conservative.
High-Waste Scenarios: Accounts with broad keyword targeting or automatic campaigns often see significant waste elimination in the first weeks of deployment. This is normal and indicates the automation is working effectively.
Low-Activity Periods: During slower seasons or after campaign restructuring, fewer terms will qualify for negation. This doesn't indicate a problem - the automation naturally adapts to activity levels.
Upgrade Considerations: This blueprint focuses only on zero-order waste. Accounts wanting to address converting but inefficient terms, or terms with poor ACOS performance, should consider the Core-level Search Term Waste Elimination blueprint for more sophisticated analysis.
/*
=== Basics: Search Term Waste Elimination ===
Purpose: Automatically negate zero-converting search terms to stop budget waste.
Recommended: Create Negative Exact Match | Daily
*/
// === Core Settings ===
let $base_clicks = 20; // CORE: Clicks required to negate zero-order terms (0 orders + 20 clicks = negated)
// === Campaign Filters ===
let $include_campaigns = [""]; // FILTER: Apply to all campaigns, or specify terms like ["SP-", "Auto"]
let $exclude_campaigns = ["NEVER_MATCH"]; // FILTER: Exclude campaigns containing these terms, e.g., ["Brand", "Test"]
// ============================================================================
// === Blueprint Logic ===
// ============================================================================
// Advanced logic below - modify carefully
// Pre-calculate performance metrics
let $lifetime_orders = orders(lifetime);
let $lifetime_clicks = clicks(lifetime);
// Simple waste removal: zero orders with sufficient clicks
let $waste_candidate = case(
$lifetime_orders = 0 and $lifetime_clicks >= $base_clicks => 1,
else 0
);
// Diagnostic properties
let $action = case(
$waste_candidate = 1 => "Negate",
else "Keep"
);
// === Final Filter ===
negated = false
and (campaign name contains any $include_campaigns)
and (campaign name does not contain any $exclude_campaigns)
and $waste_candidate = 1
/*
/*
=== Basics: Search Term Waste Elimination ===
Purpose: Automatically negate zero-converting search terms to stop budget waste.
Recommended: Create Negative Exact Match | Daily
*/
// === Core Settings ===
let $base_clicks = 20; // CORE: Clicks required to negate zero-order terms (0 orders + 20 clicks = negated)
// === Campaign Filters ===
let $include_campaigns = [""]; // FILTER: Apply to all campaigns, or specify terms like ["SP-", "Auto"]
let $exclude_campaigns = ["NEVER_MATCH"]; // FILTER: Exclude campaigns containing these terms, e.g., ["Brand", "Test"]
// ============================================================================
// === Blueprint Logic ===
// ============================================================================
// Advanced logic below - modify carefully
// Pre-calculate performance metrics
let $lifetime_orders = orders(lifetime);
let $lifetime_clicks = clicks(lifetime);
// Simple waste removal: zero orders with sufficient clicks
let $waste_candidate = case(
$lifetime_orders = 0 and $lifetime_clicks >= $base_clicks => 1,
else 0
);
// Diagnostic properties
let $action = case(
$waste_candidate = 1 => "Negate",
else "Keep"
);
// === Final Filter ===
negated = false
and (campaign name contains any $include_campaigns)
and (campaign name does not contain any $exclude_campaigns)
and $waste_candidate = 1
/*
Intelligently negate wasteful search terms using KDP performance data and relevance analysis.
✓ KDP accounts wanting sophisticated waste analysis beyond just zero-conversion terms
✓ Authors with blended profit data from both sales and page reads for reliable analysis
✓ Campaigns mixing fiction and non-fiction requiring profit-scaled efficiency thresholds
✓ Accounts needing KENP-aware optimization that considers page read engagement patterns
Daily Automation: Create Negative Exact Match using automatic detection
This blueprint uses four distinct negation paths to identify wasteful search terms in KDP campaigns. It combines profit-scaled efficiency analysis with KDP-specific blended metrics to account for both immediate sales and page read engagement. The system automatically adjusts click thresholds based on the blended profit generated, allowing higher-value terms more opportunity to convert while quickly identifying true waste.
Profit-Scaled Click Thresholds: Base threshold (20 clicks) increases by 4 clicks per dollar of blended profit generated. A term generating $5 in blended profit gets 40 total clicks before evaluation (20 + 5×4). This prevents negating terms that show profitability but need more volume to optimize.
Blended Performance Analysis: Uses KDP-specific metrics that combine sales revenue and estimated KENP royalties. This captures terms that drive page reads but not immediate sales, or vice versa, providing complete performance visibility for subscription-based reading.
Four-Path Negation Logic: Irrelevant terms (fast negation with minimal data), zero-profit waste (no engagement after sufficient testing), efficiency violations (converting but requiring too many clicks), and performance failures (converting well but poor blended ACOS).
Blended ROAS Protection: Prevents negating profitable terms by calculating target blended ROAS from target blended ACOS and protecting terms achieving 50% of that threshold. This safeguards against accidentally removing terms with acceptable profitability ratios.
Profit Scaling Strategy: The 4.0 clicks per dollar works well for mixed-genre accounts. Increase to 6.0+ for high-value non-fiction or business books where longer consideration cycles are normal. Decrease to 2.5-3.0 for quick-decision romance or thriller genres.
Target Blended ACOS Context: KDP campaigns typically target 100% blended ACOS (break-even) rather than 30% profit margins common in physical products. This reflects the different economics of digital content and subscription reading models.
Threshold Multiplier Applications: Use 1.5x for conservative accounts wanting more data before decisions, or 0.8x for aggressive waste removal in budget-constrained campaigns. This scales all thresholds proportionally while maintaining relative relationships.
Safeguard Balance: The $50 blended profit safeguard protects established performers while allowing aggressive optimization of low-value terms. Adjust based on your typical book price points and engagement patterns.
Efficiency vs Performance Negations: "Over Click Limit" indicates converting terms that require too many clicks per dollar of profit generated. "High Blended ACOS" indicates terms converting efficiently but with poor profitability ratios.
Protection Classifications: "Blended ROAS protection" means the term shows acceptable profitability even if other metrics suggest negation. "Too much blended profit" indicates established revenue streams that warrant protection regardless of efficiency.
Data Sufficiency Signals: "Insufficient clicks for profit level" means the term hasn't reached its profit-scaled threshold yet. This helps distinguish between terms needing more time versus clear non-performers.
Genre-Specific Behavior: Romance and thriller terms tend to convert quickly or fail clearly, leading to faster negation decisions. Business and self-help terms often show gradual profit accumulation, benefiting from profit-scaled thresholds.
Page Read Dynamics: Terms driving significant page reads but few sales will show in efficiency rather than zero-profit categories. The blended profit calculation captures this engagement and adjusts thresholds accordingly.
Seasonal Adaptation: During high-traffic periods (holidays, back-to-school), the profit scaling naturally accommodates increased engagement without premature negation. The system becomes more selective as terms generate more blended profit.
Volume Expectations: Expect 15-25% of search terms to qualify for negation in mature KDP campaigns, with higher percentages in the first weeks of deployment. The multi-path approach captures waste that simple zero-conversion analysis might miss.
/*
=== KDP Core: Search Term Waste Elimination ===
Purpose: Intelligently negate wasteful search terms using performance data and relevance analysis.
Recommended: Create Negative Exact Match | Daily
*/
// === Core Settings ===
let $clicks_threshold = 20; // CORE: Base click threshold for zero-profit terms
let $spend_threshold = 5.00; // CORE: Minimum lifetime spend required for evaluation
// === Strategy Settings ===
let $blend_profit_min_for_acos_eval = 20.00; // STRATEGY: Blended profit required for ACOS-based evaluation ($20.00 threshold)
let $clicks_min_for_acos_eval = 100; // STRATEGY: Clicks required for ACOS-based evaluation
let $t_blend_acos_threshold_negate = 500%; // STRATEGY: Negate if blended ACOS ≥ (Target Blended ACOS × 500%) when min clicks & profit are met [e.g., 100% target = 500% threshold]
// === Advanced Settings ===
let $clicks_scaling_per_dollar = 4.0; // ADVANCED: Additional clicks allowed per $1.00 blended profit [e.g., $5 profit = 20 + (5 × 4) = 40 clicks]
let $threshold_multiplier = 1.0; // ADVANCED: Scales testing thresholds for clicks and spend [e.g., 1.5 = 50% higher requirements]
let $spend_scaling_enabled = 0; // ADVANCED: Scale spend requirement with profit using threshold multiplier (1=yes, 0=no) [e.g., 0 profit = $5, $5 profit = $10]
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_blend_profit = 50.00; // SAFEGUARD: Never negate terms with this much blended profit or more
let $safeguard_min_blended_roas_ratio = 50%; // SAFEGUARD: Protect terms with blended ROAS ≥ (Target Blended ROAS × 50%) [e.g., 1.0 target ROAS = 0.5 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_blended_profit = blended profit(lifetime);
let $lifetime_clicks = clicks(lifetime);
let $lifetime_spend = spend(lifetime);
let $lifetime_blended_acos = blended acos(lifetime);
let $lifetime_blended_roas = blended roas(lifetime);
// Calculate scaled click threshold based on blended profit
let $base_clicks_threshold = $clicks_threshold * $threshold_multiplier;
let $allowed_clicks = $base_clicks_threshold + ($lifetime_blended_profit * $clicks_scaling_per_dollar * $threshold_multiplier);
let $spend_required = case(
$spend_scaling_enabled = 1 => $spend_threshold + (($lifetime_blended_profit / 5.0) * $threshold_multiplier * $spend_threshold),
else $spend_threshold
);
// Data sufficiency check (both clicks and spend)
let $sufficient_data = case(
$lifetime_clicks >= $allowed_clicks and $lifetime_spend >= $spend_required => 1,
else 0
);
// Blended ROAS-based protection calculation
let $target_blended_roas = case(
target acos > 0 => 1 / target acos,
else 0
);
let $blended_roas_protection_threshold = case(
$target_blended_roas > 0 => $target_blended_roas * $safeguard_min_blended_roas_ratio,
else 0
);
let $blended_roas_protected = case(
$lifetime_blended_profit > 0 and $target_blended_roas > 0 and $lifetime_blended_roas >= $blended_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_profit_protection = case(
$lifetime_blended_profit >= $safeguard_blend_profit => 1,
else 0
);
let $protected_overall = case(
$high_profit_protection = 1 => 1,
$protected_term = 1 => 1,
$blended_roas_protected = 1 => 1,
else 0
);
// Four negation paths: irrelevant, zero-profit waste, efficiency, and ACOS performance
let $irrelevant_candidate = case(
$irrelevant_term = 1 and $lifetime_clicks >= $irrelevant_clicks_threshold => 1,
else 0
);
let $zero_profit_waste_candidate = case(
$lifetime_blended_profit = 0 and $sufficient_data = 1 => 1,
else 0
);
let $efficiency_candidate = case(
$lifetime_blended_profit > 0 and ($lifetime_blended_profit < $blend_profit_min_for_acos_eval or $lifetime_clicks < $clicks_min_for_acos_eval) => case(
$sufficient_data = 1 => 1,
else 0
),
else 0
);
let $performance_candidate = case(
$lifetime_blended_profit >= $blend_profit_min_for_acos_eval and $lifetime_clicks >= $clicks_min_for_acos_eval => case(
target acos > 0 and $lifetime_blended_acos > target acos * $t_blend_acos_threshold_negate => 1,
else 0
),
else 0
);
let $negation_candidate = case(
$irrelevant_candidate = 1 => 1,
$zero_profit_waste_candidate = 1 => 1,
$efficiency_candidate = 1 => 1,
$performance_candidate = 1 => 1,
else 0
);
// Diagnostic properties
let $reason = case(
$high_profit_protection = 1 => "Protected - too much blended profit to negate",
$protected_term = 1 => "Protected - contains protected keyword",
$blended_roas_protected = 1 => "Protected - blended 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_profit_waste_candidate = 1 => "Zero blended profit, met click threshold",
$efficiency_candidate = 1 and $lifetime_clicks >= $allowed_clicks * 1.5 => "Greatly exceeds profit-scaled click limit",
$efficiency_candidate = 1 => "Exceeds profit-scaled click limit",
$performance_candidate = 1 => "Blended 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 profit level",
$lifetime_blended_profit > 0 and ($lifetime_blended_profit < $blend_profit_min_for_acos_eval or $lifetime_clicks < $clicks_min_for_acos_eval) => "Converting within profit-scaled click limit",
$lifetime_blended_profit >= $blend_profit_min_for_acos_eval and $lifetime_clicks >= $clicks_min_for_acos_eval => "Blended ACOS below negation threshold",
else "Zero blended profit, needs more clicks"
);
let $result = case(
$zero_profit_waste_candidate = 1 => "Negate - Zero Profit, High Clicks",
$irrelevant_candidate = 1 => "Negate - Irrelevant Term",
$efficiency_candidate = 1 => case(
$lifetime_blended_profit <= 5.00 => "Negate - Low Profit, High Clicks",
$lifetime_blended_profit >= 15.00 => "Negate - Converting but Inefficient",\
else "Negate - Over Click Limit"
),
$performance_candidate = 1 => "Negate - High Blended ACOS",
$high_profit_protection = 1 or $protected_term = 1 or $blended_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
/*
=== KDP Core: Search Term Waste Elimination ===
Purpose: Intelligently negate wasteful search terms using performance data and relevance analysis.
Recommended: Create Negative Exact Match | Daily
*/
// === Core Settings ===
let $clicks_threshold = 20; // CORE: Base click threshold for zero-profit terms
let $spend_threshold = 5.00; // CORE: Minimum lifetime spend required for evaluation
// === Strategy Settings ===
let $blend_profit_min_for_acos_eval = 20.00; // STRATEGY: Blended profit required for ACOS-based evaluation ($20.00 threshold)
let $clicks_min_for_acos_eval = 100; // STRATEGY: Clicks required for ACOS-based evaluation
let $t_blend_acos_threshold_negate = 500%; // STRATEGY: Negate if blended ACOS ≥ (Target Blended ACOS × 500%) when min clicks & profit are met [e.g., 100% target = 500% threshold]
// === Advanced Settings ===
let $clicks_scaling_per_dollar = 4.0; // ADVANCED: Additional clicks allowed per $1.00 blended profit [e.g., $5 profit = 20 + (5 × 4) = 40 clicks]
let $threshold_multiplier = 1.0; // ADVANCED: Scales testing thresholds for clicks and spend [e.g., 1.5 = 50% higher requirements]
let $spend_scaling_enabled = 0; // ADVANCED: Scale spend requirement with profit using threshold multiplier (1=yes, 0=no) [e.g., 0 profit = $5, $5 profit = $10]
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_blend_profit = 50.00; // SAFEGUARD: Never negate terms with this much blended profit or more
let $safeguard_min_blended_roas_ratio = 50%; // SAFEGUARD: Protect terms with blended ROAS ≥ (Target Blended ROAS × 50%) [e.g., 1.0 target ROAS = 0.5 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_blended_profit = blended profit(lifetime);
let $lifetime_clicks = clicks(lifetime);
let $lifetime_spend = spend(lifetime);
let $lifetime_blended_acos = blended acos(lifetime);
let $lifetime_blended_roas = blended roas(lifetime);
// Calculate scaled click threshold based on blended profit
let $base_clicks_threshold = $clicks_threshold * $threshold_multiplier;
let $allowed_clicks = $base_clicks_threshold + ($lifetime_blended_profit * $clicks_scaling_per_dollar * $threshold_multiplier);
let $spend_required = case(
$spend_scaling_enabled = 1 => $spend_threshold + (($lifetime_blended_profit / 5.0) * $threshold_multiplier * $spend_threshold),
else $spend_threshold
);
// Data sufficiency check (both clicks and spend)
let $sufficient_data = case(
$lifetime_clicks >= $allowed_clicks and $lifetime_spend >= $spend_required => 1,
else 0
);
// Blended ROAS-based protection calculation
let $target_blended_roas = case(
target acos > 0 => 1 / target acos,
else 0
);
let $blended_roas_protection_threshold = case(
$target_blended_roas > 0 => $target_blended_roas * $safeguard_min_blended_roas_ratio,
else 0
);
let $blended_roas_protected = case(
$lifetime_blended_profit > 0 and $target_blended_roas > 0 and $lifetime_blended_roas >= $blended_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_profit_protection = case(
$lifetime_blended_profit >= $safeguard_blend_profit => 1,
else 0
);
let $protected_overall = case(
$high_profit_protection = 1 => 1,
$protected_term = 1 => 1,
$blended_roas_protected = 1 => 1,
else 0
);
// Four negation paths: irrelevant, zero-profit waste, efficiency, and ACOS performance
let $irrelevant_candidate = case(
$irrelevant_term = 1 and $lifetime_clicks >= $irrelevant_clicks_threshold => 1,
else 0
);
let $zero_profit_waste_candidate = case(
$lifetime_blended_profit = 0 and $sufficient_data = 1 => 1,
else 0
);
let $efficiency_candidate = case(
$lifetime_blended_profit > 0 and ($lifetime_blended_profit < $blend_profit_min_for_acos_eval or $lifetime_clicks < $clicks_min_for_acos_eval) => case(
$sufficient_data = 1 => 1,
else 0
),
else 0
);
let $performance_candidate = case(
$lifetime_blended_profit >= $blend_profit_min_for_acos_eval and $lifetime_clicks >= $clicks_min_for_acos_eval => case(
target acos > 0 and $lifetime_blended_acos > target acos * $t_blend_acos_threshold_negate => 1,
else 0
),
else 0
);
let $negation_candidate = case(
$irrelevant_candidate = 1 => 1,
$zero_profit_waste_candidate = 1 => 1,
$efficiency_candidate = 1 => 1,
$performance_candidate = 1 => 1,
else 0
);
// Diagnostic properties
let $reason = case(
$high_profit_protection = 1 => "Protected - too much blended profit to negate",
$protected_term = 1 => "Protected - contains protected keyword",
$blended_roas_protected = 1 => "Protected - blended 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_profit_waste_candidate = 1 => "Zero blended profit, met click threshold",
$efficiency_candidate = 1 and $lifetime_clicks >= $allowed_clicks * 1.5 => "Greatly exceeds profit-scaled click limit",
$efficiency_candidate = 1 => "Exceeds profit-scaled click limit",
$performance_candidate = 1 => "Blended 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 profit level",
$lifetime_blended_profit > 0 and ($lifetime_blended_profit < $blend_profit_min_for_acos_eval or $lifetime_clicks < $clicks_min_for_acos_eval) => "Converting within profit-scaled click limit",
$lifetime_blended_profit >= $blend_profit_min_for_acos_eval and $lifetime_clicks >= $clicks_min_for_acos_eval => "Blended ACOS below negation threshold",
else "Zero blended profit, needs more clicks"
);
let $result = case(
$zero_profit_waste_candidate = 1 => "Negate - Zero Profit, High Clicks",
$irrelevant_candidate = 1 => "Negate - Irrelevant Term",
$efficiency_candidate = 1 => case(
$lifetime_blended_profit <= 5.00 => "Negate - Low Profit, High Clicks",
$lifetime_blended_profit >= 15.00 => "Negate - Converting but Inefficient",\
else "Negate - Over Click Limit"
),
$performance_candidate = 1 => "Negate - High Blended ACOS",
$high_profit_protection = 1 or $protected_term = 1 or $blended_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
Stop ad spend waste by automatically negating inefficient search terms across all campaigns.
Daily Automation: Create Negative Exact Match using built-in logic
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.
/*
=== 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
/*
=== 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
© Merch Jar LLC