Why Your D2C Brand's Revenue Doesn't Match Your Margins
Your GMV is impressive. Your bank balance tells a different story.
You crossed ₹1 crore in monthly sales. The dashboard looks great. You share the number in founder groups and on LinkedIn.
But when you sit down to look at what's actually left - after platform fees, fulfilment, ad spend, returns, and taxes - the number that remains is a fraction of what you expected. And you're not entirely sure where it went.
This is the D2C margin problem. It affects almost every brand that scales on marketplaces or runs paid advertising, because the way revenue gets reported rarely matches how money is actually made.
The gap between those two numbers is where most D2C businesses quietly bleed.
The gap between GMV and what you actually keep
GMV - Gross Merchandise Value - is the total value of orders placed. It's the number most founders track. It's also the number that is furthest from reality.
Here's what gets taken out before you arrive at what actually matters:
Returns and cancellations
D2C return rates in India average 15–30%, depending on category. Fashion and footwear can run higher. Every return is a reversal of revenue - but the cost of reverse logistics, restocking, and potential damage is not reversed with it.
Marketplace commissions
Selling on Amazon, Flipkart, or Meesho means paying a referral fee on every transaction. These range from 5% (electronics) to 30%+ (fashion, beauty). On ₹1 crore of GMV at 20% commission, that's ₹20 lakh gone before any other cost.
FBA and fulfilment fees
If you're using Amazon FBA or a 3PL, you're paying for pick, pack, storage, and delivery on every order. These costs vary by product weight, dimensions, and storage duration - and they compound during peak seasons when storage rates spike.
Payment gateway fees
Every Razorpay, PayU, or payment gateway transaction costs approximately 2%. On high volumes, this becomes meaningful.
Advertising spend
The CAC (Customer Acquisition Cost) number that looks acceptable in isolation becomes a margin killer when it's not mapped against the contribution margin of the order it generated. Spending ₹300 to acquire a customer who makes a ₹500 order at 40% gross margin leaves you with ₹200 - before any other cost.
GST outflows
GST is collected on sales but also paid on most inputs. The net GST liability is real and monthly. If your GST refund cycle is slow (common for exporters or businesses with high input credits), this creates a cash drag on top of the margin drag.
The number you actually need to track: contribution margin
Contribution margin is what's left from a sale after all variable costs directly associated with that sale are deducted.
Contribution Margin = Net Revenue − Cost of Goods Sold − Fulfilment Costs − Platform Fees − Returns − Advertising Spend
This is the number that tells you whether your business model works. A positive contribution margin means every order you ship is adding to your ability to cover fixed costs (salaries, rent, tech) and eventually generate profit. A negative contribution margin means you are paying to ship orders.
Many D2C brands discover - often later than they should - that their contribution margin is negative on certain channels, certain SKUs, or at certain price points.
Why multi-brand and multi-SKU operators face this most acutely
If you run a single SKU on a single channel, the math is hard but manageable. Once you scale to multiple products across multiple channels, the complexity multiplies.
The problem: Your P&L shows a blended number. Revenue is combined. COGS is combined. Ad spend is combined. The result is an average that tells you nothing useful about which products are profitable and which are subsidising the ones that aren't.
A brand doing ₹2 crore a month might have:
- 3 hero SKUs generating 80% of revenue at 45% contribution margin
- 12 supporting SKUs generating 20% of revenue at -5% contribution margin
At a blended level, the business looks fine. At a SKU level, the bottom 12 are slowly draining the top 3.
Without SKU-level contribution tracking, pricing decisions, ad spend allocation, and inventory planning are all based on averages that hide the real picture.
A practical framework for getting clarity
Step 1: Calculate net revenue, not GMV
Net revenue = GMV minus returns, minus marketplace commissions, minus payment gateway fees. This is your real topline.
Step 2: Build SKU-level COGS
For each product, know your landed cost per unit: manufacturing or procurement cost, inbound freight, customs (if applicable), and packaging.
Step 3: Allocate fulfilment costs per order
Break down your FBA or 3PL costs by order: pick/pack fees, storage, outbound delivery. These should be tracked per unit, not as a blended percentage.
Step 4: Map ad spend to attributed revenue by channel and SKU
Your advertising platform reports attributed revenue. Map that back to the margin of the orders it generated - not just the revenue. A high-ROAS campaign on a low-margin product may be destroying value.
Step 5: Calculate contribution margin per SKU, per channel
Build a simple table:
| SKU | Net Revenue | COGS | Fulfilment | Ad Spend | Returns | Contribution Margin | CM% |
|---|---|---|---|---|---|---|---|
| Product A | ₹5,00,000 | ₹1,50,000 | ₹50,000 | ₹80,000 | ₹20,000 | ₹2,00,000 | 40% |
| Product B | ₹2,00,000 | ₹1,20,000 | ₹40,000 | ₹70,000 | ₹30,000 | -₹60,000 | -30% |
Product B is losing money on every unit shipped. That's not visible at the blended level.
Step 6: Make decisions based on contribution margin
- Pause or reprice SKUs below a minimum CM threshold
- Reallocate ad budget towards high-CM SKUs and channels
- Negotiate better terms with 3PLs on high-velocity SKUs
- Consider discontinuing chronically negative-margin products
Common mistakes D2C founders make
Celebrating GMV without knowing net revenue
GMV is a vanity metric if you don't know what's been deducted. Net revenue is the only topline that matters.
Treating all SKUs equally in ad spend allocation
Running the same bid strategy across all products means you're likely over-spending on low-margin SKUs and under-spending on high-margin ones. Ad spend allocation should follow contribution margin, not just ROAS.
Not accounting for return costs fully
Many founders net returns against revenue but forget the cost of reverse logistics, quality checks, and restocking. The true cost of a return is higher than just the refund.
Letting inventory accumulate in FBA without tracking storage costs
FBA storage fees are low on a per-unit basis but punishing at scale - especially during off-peak months when inventory sits. Slow-moving SKUs sitting in FBA storage are quietly eroding margins every month.
Not separating channel performance
Selling the same SKU on Amazon, Flipkart, and your own website generates very different margins. Your D2C website typically has lower platform fees but higher acquisition costs. Knowing which channel generates better contribution margin helps you prioritise investment correctly.
Key takeaways
- GMV is not revenue. Net revenue is GMV minus returns, commissions, and gateway fees.
- Contribution margin - after all variable costs - is the number that tells you if your business model works
- Multi-SKU, multi-channel businesses must track contribution margin at the SKU and channel level to make sound pricing and ad spend decisions
- Negative contribution margin SKUs are not always obvious at a blended level - they require deliberate tracking
- FBA costs (pick, pack, storage, referral fees) must be broken down per unit and per SKU to be actionable
Getting real clarity on your margins
Most D2C brands that come to us with a margin problem don't have a revenue problem. They have a visibility problem. The data exists. The transactions are there. They've just never been structured to show SKU-level or channel-level contribution margin.
Once that structure is in place, the decisions become obvious. The hard part is the setup.