🔥 Silent Burn

Facebook Ads for D2C & Eco Brands: Why Great ROAS Doesn't Show Up in Your Bank Account

Optimise for the actual Purchase — the paid order — and make sure Meta can see it. If you point a D2C campaign at traffic, landing-page views, or even add-to-cart, Meta becomes an expert at buying you exactly that: cheap clicks and browsers who never check out. Point it at the purchase and it goes looking for people who buy. Same budget, same creatives, completely different people. The catch — and the reason so many product brands sit on a "great" ROAS that never reaches the bank — is that Meta can only optimise for, and only count, an event it can measure. For a D2C brand selling online, that gap between what Meta sees and what you actually get paid is where the money quietly leaks. We see it inside wellness and eco-product sellers of every size, and the owners are never careless — the dashboard simply never told them.

Why does my Facebook ROAS look great when my bank balance doesn't move?

Because the ROAS Meta shows you is built from the events it can see, and your real revenue is what survives after everything Meta can't. Picture a wellness brand in Kochi running a festival push: Ads Manager reports a healthy return on ad spend, the add-to-carts are stacking up, the "purchases" column looks strong. Then month-end arrives and the story is smaller — some orders were cancelled before dispatch, a chunk of the cash-on-delivery parcels came back refused, and a few of the sales Meta claimed were repeat customers who'd have bought anyway.

Nothing broke. No alert fired. That is why it's a silent burn: the in-platform number keeps looking good while the money that lands is a different, smaller figure. The account total is an average of everything, and an average hides its worst members — the campaign that's genuinely profitable and the one that's only profitable if you ignore returns both roll into one flattering line.

What should a D2C brand actually optimise for — clicks, add-to-carts, or purchases?

Think of the events as depths of your funnel, from shallow and cheap to deep and real:

  • Traffic / landing-page views — the shallowest. Meta finds the cheapest clickers on the internet. Great for a busy-looking dashboard, useless for revenue.
  • Add to Cart — deeper, but still a browsing signal. People who add and abandon are a different population from people who pay, and Meta's targeting is good enough to tell them apart.
  • Purchase — the event that fires only when someone actually orders. This is the one closest to money.

Meta will happily optimise for any of them, and whichever you choose, it finds more of the people who trigger that specific event. Point it at add-to-cart and it becomes brilliant at manufacturing add-to-carts — carts that never convert. That isn't a bug; it's the machine doing precisely what you asked. For an online product brand, the answer is almost always Purchase — with one condition attached, which is the next question.

Why can't I fully trust the ROAS number Meta reports?

Two reasons, and both matter more than the imported playbooks admit.

First, COD. Cash-on-delivery is still how a large share of Indian D2C orders are placed, and a COD "purchase" is a promise, not a payment. Meta records the order the moment checkout completes, but the cash only exists once the parcel is accepted and paid for. A meaningful slice gets refused or returned to origin (RTO), so Meta's purchase count and revenue read higher than what you bank. Optimise purely on that reported ROAS and you can confidently scale a campaign that's leaking on returns.

Second, attribution and duplication. Meta counts a sale as "driven by the ad" within its attribution window even when the customer was already coming — a repeat buyer, someone who searched your name, a WhatsApp referral. None of that is dishonesty; it's just that Ads Manager measures Meta's version of events, not your P&L.

The fix isn't to distrust the platform and fly blind. It's to reconcile: put Meta's reported purchases next to orders actually delivered and paid in your store admin or Razorpay dashboard, and track your prepaid-vs-COD split and RTO rate. Real cost-per-purchase and real ROAS both vary by brand, margin, and category — so read your own numbers rather than any figure quoted online.

What has to be true before Meta can optimise for real sales?

One thing above all: Meta has to be able to see the purchase. "Optimise for Purchase" is an empty setting if the event never reaches the platform. So the plumbing comes first:

  • Your pixel and Conversions API should be live and firing a clean Purchase event with order value, on both prepaid and COD checkouts — not a landing-page view standing in for a sale.
  • Meta's reported purchases should roughly line up with your real orders. A big mismatch means the signal is broken, and every optimisation decision built on it is guesswork.
  • You need enough purchase volume for Meta to learn from. Deeper events happen less often than clicks, so a very low-volume store may have to build signal patiently rather than expecting instant efficiency.

And a plain warning that the show and this product both hold to: no setting guarantees a return, and nobody's AI should be "running your ads" on autopilot. The tools do the finding; a human owns the offer, the margins, and the call on what a good customer is worth.

Is Advantage+ Shopping or a product catalogue right for a small brand?

Start with the catalogue — a structured feed of your SKUs. It's worth setting up early because it powers dynamic product ads (showing a browser the exact product they looked at) and it's the foundation Meta's automated shopping campaigns lean on. An eco-products seller in Thrissur with even a modest range benefits from a clean catalogue long before they need anything fancy.

Advantage+ Shopping — Meta's automated shopping campaign — can genuinely work once two things are true: your catalogue is clean and your Purchase signal is flowing. It's built to chase conversions, so it needs conversion data to learn from. It's a poor fit when your pixel isn't tracking purchases yet or your order volume is too thin for it to optimise — there's simply nothing for it to aim at. In the fast-growing eco and wellness space (brands like Green Tatwa have shown there's a real market here), the temptation is to switch on the newest automation first. Reverse it: get the Purchase event and the catalogue right, then let automation do the finding.

How do I tell if my spend is buying cheap clicks instead of customers?

A few honest signs the budget is going to browsing, not buying:

  • Lots of traffic and add-to-carts, a low cost-per-click, but few completed, paid orders behind them.
  • Your reports are full of reach, clicks, and add-to-carts and thin on delivered purchases.
  • Your best sales days don't line up with your ad activity — the revenue was coming from elsewhere.
  • The objective or optimisation event under a campaign says Traffic, Engagement, or Add to Cart while you're trying to sell a product.

If a few of these ring true, you don't have a creative problem — you have a goal and measurement problem. Fix what Meta is aimed at, make sure it can see a real purchase, and reconcile the reported number against the money that actually lands. That single alignment recovers more wasted D2C spend than any new ad or bidding trick.

Common questions

What should a D2C brand optimise its Facebook ads for?
Optimise for the Purchase event — the actual order — not for traffic, landing-page views, or add-to-cart. Meta finds more of whatever action you point it at, so a traffic or add-to-cart goal teaches it to buy cheap clickers and browsers, not buyers. The catch is that Meta can only optimise for an event it can measure, so your pixel or Conversions API has to be firing a clean Purchase event before this works. Point Meta at the action closest to real money that it can reliably see.
Why does my Facebook ROAS look great but my sales don't match?
Usually because Meta counts checkouts and reported conversions it can see, while your real revenue is smaller after cancelled orders, COD returns (RTO), and duplicate or attributed sales that were coming anyway. For a COD-heavy D2C brand this gap is widest: Meta records the order at checkout, but the cash only exists if the parcel is accepted and paid for. Reconcile Meta's reported purchases against orders actually delivered and paid in your store or Razorpay dashboard — that comparison, not the in-platform ROAS alone, is your real number.
Should I run Advantage+ Shopping or a catalogue for a small D2C brand?
A product catalogue is worth setting up early — it powers dynamic product ads and lets Meta show the right SKU to the right person. Advantage+ Shopping (Meta's automated shopping campaign) can work well once you have a clean catalogue and a Purchase signal flowing, because it needs conversion data to learn from. It is a poorer fit if your pixel isn't tracking purchases yet or your order volume is very low — there is nothing for it to optimise toward. Set up the catalogue and the Purchase event first, then test automation.
Does COD hurt my Facebook ad measurement?
It complicates it. A COD order fires a Purchase event at checkout, but a share of those parcels get refused or returned (RTO), so Meta's purchase count and revenue read higher than the money you actually bank. If you optimise purely on Meta's reported ROAS, you can scale spend on a campaign that looks profitable but is quietly bleeding on returns. Track your prepaid-vs-COD split and your RTO rate, and judge campaigns on delivered, paid revenue.
How do I know if my ad spend is buying cheap clicks instead of customers?
Watch for a campaign with lots of traffic, low cost-per-click, and a pile of add-to-carts, but few completed and paid orders behind it. If your reports are full of clicks, reach, and add-to-carts and thin on delivered purchases, you optimised for the cheap visible action, not the sale. Check the objective and optimisation event under each campaign — if it says Traffic, Engagement, or Add to Cart while you are selling a product, that is the leak.