CAC cut 33% while active-both-sides grew 2.1×.
Two-sided services marketplace over-buying supply in saturated cities and under-buying demand in supply-rich cities. Rebuilt against liquidity gates, not vanity signups.
Why the account was underperforming.
Signups optimized as one funnel. Cities with supply oversupply still receiving supply-side ads. Signup ≠ active - 60% of signups never transacted. No cohort MMM.
What actually changed.
Split budget by side
Two-sided campaign split with independent budget allocators. Buyer vs seller / rider vs driver as separate P&Ls.
Liquidity dashboards feed bidding
Real-time supply–demand ratios by city drive bid modifiers. Kill switch on when imbalance exceeds thresholds.
Held out supply in over-saturated geos
Supply-side campaigns paused in 22 cities. Match rate improved; CAC dropped.
60-day active as the event
Rebuilt attribution around 60-day active rather than signup. Networks optimizing to real users.
Cohort MMM by city
MMM run per-city with population + density controls. Budget reallocated quarterly against caused-active rate.
What the account looked like after.
Blended CAC cut 33%. Active-both-sides users grew 2.1× on the same total budget. Contribution margin per active user up 27%. Geo-lift tests saved 22% of programmatic budget on autopilot renewals.