Case 01 — Cannibalisation
The soap that stole its own sales
A personal-care brand, scaling well — around ₹40 lakh of new revenue per day. The hero was a body scrub, sold entirely through their D2C site. They never ran a rupee of ads on Amazon, Flipkart, Meesho, Nykaa, Purplle, Blinkit, Zepto or Instamart for this product. Every marketplace sale came off the back of the D2C demand. That detail matters — keep it in mind.
They launched a sibling product: a body soap from the same line. We turned on soap ads. Soap performed beautifully on the dashboard — a higher reported ROAS than the scrub itself. By every number a normal account watches, it was a winning launch.
Except the scrub started sliding. And as the scrub softened on D2C, its pull into the marketplaces softened with it. The new product was supposed to add revenue. Instead it was swapping revenue — eating its own sibling — while booking a flattering ROAS for the privilege.
Here is the mechanism, because it’s the part most teams never name. On an established account, when you launch a near-identical product, the platform optimises to the cheapest available conversions. The cheapest conversions are the people it has already reached — your existing, warm buyers. So the new ad gets served to demand that already existed, converts it, and reports it as fresh revenue at a low CAC. The CAC looks low because it was stolen from a product already running in the same account.
The trap
A low CAC on a new, similar product is often not new demand. It’s the same demand, re-credited. The dashboard rewards you for cannibalising yourself.
The real damage showed up outside the box. This brand’s normal halo was clean and measurable: every ₹100 of D2C revenue pulled roughly ₹120 across the marketplaces and quick-commerce — a 1 : 1.2 ratio, and because no marketplace ads ran, that ratio was attributable to one thing only, the D2C engine. During the cannibalisation, the halo didn’t just soften. It inverted — down to 1 : 0.9. The D2C product had stopped amplifying the marketplaces and started dragging them down.
The diagnosis, then the fix
First we killed the soap ads. The scrub recovered. That confirmed it — soap wasn’t adding, it was stealing. The harder question was the second one: how do you run the soap and get genuinely incremental revenue from it?
We tried what the platform recommends for exactly this — incremental attribution settings, exclusion of existing buyers, partnership placements. With two products this close in price and positioning, none of it delivered real incrementality. The platform kept finding its way back to the warm pool.
What worked was separation. We built the soap its own world: a separate store with the soap as the single product, a separate ad account, separate Facebook and Instagram pages, separate tracking. The soap could no longer reach into the scrub’s audience because, as far as the platform was concerned, that audience didn’t exist in its account. This is now part of how Adbuffs structures any product launch inside a shared ad account.
How we knew it was real, not just moved
“You just shifted spend to a new site” is the obvious objection. Four things rule it out, and they all moved the right way at once:
What we learned
On an established account, the platform will re-serve a near-identical new product to demand that already exists and call it new. When two products are that close, the platform’s own “incremental” tools won’t fix it. Separation will. This now dictates how we structure product launches inside an ad account before we ever spend a rupee.