Scaling: horizontal vs vertical without breaking things
You have a profitable adset. ROAS > 1.5×. CPA below 60% of payout. You want more of it. The wrong move (cranking the budget 5× in a day) kills the adset within hours — the algorithm exits the buyer pocket it was finding and you're suddenly paying tourist prices. Scaling is the art of getting more volume without leaving the pocket.
Two axes of scaling
| Vertical (up) | Horizontal (out) |
|---|---|
| Increase the budget on the existing winning adset. | Duplicate the adset with a new audience, geo, or placement. |
| Risk: algorithm reset → CPA spike. | Risk: new audience doesn't perform → wasted spend. |
| Best when: clear buyer pocket, frequency < 2.5, low CPM. | Best when: existing adset is hitting frequency ceiling. |
Do both. Most affiliates lean too hard on one and stall.
Vertical scaling rules
The +20%/48h rule from Module 08, expanded:
- Adset is profitable (ROAS > 1.4× sustained over 3+ days).
- Frequency < 2.5 (audience isn't saturated).
- Bump budget by +20% to +50%. Stay closer to 20% if you've never scaled this adset; up to 50% once you've done several successful bumps.
- Wait 48 hours. Don't touch it. Don't check it 17 times a day.
- If ROAS held or improved → bump again. If ROAS dropped >20% → revert to previous budget, wait 24h, try smaller bump.
When vertical stops working
Eventually you'll hit a budget where ROAS won't recover after a bump. Usually around 5–10× your starting budget on that adset. That's the audience telling you it's tapped. Switch to horizontal.
Horizontal scaling rules
Duplicate the winning adset. Change one variable per duplicate. The variables, in order of usual success:
- New lookalike size. If you had 1% LAL, duplicate with 2%, then 3%, then 5%. Each is a slightly broader version of the same buyer profile.
- New interest stack. Same niche, different combination. e.g. blood sugar adset 1 used diabetes + glucose meter; adset 2 uses insulin resistance + low-carb diet.
- New geo. If US worked, duplicate with US + CA + AU + UK (Tier-1 English). Then expand to Tier-2 (DE, FR, IT) — note that you may need translated creative.
- New placement. If you let Advantage+ Placements pick, the winning adset is mostly running on one placement. Duplicate with placement forced to a different one (Stories only, Reels only, etc.).
- New creative angle. Same audience, different hook — this protects against creative fatigue.
Naming convention
You'll have 20+ adsets soon. Adopt a naming convention now or you'll lose your mind. Suggested:
[OFFER]_[AUDIENCE]_[CREATIVE]_[BUDGET]_v[N]
Examples:
GLUCO6_LAL1_VID-hook-mornings_30_v1
GLUCO6_LAL3_VID-hook-mornings_30_v2
GLUCO6_INT-diabetes_IMG-doc-quote_50_v1
When to switch to CBO
Once you have 3+ stable winning adsets, put them in a Campaign Budget Optimization (CBO) campaign. Set the campaign budget to the sum of the adset budgets (or a bit higher), let FB redistribute across the adsets dynamically.
CBO works because: (a) it concentrates spend on whichever adset is currently performing best on a given day, (b) it smooths out daily variance, (c) it lets you scale the campaign budget without touching individual adsets and triggering learning resets.
Don't use CBO with fewer than 3 winners. With one or two adsets, CBO just dumps all the money into the leader and starves the other — same as if you raised that adset's budget directly, with extra steps.
Watching for creative fatigue
Even a winning creative dies. The signs:
- Frequency climbs above 3.5 (people are seeing the ad too many times)
- CTR drops 30%+ from baseline
- CPM climbs (FB charging more to reach the saturated audience)
- CPA drifts up over a week
Fix: rotate in a new creative variant in the same adset (don't change anything else). If the new creative recovers performance → fatigue was the issue. If not → the audience itself is tapped, scale horizontal.
When scaling stops
Every offer has a ceiling. For most Clickbank/Digistore24 offers, the ceiling is somewhere between $500 and $5,000/day of spend before the audience is genuinely exhausted in the geos you can reach. Hitting that ceiling means:
- Find a new offer in the same niche (your pixel + audience knowledge transfers).
- Or open a new geo (translate the lander + creative).
- Or switch niches and start over — the playbook is the same, the assets aren't.
How the operator scales
campaign_scale_vertical(adset_id, factor=1.2) bumps the budget per rule 1. campaign_scale_horizontal(adset_id, variant="lookalike_3pct") duplicates with the named variable change.
The agent runs both on a 48-hour cron when in scale mode — it reads the metrics, applies the rules, narrates what it did, asks for confirmation only on large vertical bumps (>50%) or geo expansions.