← Template Library Download Template ↗

Automation template

KDP Core: Product Ad Waste Elimination

Automatically pause wasteful product ads to stop budget leaks for KDP advertisers.

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

Download this template

Description

Purpose

Automatically pause product ads that have consumed budget without generating efficient blended profit, using KDP-specific metrics that account for both sales and KENP royalties.

This Segment is for:

✔ KDP publishers running Sponsored Products ads — uses blended profit instead of orders for accurate KDP performance measurement

✔ Stopping budget leaks from non-converting ads — pauses ads that spend without generating meaningful profit

✔ Protecting profitable ads automatically — scales requirements based on profit level so winners keep running

✔ Accounts with Target ACOS configured — uses your targets to determine acceptable blended ACOS thresholds

Key Features

  • Blended Profit Scaling: Click and spend thresholds increase proportionally with profit—ads generating $10 in blended profit get more runway than ads with $0, ensuring you don't prematurely pause potential winners.
  • Dual Protection System: Ads are protected both by absolute profit level ($50+ default) and by blended ACOS performance relative to your target, preventing pauses on ads that are actually working.
  • Two Pausing Paths: Identifies both zero-profit waste (ads that never convert) and poor-efficiency waste (ads that convert but at unacceptable blended ACOS), catching different failure modes.
  • KDP-Native Metrics: Built specifically for KDP using blended profit and blended ACOS, which combine sales revenue and KENP royalties for accurate publisher performance measurement.

Configuration Guidance

  • Target ACOS Setup: This segment requires Target ACOS to evaluate blended ACOS performance. For KDP, typical targets are around 100% blended ACOS (break-even on ad spend). Set targets in Ad Manager at the campaign or ad group level.
  • Safeguard Tuning: The default $safeguard_profit of $50 protects ads that have generated meaningful revenue. Increase this if you want more protection for moderate performers, or decrease if you want faster cleanup.
  • Threshold Sensitivity: Default thresholds (20 clicks, $5 spend base) are conservative. If you're seeing too many pauses on newer ads, increase $clicks_threshold or $spend_threshold to require more data before action.

Daily Automation: Set State to Paused

How it works

How the Logic Works

This segment evaluates each product ad's lifetime performance using KDP-specific blended metrics, then determines whether sufficient data exists to make a pausing decision. Thresholds scale dynamically with blended profit—every $5 in profit earns additional clicks and spend allowance before the ad can be paused. Ads that exceed data thresholds with zero profit or unacceptable blended ACOS are flagged for pausing, while profitable ads receive automatic protection.

Key Technical Concepts

Profit-Scaled Thresholds

The segment uses $5 of blended profit as one scaling unit. An ad with $0 profit needs only 20 clicks and $5 spend to be evaluated. An ad with $10 profit (2 units) needs 60 clicks and $15 spend. This ensures ads showing early promise get more runway to prove themselves, while clear losers are identified quickly.

Blended Metrics for KDP

Standard Amazon segments use orders and ACOS, but KDP revenue comes from both book sales and KENP page reads. Blended profit combines these revenue streams, and blended ACOS measures spend efficiency against total profit rather than just sales. This prevents the segment from pausing ads that drive significant KENP revenue but few direct sales.

Dual Pausing Paths

The segment identifies two distinct types of waste: zero-profit ads that have consumed sufficient budget without any return, and poor-efficiency ads that generate some profit but at a blended ACOS far exceeding your target. Both paths require sufficient data before action, but use different criteria for the pause decision.

Configuration Deep Dive

Safeguard Settings

  • $safeguard_profit = 50.00: Ads with $50+ lifetime blended profit are never paused regardless of efficiency. This protects proven performers from temporary ACOS spikes. Increase for more protection, decrease for stricter efficiency requirements.
  • $safeguard_acos = 400%: Ads with blended ACOS at or below 4× your target are protected from the poor-ACOS pausing path. At a 100% target, this means ads under 400% blended ACOS won't be paused for efficiency reasons (though zero-profit ads still can be).

Scaling Settings

  • $clicks_scaling_per_profit_unit = 20: Each $5 of profit adds 20 clicks to the threshold. Higher values give profitable ads more runway; lower values enforce stricter efficiency standards.
  • $spend_scaling_per_profit_unit = 5.00: Each $5 of profit adds $5 to the spend threshold. This ensures the segment accounts for both click volume and actual dollars invested.

Diagnostic Property Interpretation

$reason values:

  • "Protected - high blended profit" → Ad has exceeded $safeguard_profit and won't be paused
  • "Protected - blended ACOS within acceptable range" → Ad is profitable and under the ACOS threshold
  • "Zero blended profit with sufficient spend/clicks" → Ad has enough data and no profit—will be paused
  • "Blended ACOS exceeds safeguard threshold" → Ad converts but too inefficiently—will be paused
  • "Insufficient spend and clicks" → Not enough data yet for evaluation
  • "Insufficient spend" → Clicks threshold met but spend threshold not reached
  • "Insufficient clicks" → Spend threshold met but clicks threshold not reached
  • "Insufficient data for profit level" → Has profit but hasn't hit scaled thresholds yet
  • "No target ACOS set" → Cannot evaluate efficiency without a target
  • "Performing within acceptable range" → Has profit, sufficient data, and acceptable ACOS

$result values:

  • "Pause - Zero Profit" → Pausing due to no blended profit despite sufficient data
  • "Pause - High Blended ACOS" → Pausing due to efficiency below acceptable threshold
  • "Protected - No Action" → Ad is protected by safeguards
  • "No Action" → Ad doesn't meet pausing criteria

Common Performance Patterns

New Ads Accumulating Data

Newly launched ads will show "Insufficient spend and clicks" until they hit base thresholds (20 clicks, $5 spend). This is expected behavior—the segment waits for meaningful data before making decisions. If ads are being paused too quickly, increase the base thresholds.

Profitable Ads Getting More Runway

An ad with $15 in blended profit needs 80 clicks and $20 spend before it can be evaluated for pausing. You'll see "Insufficient data for profit level" on these ads until they hit their scaled thresholds. This prevents premature pauses on ads showing promise.

High-Volume Protected Ads

Ads exceeding $safeguard_profit will consistently show "Protected - high blended profit" even if their recent ACOS has spiked. If you want to enforce efficiency on high-profit ads, consider lowering the safeguard or using a separate segment for high-volume optimization.

Change log

v1.1 — January 2026

Simplified profit scaling by removing user-configurable $profit_unit setting. Profit units now hardcoded at $5 increments with scaling explained in setting comments. Aligned structure with standard Product Ad Waste Elimination for consistency across library. Consolidated from four pausing paths to two cleaner paths: zero-profit and poor-ACOS.

v1.0 — January 2026

Initial release. KDP-specific version of Product Ad Waste Elimination using blended profit and blended ACOS metrics instead of orders and standard ACOS.

Syntax

/*
=== KDP Core: Product Ad Waste Elimination ===
Version: 1.1
Docs: merchjar.com/templates/kdp-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_profit = 50.00;               // SAFEGUARD: Never pause ads with this much blended profit ($) or more
let $safeguard_acos = 400%;                  // SAFEGUARD: Never pause if blended ACOS ≤ (Target × 400%) [e.g., 100% target = 400% threshold]
 
// === Advanced Settings ===
let $clicks_scaling_per_profit_unit = 20;    // ADVANCED: Additional clicks required per $5 blended profit [e.g., $10 profit = 20 + 40 = 60 clicks]
let $spend_scaling_per_profit_unit = 5.00;   // ADVANCED: Additional spend required per $5 blended profit [e.g., $10 profit = $5 + $10 = $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_profit = blended profit(lifetime);
let $lifetime_clicks = clicks(lifetime);
let $lifetime_spend = spend(lifetime);
let $lifetime_acos = blended acos(lifetime);
 
// Calculate profit units for scaling ($5 = 1 unit)
let $profit_units = case(
    $lifetime_profit > 0 => $lifetime_profit / 5,
    else 0
);
 
// Scaled thresholds - require more data as profit accumulates
let $clicks_required = $clicks_threshold + ($profit_units * $clicks_scaling_per_profit_unit);
let $spend_required = $spend_threshold + ($profit_units * $spend_scaling_per_profit_unit);
 
// Data sufficiency
let $sufficient_data = case(
    $lifetime_clicks >= $clicks_required and $lifetime_spend >= $spend_required => 1,
    else 0
);
 
// Safeguard checks
let $high_profit_protection = case(
    $lifetime_profit >= $safeguard_profit => 1,
    else 0
);
 
let $acos_protection = case(
    $lifetime_profit > 0 and target acos > 0 and $lifetime_acos <= target acos * $safeguard_acos => 1,
    else 0
);
 
// === Pausing Paths ===
 
// Zero-profit waste: sufficient data with no profit
let $zero_profit_candidate = case(
    $lifetime_profit <= 0 and $sufficient_data = 1 => 1,
    else 0
);
 
// Poor ACOS: has profit, sufficient data, and blended ACOS exceeds threshold
let $poor_acos_candidate = case(
    $lifetime_profit > 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_profit_candidate = 1 or $poor_acos_candidate = 1 => 1,
    else 0
);
 
// === Diagnostics ===
let $reason = case(
    $high_profit_protection = 1 => "Protected - high blended profit",
    $acos_protection = 1 => "Protected - blended ACOS within acceptable range",
    $zero_profit_candidate = 1 => "Zero blended profit with sufficient spend/clicks",
    $poor_acos_candidate = 1 => "Blended ACOS exceeds safeguard threshold",
    $lifetime_profit <= 0 and $lifetime_spend < $spend_required and $lifetime_clicks < $clicks_required => "Insufficient spend and clicks",
    $lifetime_profit <= 0 and $lifetime_spend < $spend_required => "Insufficient spend",
    $lifetime_profit <= 0 => "Insufficient clicks",
    $lifetime_profit > 0 and $sufficient_data = 0 => "Insufficient data for profit level",
    $lifetime_profit > 0 and target acos <= 0 => "No target ACOS set",
    else "Performing within acceptable range"
);
 
let $result = case(
    $high_profit_protection = 1 => "Protected - No Action",
    $acos_protection = 1 => "Protected - No Action",
    $zero_profit_candidate = 1 => "Pause - Zero Profit",
    $poor_acos_candidate = 1 => "Pause - High Blended 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_profit_protection = 0