Home / Course / Module 09

Module 09

Scaling: horizontal vs vertical without breaking things

7 min read · pairs with tools/facebook.

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:

  1. Adset is profitable (ROAS > 1.4× sustained over 3+ days).
  2. Frequency < 2.5 (audience isn't saturated).
  3. 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.
  4. Wait 48 hours. Don't touch it. Don't check it 17 times a day.
  5. If ROAS held or improved → bump again. If ROAS dropped >20% → revert to previous budget, wait 24h, try smaller bump.
Why bumps and not doubles: Facebook's algorithm enters a 24–48h "learning phase" after any significant adset change. During learning, performance is unstable. A +20% change is small enough that the algorithm doesn't fully reset. Doubling the budget triggers a hard reset — the buyer pocket gets re-explored from scratch.

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:

  1. 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.
  2. 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.
  3. 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.
  4. 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.).
  5. 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.

Action: Once you have a profitable adset for 3+ days, schedule the operator's scaling cron. Or do it by hand: +20% every 48h on the winner, duplicate to new lookalike sizes once a week, watch frequency, rotate creative when it climbs.