DEV Community

강해수
강해수

Posted on • Originally published at themedilog.com

My best-looking ROAS campaigns were quietly destroying subscription revenue

Campaigns with the cleanest ROAS dashboards had collapsed subscription attach rates — from 40% down to under 12% — and nobody noticed for weeks.

Here's what happened: subscription checkouts and one-off purchases were firing into the same Purchase event, feeding a single tROAS target. The algorithm did exactly what it was told. It found conversions at the target ROAS, and the cheaper, more abundant one was the one-off buyer. Subscription LTV over 12 months in these accounts ran 3.5x–6x the one-off AOV for the same SKU. A ₩29,000/month skincare subscription is worth ₩348,000 in year one. The ₩38,000 one-off buyer is done. Blended into one ROAS target, the platform has no mechanism to weight them differently — so it doesn't.

The fix is structural, not a settings tweak. Two separate conversion actions, two separate campaign containers. On Meta, splitting at the ad set level inside one campaign doesn't hold — the delivery system still blends optimization signal. The separation only works cleanly at the campaign level. On Google PMax, two separate campaigns with separate conversion goals assigned. I also tested value rules as a shortcut for six weeks: they adjust reported value but the underlying audience signal the model uses for prospecting still treats both buyer types as the same conversion. Subscription rate didn't move.

The part that actually makes bid separation work — and where most implementations stop short — is what value you pass as the conversion signal. Checkout revenue is the wrong number for a subscription. I fire a separate Subscribe_Complete event with a value parameter set to projected 6-month LTV, not the transaction amount, via Cloudflare Workers intercepting the post-purchase webhook within 2 seconds of checkout. That's what the tROAS target is actually bidding against.

One caveat worth naming: this only makes sense when the LTV gap is real. If subscription LTV is only 1.5x one-off AOV, the volume fragmentation from separation probably costs more than the targeting precision gains. The threshold I use is 2.5x. Below that, consolidation may genuinely be the right call.

I wrote up the full breakdown — including the exact 3-check decision flow I run on day 3 of every new campaign, and a simpler fallback for teams that can't build the webhook infra yet — over on themedilog.

Full post →

Top comments (0)