3 spots left for JuneGrab Yours →
Back to Blog

How a D2C beauty brand cut CAC 34% without spending a rupee less on ads

GC

Garage Collective

Growth Team

|
June 03, 20265 min read
Share:

Most brands try to fix rising acquisition cost by spending more. They add budget, add channels, add ad sets, and watch the number climb anyway. The brand in this case study did the opposite. Over one quarter, working with our Growth Clinic team, a Mumbai-based D2C beauty brand cut customer acquisition cost by 34% while holding monthly ad spend flat at roughly 18 lakh. No new channel. No price cut. No magic creative. This is the full account of what we found and what we changed, because the pattern repeats across almost every account we audit.

The starting point

When the brand came in, the founder's read was simple: Meta is getting expensive. It usually is. But expensive media is rarely the real problem. We audited 120-plus D2C ad accounts over the past year, and in most of them the cost was not coming from the auction. It was coming from waste the dashboard was hiding.

Their headline numbers looked survivable. Blended CAC sat around 1,150 rupees against an average order value of 1,400. On paper, a thin but positive margin. The problem was that almost none of those numbers were trustworthy once we pulled them apart.

What the audit found

We run every new account through the same diagnostic before we touch a single campaign. Three things surfaced in the first week.

First, the attribution was lying. The brand was reading a 2.1x ROAS inside Meta and making budget decisions on it. When we reconciled against actual settled orders in their payment gateway, the real figure was closer to 1.4x. The gap was a classic one: organic and returning customers were being claimed by paid campaigns because of a 7-day-click attribution window that swept up purchases the ads never caused. Every scaling decision they had made for six months was built on a number that was 40% too generous.

Second, the account was fighting itself. They were running 19 active ad sets on a budget that could properly feed maybe six. Most never left the learning phase, so Meta never optimised them. Worse, several were targeting overlapping audiences, which meant the brand was bidding against its own ads in the same auction and paying a premium to do it.

Third, the leak was after the click. The product pages loaded in just over five seconds on a typical 4G connection. Roughly one in four users who clicked never saw the page finish loading. The brand was paying full price for a click and then losing a quarter of it to a slow server.

What we changed

The fix was not exciting, which is exactly why it worked.

We started by rebuilding measurement. We moved them off naive last-click reporting and stood up a reconciliation that tied Meta-reported conversions back to settled gateway orders weekly. For the first time, the team was making decisions on a CAC they could actually defend. This alone changed the conversation, because half the winning campaigns turned out to be coasting on organic demand.

Then we cut the account down. Nineteen ad sets became six. We consolidated overlapping audiences into broad targeting and let the algorithm do the segmentation it is actually good at. Within two weeks, CPMs settled because the account stopped competing against itself, and the surviving ad sets finally gathered enough data to exit learning.

We rebuilt the creative around a single job per ad. The old approach asked one carousel to explain the whole catalogue. We narrowed each ad to one hero product, one specific problem, and one honest before-and-after. Hook-rate, the percentage of people who watch past the first three seconds, roughly doubled. Cheaper attention is the most underrated lever in performance marketing, and it costs nothing but discipline.

Finally, we closed the post-click gap. The engineering fix was unglamorous: compress the hero images, defer the non-critical scripts, and move the page to a faster host. Load time dropped from 5.4 seconds to under 2. The conversion rate on paid traffic rose without a single change to the ads themselves.

The result

Over the quarter, blended CAC fell from roughly 1,150 rupees to about 760, a 34% reduction, on flat spend. Because acquisition got cheaper rather than revenue getting more expensive, contribution margin moved with it. The brand did not grow by finding a new audience. It grew by no longer paying for the same one twice.

The honest version of this story is that none of these moves are proprietary. Any competent team can reconcile attribution, consolidate ad sets, sharpen creative, and speed up a page. The reason it rarely happens is that all of it is invisible from inside the dashboard, and the dashboard is where most teams live. It is far easier to approve another budget increase than to admit the number you have been reporting is wrong.

The takeaway for founders

If your CAC is climbing, the instinct to spend your way through it is the most expensive instinct you have. Before you add a rupee, ask three questions. Does your reported ROAS match the money that actually lands in your account? Is your ad spend feeding a focused account or a fragmented one? And what happens in the five seconds after someone clicks your ad? In our experience the answer to rising cost is almost never more media. It is removing the waste you have been paying for all along.

If you want to know where your account is leaking before your next budget cycle, book a Growth Consultation at garagecollective.agency. We will walk your numbers with you. No pitch deck, just the diagnosis.

Like what you're reading?

Get a free marketing plan tailored to your brand

Get Your Free Plan

yes, actually free. we're not kidding.

Key Takeaways

    the TL;DR your boss will love

    This Isn't Just Theory. We Do This Daily.

    Let us show you exactly what we'd do for your brand - strategy, channels, budget, timeline. Free. No pitch deck.

    Get Smarter Every Week

    Ideas, data, and the occasional hot take. Biweekly, no spam.

    we promise not to sell your email to robots