Automation template
Core: Product Ad Waste Elimination
Automatically pause wasteful product ads to stop budget leaks.
- Version
- 1.1
- Type
- ca77192dee2c581d08f8e97bee971076
- Last updated
- 2026-01-15T00:00:00.000Z
- Active
- Yes
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.
Recommended Workflow
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_orderworks well for low-CPC, high-volume campaigns.
When Ads Won't Be Evaluated
- No
target acosset → 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