Features
Automatically scale budgets up for high-performing campaigns and rightsize bloated budgets that aren't being utilized.
✓ KDP advertisers with campaigns hitting budget caps while maintaining good Blended ACOS
✓ Accounts with oversized budgets that consistently underspend and need rightsizing
✓ Sellers wanting hands-off budget optimization that accounts for KENP revenue
✓ Accounts with Target ACOS configured at the campaign level or above
Blended ACOS justifies more spend7d, 14d, or 30d data based on blended profit volume for reliable decisionsDaily or Multiple Times Daily Automation: Change Daily Budget using Set ($) with $new_budget
The blueprint manages budgets through two distinct paths: increases for high-performing campaigns hitting budget caps, and rightsizing for campaigns with sustained low utilization. Performance evaluation uses Blended ACOS to capture both sales and KENP royalty revenue, ensuring KDP-specific profitability drives budget decisions.
Campaigns qualify for budget increases through two routes:
When triggered, budgets increase by 20% (configurable). This creates steady scaling rather than dramatic jumps.
Campaigns qualify for rightsizing when:
Rightsized budget = average daily spend × 130% buffer, with floor protection.
The blueprint selects the most recent period with sufficient blended profit for reliable evaluation:
When enabled, the blueprint calculates minimum budget needed for data collection: Average CPC × minimum daily clicks (default 5). This prevents budgets from dropping so low that campaigns can't gather meaningful performance data.
Defines how much blended profit a time period needs before its Blended ACOS is considered reliable. This prevents small sample sizes from driving budget decisions. Adjust based on your typical book economics:
High Utilization (90%): The percentage of budget that indicates a campaign is effectively capped. Lower values (80-85%) trigger increases earlier but may scale campaigns that aren't truly constrained.
Low Utilization (50%): The percentage below which campaigns are considered oversized. Higher values (60-70%) rightsize more aggressively but may cut budgets on campaigns with legitimate spend variability.
Prevents rapid-fire budget decreases. The blueprint checks if any budget change occurred within this window before rightsizing. This protects campaigns with naturally variable spend patterns from being repeatedly cut.
When enabled, budgets won't drop below what's needed for minimum daily clicks. This is particularly important for KDP where individual clicks can be expensive and data collection requires consistent impression share.
Gradual scaling on winners: Campaigns hitting caps with good Blended ACOS will increase 20% per cycle. Running multiple times daily accelerates scaling for high-performers.
Rightsizing clusters: After enabling, expect a wave of budget decreases on campaigns that were set high "just in case." This is normal and frees up budget for better performers.
Cooldown blocking: You may see campaigns with low utilization showing "cooldown active." This is the blueprint protecting against over-correction - the campaign will rightsize after the 14-day window.
CPC minimum increases: New or low-budget campaigns may get increases purely for data collection. This is intentional - campaigns need clicks to prove performance.
No action on poor performers: Campaigns hitting budget caps but with poor Blended ACOS won't get increases. The blueprint protects you from scaling waste.
/*
=== KDP Core: Adaptive Budget Management ===
Purpose: Prevents budget waste while ensuring adequate spend for data collection and performance scaling.
Recommended: Change Daily Budget | Set ($) using $new_budget | Daily or Multiple Times Daily
*/
// === Core Settings ===
let $high_utilization = 90%; // CORE: Daily spend % that indicates budget constraint
let $low_utilization = 50%; // CORE: Daily budget utilization % that triggers rightsizing
let $enable_cpc_minimums = 1; // ADVANCED: Enable CPC-based budget minimums (1=yes, 0=no)
// === Budget Increases (High Utilization) ===
let $t_blend_acos_threshold_increase = 130%; // STRATEGY: Increase budget when blended ACOS ≤ (Target Blended ACOS × 130%) [e.g., 100% target = 130% threshold]
let $budget_increase_pct = 20%; // STRATEGY: Percentage increase when scaling up
let $blend_profit_min = 12.00; // STRATEGY: Minimum blended profit needed for reliable ACOS evaluation ($12.00 threshold)
let $acos_eval_short = 7d; // TIME: Recent performance period
let $acos_eval_medium = 14d; // TIME: Medium-term performance period
let $acos_eval_long = 30d; // TIME: Long-term performance period
// === Budget Rightsizing (Low Utilization) ===
let $spend_buffer = 130%; // STRATEGY: Buffer above avg daily spend when rightsizing (budget set to 130% avg daily spend)
let $budget_min = 5.00; // STRATEGY: Absolute minimum budget floor for rightsizing
let $cooldown_eval_period = 14d; // TIME: Period for sustained utilization evaluation
let $cooldown_period = 14d; // TIME: Wait period between rightsizing actions
// === CPC-Based Budget Minimums ===
let $min_daily_clicks = 5; // ADVANCED: Minimum clicks per day budget should support
let $cpc_eval_period = 60d; // ADVANCED: Period for calculating average CPC for minimum budget
// === Segment 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", "Archive"]
// ============================================================================
// === Blueprint Logic ===
// ============================================================================
// Advanced logic below - modify carefully
// Increase Path: Individual daily budget cap analysis
let $today_spend = spend(0d..0d);
let $yesterday_spend = spend(1d..1d);
let $day2_spend = spend(2d..2d);
let $day3_spend = spend(3d..3d);
let $today_capped = case($today_spend >= budget * $high_utilization => 1, else 0);
let $yesterday_capped = case($yesterday_spend >= budget * $high_utilization => 1, else 0);
let $day2_capped = case($day2_spend >= budget * $high_utilization => 1, else 0);
let $day3_capped = case($day3_spend >= budget * $high_utilization => 1, else 0);
let $any_day_budget_capped = case(
$today_capped = 1 or $yesterday_capped = 1 or $day2_capped = 1 or $day3_capped = 1 => 1,
else 0
);
// Increase Path: CPC-based data sufficiency check
let $avg_cpc = cpc($cpc_eval_period);
let $min_budget_for_data = case(
$enable_cpc_minimums = 1 and $avg_cpc > 0 => $avg_cpc * $min_daily_clicks,
else 0 // Data minimums disabled or no CPC data
);
let $budget_too_small = case(
$enable_cpc_minimums = 1 and $avg_cpc > 0 and budget < $min_budget_for_data => 1,
else 0
);
// Increase Path: Performance evaluation for increases (prioritize recent data)
let $blend_profit_short = blended profit($acos_eval_short);
let $blend_profit_medium = blended profit($acos_eval_medium);
let $blend_profit_long = blended profit($acos_eval_long);
let $performance_blend_acos = case(
$blend_profit_short >= $blend_profit_min => blended acos($acos_eval_short),
$blend_profit_medium >= $blend_profit_min => blended acos($acos_eval_medium),
$blend_profit_long >= $blend_profit_min => blended acos($acos_eval_long),
else 99999 // No reliable blended ACOS data
);
let $acos_good_for_increase = case(
$performance_blend_acos = 99999 => 1, // No blended ACOS data = allow increase
target acos <= 0 => 0, // Invalid target
$performance_blend_acos <= (target acos * $t_blend_acos_threshold_increase) => 1,
else 0
);
// Rightsizing Path: Sustained utilization analysis
let $total_spend = spend($cooldown_eval_period);
let $days_in_eval = 14; // Days in 14d period
let $avg_daily_spend = $total_spend / $days_in_eval;
let $avg_utilization_rate = case(
budget > 0 => $avg_daily_spend / budget,
else 0
);
// Calculate effective minimum for decreases early
let $effective_min_for_decreases = case(
$min_budget_for_data > $budget_min => $min_budget_for_data, // Use CPC minimum if higher
else $budget_min // Otherwise use absolute minimum
);
let $rightsizing_cooldown_passed = case(
is_null(last budget change) => 1,
last budget change < now() - interval($cooldown_period) => 1,
else 0
);
// Decision logic by path
let $should_increase = case(
$budget_too_small = 1 => 1, // Data-starved campaign
$any_day_budget_capped = 1 and $acos_good_for_increase = 1 => 1, // Budget-capped + good performance
else 0
);
let $should_rightsize = case(
$rightsizing_cooldown_passed = 0 => 0, // Cooldown period active
budget <= $effective_min_for_decreases => 0, // Already at or below minimum - don't rightsize
$avg_utilization_rate < $low_utilization => 1, // Sustained low utilization (including 0% from no spend)
else 0
);
// Calculate new budget
let $increase_budget = budget * (1 + $budget_increase_pct);
// For rightsizing, calculate based on actual usage plus buffer
let $rightsized_budget = case(
$avg_daily_spend > 0 => $avg_daily_spend * $spend_buffer,
else $budget_min // No spend = use minimum budget
);
let $calculated_budget = case(
$should_increase = 1 => $increase_budget,
$should_rightsize = 1 => $rightsized_budget,
else budget
);
// Apply minimums - different rules for increases vs decreases
let $final_minimum = case(
$should_rightsize = 1 => case(
$effective_min_for_decreases > 1.00 => $effective_min_for_decreases, // Use effective minimum if higher than platform
else 1.00 // Otherwise platform minimum
),
$should_increase = 1 and $budget_too_small = 1 => case(
$min_budget_for_data > 1.00 => $min_budget_for_data, // Use CPC minimum for data generation increases
else 1.00 // Platform minimum
),
else 1.00 // Platform minimum for budget-capping increases
);
let $new_budget = case(
$calculated_budget < $final_minimum => $final_minimum,
else $calculated_budget
);
// Diagnostic properties
let $reason = case(
target acos <= 0 => "No target blended ACOS set",
$should_increase = 1 and $budget_too_small = 1 => case(
$avg_utilization_rate <= 0.10 => "[0-10%] Below CPC minimum threshold",
$avg_utilization_rate <= 0.30 => "[10-30%] Below CPC minimum threshold",
$avg_utilization_rate <= 0.50 => "[30-50%] Below CPC minimum threshold",
$avg_utilization_rate <= 0.70 => "[50-70%] Below CPC minimum threshold",
$avg_utilization_rate <= 0.90 => "[70-90%] Below CPC minimum threshold",
else "[90%+] Below CPC minimum threshold"
),
$should_increase = 1 => case(
$avg_utilization_rate <= 0.70 => "[50-70%] Above high utilization threshold, blended ACOS acceptable",
$avg_utilization_rate <= 0.90 => "[70-90%] Above high utilization threshold, blended ACOS acceptable",
else "[90%+] Above high utilization threshold, blended ACOS acceptable"
),
$rightsizing_cooldown_passed = 0 => case(
$avg_utilization_rate = 0 => "[0%] Below low utilization threshold, cooldown active",
$avg_utilization_rate <= 0.10 => "[0-10%] Below low utilization threshold, cooldown active",
$avg_utilization_rate <= 0.30 => "[10-30%] Below low utilization threshold, cooldown active",
$avg_utilization_rate <= 0.50 => "[30-50%] Below low utilization threshold, cooldown active",
else "[50%+] Below low utilization threshold, cooldown active"
),
$should_rightsize = 1 => case(
$avg_utilization_rate = 0 => "[0%] Below low utilization threshold",
$avg_utilization_rate <= 0.10 => "[0-10%] Below low utilization threshold",
$avg_utilization_rate <= 0.30 => "[10-30%] Below low utilization threshold",
$avg_utilization_rate <= 0.50 => "[30-50%] Below low utilization threshold",
else "[50-70%] Below low utilization threshold"
),
$any_day_budget_capped = 1 and $acos_good_for_increase = 0 => case(
$avg_utilization_rate <= 0.70 => "[50-70%] Above high utilization threshold, blended ACOS too high",
$avg_utilization_rate <= 0.90 => "[70-90%] Above high utilization threshold, blended ACOS too high",
else "[90%+] Above high utilization threshold, blended ACOS too high"
),
budget <= $effective_min_for_decreases => case(
$avg_utilization_rate = 0 => "[0%] Budget below rightsizing minimum",
$avg_utilization_rate <= 0.30 => "[0-30%] Budget below rightsizing minimum",
else "[30-50%] Budget below rightsizing minimum"
),
else case(
$avg_utilization_rate = 0 => "[0%] Within acceptable utilization",
$avg_utilization_rate <= 0.10 => "[0-10%] Within acceptable utilization",
$avg_utilization_rate <= 0.30 => "[10-30%] Within acceptable utilization",
$avg_utilization_rate <= 0.50 => "[30-50%] Within acceptable utilization",
$avg_utilization_rate <= 0.70 => "[50-70%] Within acceptable utilization",
$avg_utilization_rate <= 0.90 => "[70-90%] Within acceptable utilization",
else "[90%+] Within acceptable utilization"
)
);
let $result = case(
$should_increase = 1 and $budget_too_small = 1 => "Budget Increase: CPC Minimum",
$should_increase = 1 => "Budget Increase: High Utilization",
$should_rightsize = 1 => "Budget Decrease: Rightsizing",
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 ($should_increase = 1 or $should_rightsize = 1)
and $new_budget != budget
/*
=== KDP Core: Adaptive Budget Management ===
Purpose: Prevents budget waste while ensuring adequate spend for data collection and performance scaling.
Recommended: Change Daily Budget | Set ($) using $new_budget | Daily or Multiple Times Daily
*/
// === Core Settings ===
let $high_utilization = 90%; // CORE: Daily spend % that indicates budget constraint
let $low_utilization = 50%; // CORE: Daily budget utilization % that triggers rightsizing
let $enable_cpc_minimums = 1; // ADVANCED: Enable CPC-based budget minimums (1=yes, 0=no)
// === Budget Increases (High Utilization) ===
let $t_blend_acos_threshold_increase = 130%; // STRATEGY: Increase budget when blended ACOS ≤ (Target Blended ACOS × 130%) [e.g., 100% target = 130% threshold]
let $budget_increase_pct = 20%; // STRATEGY: Percentage increase when scaling up
let $blend_profit_min = 12.00; // STRATEGY: Minimum blended profit needed for reliable ACOS evaluation ($12.00 threshold)
let $acos_eval_short = 7d; // TIME: Recent performance period
let $acos_eval_medium = 14d; // TIME: Medium-term performance period
let $acos_eval_long = 30d; // TIME: Long-term performance period
// === Budget Rightsizing (Low Utilization) ===
let $spend_buffer = 130%; // STRATEGY: Buffer above avg daily spend when rightsizing (budget set to 130% avg daily spend)
let $budget_min = 5.00; // STRATEGY: Absolute minimum budget floor for rightsizing
let $cooldown_eval_period = 14d; // TIME: Period for sustained utilization evaluation
let $cooldown_period = 14d; // TIME: Wait period between rightsizing actions
// === CPC-Based Budget Minimums ===
let $min_daily_clicks = 5; // ADVANCED: Minimum clicks per day budget should support
let $cpc_eval_period = 60d; // ADVANCED: Period for calculating average CPC for minimum budget
// === Segment 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", "Archive"]
// ============================================================================
// === Blueprint Logic ===
// ============================================================================
// Advanced logic below - modify carefully
// Increase Path: Individual daily budget cap analysis
let $today_spend = spend(0d..0d);
let $yesterday_spend = spend(1d..1d);
let $day2_spend = spend(2d..2d);
let $day3_spend = spend(3d..3d);
let $today_capped = case($today_spend >= budget * $high_utilization => 1, else 0);
let $yesterday_capped = case($yesterday_spend >= budget * $high_utilization => 1, else 0);
let $day2_capped = case($day2_spend >= budget * $high_utilization => 1, else 0);
let $day3_capped = case($day3_spend >= budget * $high_utilization => 1, else 0);
let $any_day_budget_capped = case(
$today_capped = 1 or $yesterday_capped = 1 or $day2_capped = 1 or $day3_capped = 1 => 1,
else 0
);
// Increase Path: CPC-based data sufficiency check
let $avg_cpc = cpc($cpc_eval_period);
let $min_budget_for_data = case(
$enable_cpc_minimums = 1 and $avg_cpc > 0 => $avg_cpc * $min_daily_clicks,
else 0 // Data minimums disabled or no CPC data
);
let $budget_too_small = case(
$enable_cpc_minimums = 1 and $avg_cpc > 0 and budget < $min_budget_for_data => 1,
else 0
);
// Increase Path: Performance evaluation for increases (prioritize recent data)
let $blend_profit_short = blended profit($acos_eval_short);
let $blend_profit_medium = blended profit($acos_eval_medium);
let $blend_profit_long = blended profit($acos_eval_long);
let $performance_blend_acos = case(
$blend_profit_short >= $blend_profit_min => blended acos($acos_eval_short),
$blend_profit_medium >= $blend_profit_min => blended acos($acos_eval_medium),
$blend_profit_long >= $blend_profit_min => blended acos($acos_eval_long),
else 99999 // No reliable blended ACOS data
);
let $acos_good_for_increase = case(
$performance_blend_acos = 99999 => 1, // No blended ACOS data = allow increase
target acos <= 0 => 0, // Invalid target
$performance_blend_acos <= (target acos * $t_blend_acos_threshold_increase) => 1,
else 0
);
// Rightsizing Path: Sustained utilization analysis
let $total_spend = spend($cooldown_eval_period);
let $days_in_eval = 14; // Days in 14d period
let $avg_daily_spend = $total_spend / $days_in_eval;
let $avg_utilization_rate = case(
budget > 0 => $avg_daily_spend / budget,
else 0
);
// Calculate effective minimum for decreases early
let $effective_min_for_decreases = case(
$min_budget_for_data > $budget_min => $min_budget_for_data, // Use CPC minimum if higher
else $budget_min // Otherwise use absolute minimum
);
let $rightsizing_cooldown_passed = case(
is_null(last budget change) => 1,
last budget change < now() - interval($cooldown_period) => 1,
else 0
);
// Decision logic by path
let $should_increase = case(
$budget_too_small = 1 => 1, // Data-starved campaign
$any_day_budget_capped = 1 and $acos_good_for_increase = 1 => 1, // Budget-capped + good performance
else 0
);
let $should_rightsize = case(
$rightsizing_cooldown_passed = 0 => 0, // Cooldown period active
budget <= $effective_min_for_decreases => 0, // Already at or below minimum - don't rightsize
$avg_utilization_rate < $low_utilization => 1, // Sustained low utilization (including 0% from no spend)
else 0
);
// Calculate new budget
let $increase_budget = budget * (1 + $budget_increase_pct);
// For rightsizing, calculate based on actual usage plus buffer
let $rightsized_budget = case(
$avg_daily_spend > 0 => $avg_daily_spend * $spend_buffer,
else $budget_min // No spend = use minimum budget
);
let $calculated_budget = case(
$should_increase = 1 => $increase_budget,
$should_rightsize = 1 => $rightsized_budget,
else budget
);
// Apply minimums - different rules for increases vs decreases
let $final_minimum = case(
$should_rightsize = 1 => case(
$effective_min_for_decreases > 1.00 => $effective_min_for_decreases, // Use effective minimum if higher than platform
else 1.00 // Otherwise platform minimum
),
$should_increase = 1 and $budget_too_small = 1 => case(
$min_budget_for_data > 1.00 => $min_budget_for_data, // Use CPC minimum for data generation increases
else 1.00 // Platform minimum
),
else 1.00 // Platform minimum for budget-capping increases
);
let $new_budget = case(
$calculated_budget < $final_minimum => $final_minimum,
else $calculated_budget
);
// Diagnostic properties
let $reason = case(
target acos <= 0 => "No target blended ACOS set",
$should_increase = 1 and $budget_too_small = 1 => case(
$avg_utilization_rate <= 0.10 => "[0-10%] Below CPC minimum threshold",
$avg_utilization_rate <= 0.30 => "[10-30%] Below CPC minimum threshold",
$avg_utilization_rate <= 0.50 => "[30-50%] Below CPC minimum threshold",
$avg_utilization_rate <= 0.70 => "[50-70%] Below CPC minimum threshold",
$avg_utilization_rate <= 0.90 => "[70-90%] Below CPC minimum threshold",
else "[90%+] Below CPC minimum threshold"
),
$should_increase = 1 => case(
$avg_utilization_rate <= 0.70 => "[50-70%] Above high utilization threshold, blended ACOS acceptable",
$avg_utilization_rate <= 0.90 => "[70-90%] Above high utilization threshold, blended ACOS acceptable",
else "[90%+] Above high utilization threshold, blended ACOS acceptable"
),
$rightsizing_cooldown_passed = 0 => case(
$avg_utilization_rate = 0 => "[0%] Below low utilization threshold, cooldown active",
$avg_utilization_rate <= 0.10 => "[0-10%] Below low utilization threshold, cooldown active",
$avg_utilization_rate <= 0.30 => "[10-30%] Below low utilization threshold, cooldown active",
$avg_utilization_rate <= 0.50 => "[30-50%] Below low utilization threshold, cooldown active",
else "[50%+] Below low utilization threshold, cooldown active"
),
$should_rightsize = 1 => case(
$avg_utilization_rate = 0 => "[0%] Below low utilization threshold",
$avg_utilization_rate <= 0.10 => "[0-10%] Below low utilization threshold",
$avg_utilization_rate <= 0.30 => "[10-30%] Below low utilization threshold",
$avg_utilization_rate <= 0.50 => "[30-50%] Below low utilization threshold",
else "[50-70%] Below low utilization threshold"
),
$any_day_budget_capped = 1 and $acos_good_for_increase = 0 => case(
$avg_utilization_rate <= 0.70 => "[50-70%] Above high utilization threshold, blended ACOS too high",
$avg_utilization_rate <= 0.90 => "[70-90%] Above high utilization threshold, blended ACOS too high",
else "[90%+] Above high utilization threshold, blended ACOS too high"
),
budget <= $effective_min_for_decreases => case(
$avg_utilization_rate = 0 => "[0%] Budget below rightsizing minimum",
$avg_utilization_rate <= 0.30 => "[0-30%] Budget below rightsizing minimum",
else "[30-50%] Budget below rightsizing minimum"
),
else case(
$avg_utilization_rate = 0 => "[0%] Within acceptable utilization",
$avg_utilization_rate <= 0.10 => "[0-10%] Within acceptable utilization",
$avg_utilization_rate <= 0.30 => "[10-30%] Within acceptable utilization",
$avg_utilization_rate <= 0.50 => "[30-50%] Within acceptable utilization",
$avg_utilization_rate <= 0.70 => "[50-70%] Within acceptable utilization",
$avg_utilization_rate <= 0.90 => "[70-90%] Within acceptable utilization",
else "[90%+] Within acceptable utilization"
)
);
let $result = case(
$should_increase = 1 and $budget_too_small = 1 => "Budget Increase: CPC Minimum",
$should_increase = 1 => "Budget Increase: High Utilization",
$should_rightsize = 1 => "Budget Decrease: Rightsizing",
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 ($should_increase = 1 or $should_rightsize = 1)
and $new_budget != budget
© Merch Jar LLC