Meta Budget Optimizer
SkillDev toolsWhen the user wants to scale, pause, or reallocate Meta ad budget based on performance. Use when the user mentions "scale Meta ads", "increase Facebook budget", "pause underperforming Meta ads", "daily Meta optimization", or "budget rules for Facebook". For full diagnostics see meta-campaign-audit. For cross-channel moves see cross-channel-budget.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the Meta Budget Optimizer skill
What this skill tells your AI
The instructions your AI receives, as published by appeeky/ua-skills in skills/meta-budget-optimizer/SKILL.md and read by ahel’s review.
Daily and weekly budget allocation rules for Meta app campaigns. Apply after meta-campaign-setup launch and initial meta-campaign-audit at 48h.
Scale winners in small steps. Kill losers fast. Never let a bad ad eat 70% of spend unchecked.
Initial Assessment
- Read
app-ads-context.md— target CPA, LTV, monthly cap - Confirm active campaigns via
meta_ads_list_campaigns - Pull last 3 days ad-level insights before any change
Core Rules Engine
| Condition | Confidence | Action |
|---|---|---|
| CPA < 0.8× target, 20+ conv | High | +20% daily budget |
| CPA 0.8–1.2× target | Medium | Hold budget |
| CPA 1.2–1.5× target, 15+ conv | Medium | Hold; watch 48h |
| CPA > 1.5× target, 15+ conv | High | −20% budget or pause weakest ad |
| Spend > 2× CPA, 0 conv | High | Pause ad immediately |
| Frequency > 3.5, CTR down 25%+ | Medium | No scale — add creative first |
| Ad set CPA < target, budget capped noon | High | Raise budget +20% |
| Campaign hits monthly cap | — | Reallocate from losers |
Scale Increment Cap
Never increase > 20% per day on campaigns under $500/day — disrupts learning phase.
| Current daily budget | Max single increase |
|---|---|
| $30–100 | +20% ($6–20) |
| $100–500 | +20% |
| $500+ | +15–20% (test impact) |
| $2K+ | +10–15% optional cost cap test |
Daily Workflow
Step 1 — Pull Data
meta_ads_insights
target_type: "ad_account"
level: "ad"
date_preset: "last_3d"
fields: "spend,impressions,clicks,ctr,cpc,frequency,actions,cost_per_action_type"
limit: 100
Or ad set scoped:
meta_ads_insights
target_type: "adset"
target_id: "<adset-id>"
level: "ad"
date_preset: "last_3d"
fields: "spend,impressions,clicks,ctr,frequency,actions,cost_per_action_type"
Step 2 — Rank Ads by CPA
Sort ads with ≥ 5 conversions by CPA ascending. Ads with 0 conversions: check spend vs 2× CPA kill rule first.
| Tier | Definition | Budget share target |
|---|---|---|
| S | CPA < 0.8× target | 50–70% of ad set spend |
| A | CPA 0.8–1.0× target | 20–30% |
| B | CPA 1.0–1.2× target | 10–20% hold |
| C | CPA > 1.2× target | Pause or min delivery |
| F | 0 conv, spend > 2× CPA | Pause |
Step 3 — Apply Rules
Document each action before executing.
Step 4 — Execute Updates
Pause loser:
meta_ads_update_ad
ad_id: "<ad-id>"
status: "PAUSED"
Scale ad set:
meta_ads_update_adset
adset_id: "<adset-id>"
daily_budget_minor: 6000
Scale campaign (CBO only):
meta_ads_update_campaign
campaign_id: "<campaign-id>"
daily_budget_minor: 15000
Reduce budget:
meta_ads_update_adset
adset_id: "<adset-id>"
daily_budget_minor: 4000
Writes: 2 Appeeky API credits each.
Weekly Workflow
| Day | Action |
|---|---|
| Monday | Full audit — meta-campaign-audit scorecard |
| Tue–Thu | Daily optimizer (this skill) |
| Friday | Creative fatigue check; plan refresh |
| Weekend | Light check unless high spend |
Weekly Reallocation
If running multiple ad sets:
- Sum spend-weighted CPA per ad set
- Shift 10–20% budget from worst quartile to best
- Do not move > 20% total budget in one day
Budget Cap Safety
Monthly Pacing
Monthly cap from app-ads-context: $10,000
Days remaining: 12
Spend to date: $7,200
Remaining: $2,800 → max $233/day
If current run rate exceeds cap, reduce budgets proportionally — don't wait for month-end.
Learning Phase Protection
| Situation | Rule |
|---|---|
| Ad set < 50 conversions total | Avoid > 20% budget changes |
| New creative added same day | Don't scale budget same day |
| Geo expansion launch | Start at test budget; don't scale 7d |
Frequency Gate (no scale)
Before any scale action, check winner frequency:
meta_ads_insights
target_type: "ad"
target_id: "<winner-ad-id>"
date_preset: "last_7d"
fields: "frequency,ctr"
| Frequency | Scale? |
|---|---|
| < 2.5 | Yes if CPA good |
| 2.5–3.5 | Scale cautiously (+10%) |
| > 3.5 | No scale — ad-creative-edit or new variant first |
CBO vs ABO Strategy
| Mode | When | Optimizer focus |
|---|---|---|
| ABO (ad set budget) | Testing phase | Per ad set rules |
| CBO (campaign budget) | 1+ proven ad sets | Campaign-level cap; pause bad ad sets |
| Hybrid | Scale phase | CBO on winners campaign; ABO on tests |
Testing: ABO — you control spend per test. Scaling: CBO — Meta shifts to winners within campaign.
Cross-Channel Rules
Pull comparison from cross-channel-performance:
| Condition | Action |
|---|---|
| Meta CPA > TikTok CPA by 30%+ | Flag for cross-channel-budget |
| Meta ROAS best in portfolio | Protect Meta share |
| Meta CPA rising 3 days straight | Check creative fatigue before cut |
| ASA brand cheap, Meta broad expensive | Normal — different intent |
Do not slash Meta purely on CPA if LTV by channel differs — use campaign-profitability.
Decision Log Template
# Meta Budget Optimizer — [Date]
**Target CPA:** $20 | **Period:** last_3d
## Actions Taken
| Entity | Before | After | Reason |
|--------|--------|-------|--------|
| Ad set US-iOS | $50/day | $60/day | CPA $14, 22 conv |
| Ad D - Transform | ACTIVE | PAUSED | $45 spend, 0 conv |
| Ad C - Premium | ACTIVE | ACTIVE | Hold — CPA $19, 8 conv |
## Ad Rankings
| Ad | Spend | Conv | CPA | Tier | Action |
|----|-------|------|-----|------|--------|
| B - UGC | $120 | 18 | $6.67 | S | Benefiting from scale |
| A - Problem | $95 | 12 | $7.92 | S | |
| C - Premium | $60 | 3 | $20.00 | B | Hold |
| D - Transform | $45 | 0 | — | F | Paused |
## Tomorrow
- [ ] Recheck C tier after 24h
- [ ] A′ creative on B if frequency > 3
## Monthly Pace
- Spend MTD: $X / $cap — on track / over
Scenario Playbook
Scenario: One ad dominates spend, good CPA
- Action: Allow — Meta found winner. Ensure losers paused if CPA bad.
- Optional: Duplicate winner to new ad set for incremental scale at 50+ conv.
Scenario: All ads mediocre CPA (1.2–1.5×)
- Action: Hold budget. Run
ad-creative-editon best CTR ad. - Do not scale hoping it fixes itself.
Scenario: CPA spiked after scale
- Action: Revert last budget increase. Check frequency and creative age.
- Rule: If CPA > 1.3× target for 48h post-scale, roll back.
Scenario: Budget spent by 2pm daily
- Action: +20% budget if CPA < target. If CPA bad, don't raise — delivery is telling you something.
Scenario: iOS reporting lag
- Action: Use MMP CPA for decisions. Hold kills unless 2× CPA spend rule.
Benchmarks
| Metric | Scale signal | Cut signal |
|---|---|---|
| CPA vs target | < 0.8× | > 1.5× |
| 3-day CPA trend | Flat or down | Up 25%+ |
| Frequency | < 3 | > 3.5 |
| Spend pacing | Even delivery | Front-loaded junk |
| Winner conv count | 20+ | < 5 (hold) |
Common Mistakes
| Mistake | Fix |
|---|---|
| +50% budget day | Max +20% |
| Scaling with frequency 4 | Refresh creative first |
| Not pausing 0-conv ads | 2× CPA kill rule |
| Daily major restructures | One change type per day |
| Ignoring monthly cap | Pacing math weekly |
| CBO too early | ABO for tests first |
| Emotional creative loyalty | Data tier system |
Pre-Flight Checklist
- [ ] last_3d insights pulled
- [ ] Target CPA from app-ads-context.md
- [ ] Losers identified (F tier)
- [ ] Frequency checked on scale candidates
- [ ] Budget increase ≤ 20%
- [ ] Monthly pace checked
- [ ] Actions logged for user
Automation Cadence
| Spend level | Check frequency |
|---|---|
| < $50/day | 1× daily |
| $50–200/day | 2× daily (morning, evening) |
| $200+/day | 2× daily + weekly audit |
| $1K+/day | Consider rules + human review |
Don't hover hourly — Meta delivery fluctuates intraday.
Related Skills
meta-campaign-audit— full diagnostic scorecardmeta-campaign-setup— structure referencead-creative-edit— fatigue refresh before scalead-creative-variants— new batch when all tiers weakcampaign-profitability— LTV-weighted decisionscross-channel-budget— reallocate vs TikTok/ASAcross-channel-performance— channel comparison dataapp-ads-context— caps and targets
Signals
- GitHub stars
- 55
- Forks
- 5
- Last commit
- Aug 2026
Advanced
- Catalog kind
- skill
- Gateway key
meta-budget-optimizer- Source
- github.com/appeeky/ua-skills