← Template Library Download Template ↗

Automation template

Core: Product Ad Waste Elimination

Automatically pause wasteful product ads to stop budget leaks.

Ready to use Merch Jar workflow
Version
1.1
Type
ca77192dee2c581d08f8e97bee971076
Last updated
2026-01-15T00:00:00.000Z
Active
Yes

Download this template

Description

Purpose

Automatically pause product ads that waste budget without delivering efficient results.

This Segment is for:

✓ Accounts with product ads consuming spend without converting — identifies zero-order waste after sufficient testing

✓ Campaigns where individual ASINs underperform — catches ads with poor ACOS relative to targets

✓ High-volume accounts needing automated cleanup — scales evaluation requirements based on conversion history

✓ Accounts with Target ACOS configured — required for ACOS-based evaluation

Key Features

  • Two-path evaluation: Zero-order ads evaluated on spend/clicks; converting ads evaluated on ACOS
  • Scaled data requirements: Ads with more orders require proportionally more data before pause decisions
  • Single ACOS threshold: One clear line (default 4× Target ACOS) determines pausable vs protected
  • High-volume protection: Ads with 10+ orders are never paused regardless of ACOS

Configuration Guidance

  • ACOS Safeguard (400%): This means ads are only paused if ACOS exceeds 4× your Target ACOS. At 30% target, that's 120% ACOS. Lower this for more aggressive cleanup; raise it if you're seeing false positives.
  • Scaling Settings: Default scaling requires 20 additional clicks and $5 additional spend per order before evaluation. Increase these if you want more data before decisions; set to 0 for fixed thresholds regardless of order count.
  • Target ACOS Required: Ads with orders but no Target ACOS set will not be evaluated. Ensure Target ACOS is configured at the campaign or ad group level.

Daily Automation: Set State using Paused

How it works

How the Logic Works

The segment evaluates product ads through two distinct paths based on conversion history. Zero-order ads are evaluated purely on whether they've received enough spend and clicks to constitute a fair test. Ads with orders are evaluated against your Target ACOS threshold — if ACOS exceeds the safeguard multiplier, they become pause candidates.

The key insight is that these paths require different evaluation criteria. An ad with no orders needs enough exposure to prove it can't convert. An ad with orders already has efficiency data — the question becomes whether that efficiency is acceptable.

Key Technical Concepts

Scaled Data Requirements

As ads accumulate orders, the segment requires proportionally more data before making pause decisions. This prevents premature action on ads that are converting but haven't stabilized.

With default settings (20 clicks and $5 per order via $clicks_scaling_per_order and $spend_scaling_per_order):

  • 0 orders: 20 clicks and $5 spend required
  • 1 order: 40 clicks and $10 spend required
  • 2 orders: 60 clicks and $15 spend required
  • 3 orders: 80 clicks and $20 spend required

The scaling recognizes that converting ads deserve more patience — each order represents real revenue and suggests the ad has potential.

Single ACOS Threshold

Rather than separate "evaluation" and "protection" thresholds, this segment uses one clear line. The $safeguard_acos setting (default 400%) means an ad is pausable only if its ACOS exceeds 4× your target acos. This conservative default ensures you're only pausing genuinely wasteful ads, not borderline performers that might improve.

High-Volume Protection

Ads reaching the $safeguard_orders threshold (default 10) are protected regardless of current ACOS. High order volume indicates proven demand — temporary ACOS spikes shouldn't trigger permanent pause decisions for established performers.

Configuration Deep Dive

Adjusting $safeguard_acos

  • Lower (200-300%): More aggressive cleanup, catches ads earlier. Use when margins are tight or you're confident in your Target ACOS settings.
  • Higher (500%+): Very conservative, only catches extreme waste. Use when you prefer manual review or have volatile conversion patterns.
  • At 400% with 30% Target: Ads pause at 120% ACOS — an ad spending $120 to generate $100 in sales.

Adjusting Scaling Settings

  • Set both to 0: Fixed thresholds regardless of orders. Simpler but may pause converting ads prematurely.
  • Increase scaling: Requires more data per order. Use for expensive products or long consideration cycles.
  • Asymmetric scaling: Higher $clicks_scaling_per_order + lower $spend_scaling_per_order works well for low-CPC, high-volume campaigns.

When Ads Won't Be Evaluated

  • No target acos set → Converting ads can't be evaluated (zero-order path still works)
  • Below data thresholds → Still gathering data
  • 10+ orders → Protected regardless of ACOS

Diagnostic Property Interpretation

$reason values:

  • "Protected - high order volume" → 10+ orders, will never be paused by this segment
  • "Protected - ACOS within acceptable range" → Converting efficiently enough to keep
  • "Zero orders with sufficient spend/clicks" → Fair test completed, no conversions
  • "ACOS exceeds safeguard threshold" → Converting but inefficiently
  • "Insufficient spend and clicks" → Needs more exposure before evaluation
  • "Insufficient data for order volume" → Has orders but hasn't hit scaled thresholds yet
  • "No target ACOS set" → Can't evaluate efficiency without target

$result values:

  • "Pause - Zero Orders" → Waste elimination via non-conversion
  • "Pause - High ACOS" → Waste elimination via poor efficiency
  • "Protected - No Action" → Safeguards preventing pause
  • "No Action" → Doesn't meet pause criteria

Common Performance Patterns

High Pause Volume Initially

When first deployed, you may see many pause candidates — this is the segment catching accumulated waste. Volume should decrease as the backlog clears and new ads are evaluated faster.

Clustering Around Threshold

Expect to see many ads with ACOS just below the $safeguard_acos threshold. These are your "bubble" ads — converting but barely acceptable. Consider whether your threshold is set appropriately for your margins.

Zero-Order Pauses Dominate

In accounts with many product variations, zero-order pauses often outnumber ACOS-based pauses. This is normal — most product ads simply never find their audience.

Protected Ads with High ACOS

You may see ads with 10+ orders and high ACOS showing as "Protected." This is intentional — the segment assumes high-volume ads have strategic value worth preserving. Review these manually if ACOS concerns persist.

Change log

v1.1 — Jan 2026

Simplified from three evaluation paths to two. Removed efficiency path (clicks-per-order for converting ads) in favor of single ACOS threshold. Added $safeguard_acos setting that protects ads with acceptable ACOS and gates pause decisions for converting ads. Scaling settings ($clicks_scaling_per_order, $spend_scaling_per_order) now apply to both paths.

v1.0 — Jan 2026

Initial release. Three-path evaluation: zero-order waste, efficiency (clicks-per-order), and ACOS performance.

Syntax

/*
=== Core: Product Ad Waste Elimination ===
Version: 1.1
Docs: merchjar.com/templates/core-product-ad-waste-elimination
 
Purpose: Pause wasteful product ads that have spent enough without efficient results.
Dataset: Product Ads
Recommended: Set State | Daily Schedule
*/
 
// === Core Settings ===
let $clicks_threshold = 20;                  // CORE: Base clicks required before evaluation
let $spend_threshold = 5.00;                 // CORE: Base spend required before evaluation
 
// === Safeguards ===
let $safeguard_orders = 10;                  // SAFEGUARD: Never pause ads with this many orders or more
let $safeguard_acos = 400%;                  // SAFEGUARD: Never pause if ACOS ≤ (Target × 400%) [e.g., 30% target = 120% threshold]
 
// === Advanced Settings ===
let $clicks_scaling_per_order = 20;          // ADVANCED: Additional clicks required 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]
 
// === Segment Filters ===
let $include_campaigns = [""];               // FILTER: Apply to all campaigns, or specify terms
let $exclude_campaigns = ["NEVER_MATCH"];    // FILTER: Exclude campaigns containing these terms
 
// ============================================================================
// === Segment Logic ===
// ============================================================================
 
// Performance metrics
let $lifetime_orders = orders(lifetime);
let $lifetime_clicks = clicks(lifetime);
let $lifetime_spend = spend(lifetime);
let $lifetime_acos = acos(lifetime);
 
// Scaled thresholds - require more data as orders accumulate
let $clicks_required = $clicks_threshold + ($lifetime_orders * $clicks_scaling_per_order);
let $spend_required = $spend_threshold + ($lifetime_orders * $spend_scaling_per_order);
 
// Data sufficiency
let $sufficient_data = case(
    $lifetime_clicks >= $clicks_required and $lifetime_spend >= $spend_required => 1,
    else 0
);
 
// Safeguard checks
let $high_order_protection = case(
    $lifetime_orders >= $safeguard_orders => 1,
    else 0
);
 
let $acos_protection = case(
    $lifetime_orders > 0 and target acos > 0 and $lifetime_acos <= target acos * $safeguard_acos => 1,
    else 0
);
 
// === Pausing Paths ===
 
// Zero-order waste: sufficient data with no conversions
let $zero_order_candidate = case(
    $lifetime_orders = 0 and $sufficient_data = 1 => 1,
    else 0
);
 
// Poor ACOS: has orders, sufficient data, and ACOS exceeds threshold
let $poor_acos_candidate = case(
    $lifetime_orders > 0 and $sufficient_data = 1 and target acos > 0 and $lifetime_acos > target acos * $safeguard_acos => 1,
    else 0
);
 
// Combined pausing candidate
let $pausing_candidate = case(
    $zero_order_candidate = 1 or $poor_acos_candidate = 1 => 1,
    else 0
);
 
// === Diagnostics ===
let $reason = case(
    $high_order_protection = 1 => "Protected - high order volume",
    $acos_protection = 1 => "Protected - ACOS within acceptable range",
    $zero_order_candidate = 1 => "Zero orders with sufficient spend/clicks",
    $poor_acos_candidate = 1 => "ACOS exceeds safeguard threshold",
    $lifetime_orders = 0 and $lifetime_spend < $spend_required and $lifetime_clicks < $clicks_required => "Insufficient spend and clicks",
    $lifetime_orders = 0 and $lifetime_spend < $spend_required => "Insufficient spend",
    $lifetime_orders = 0 => "Insufficient clicks",
    $lifetime_orders > 0 and $sufficient_data = 0 => "Insufficient data for order volume",
    $lifetime_orders > 0 and target acos <= 0 => "No target ACOS set",
    else "Performing within acceptable range"
);
 
let $result = case(
    $high_order_protection = 1 => "Protected - No Action",
    $acos_protection = 1 => "Protected - No Action",
    $zero_order_candidate = 1 => "Pause - Zero Orders",
    $poor_acos_candidate = 1 => "Pause - High ACOS",
    else "No Action"
);
 
// === Final Filter ===
state = "effectively enabled"
and (campaign name contains any $include_campaigns)
and (campaign name does not contain any $exclude_campaigns)
and $pausing_candidate = 1
and $high_order_protection = 0