Features
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.
✔ 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
$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.$clicks_threshold or $spend_threshold to require more data before action.Daily Automation: Set State to Paused
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.
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.
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.
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.
$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).$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.$reason values:$safeguard_profit and won't be paused$result values: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.
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.
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.
/*
=== 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
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.
Initial release. KDP-specific version of Product Ad Waste Elimination using blended profit and blended ACOS metrics instead of orders and standard ACOS.
/*
=== 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
© Merch Jar LLC