At a ₹1,499 selling price, a ₹450 landed cost and a ₹520 blended CAC, we get roughly 18% contribution margin on Amazon India and roughly 20% on a Shopify store. Two percentage points. That is the honest answer to the amazon vs own website D2C India question, and it is nothing like the answer most founders expect. The marketplace is not obviously worse. Your own site is not obviously better. The gap is decided almost entirely by two numbers you control on your site and cannot touch on Amazon: what a new customer costs you, and how often the old ones come back.
Below is the full arithmetic, per 100 orders, with every assumption stated so you can swap in your own.
Ground rules, because most channel comparisons cheat
Three things make these comparisons dishonest, so let's remove them.
- Work ex-GST. A ₹1,499 sticker price on an 18% GST item is ₹1,270 of revenue. GST is a pass-through if you're claiming input credit properly. Compare like with like or the marketplace looks better than it is on one side and worse on the other. Check your own HSN — the 2025 rate revisions moved a lot of categories.
- Compare contribution margin, not gross margin. Contribution is what's left after every cost that varies with an order: goods, commission, shipping both ways, payment or COD handling, write-offs, and acquisition. Rent, salaries and your Shopify subscription sit below that line.
- Model returns on the same basis. Amazon reports a return rate. Your own store has returns and RTO, and founders quote the first while ignoring the second. Both channels below lose about 18% of gross orders. That is deliberate, so the returns line isn't doing secret work.
Amazon India: where the ₹1,499 goes
Per 100 orders of a ₹1,499 item, fulfilled by Amazon, in a category we've assumed at a 13% referral fee. Referral rates run from low single digits to the high teens depending on category and price band, and Amazon revises the schedule, so pull your actual rate from Seller Central rather than trusting mine.
- Gross GMV: 100 × ₹1,499 = ₹1,49,900
- Returns at 18% → 82 orders kept, 18 back
- Net revenue: 82 × ₹1,270 = ₹1,04,140
- COGS on kept orders: 82 × ₹450 = ₹36,900
- Write-off on returns: 18 units back, 75% resellable → 4.5 units dead × ₹450 = ₹2,025
- Amazon fees on kept orders: referral ₹194.90 + closing ₹40 + weight handling ₹65 + storage ₹5 = ₹304.90 × 82 = ₹25,002
- Amazon fees on returned orders: closing + handling + storage + return leg ≈ ₹175 × 18 = ₹3,150
- Sponsored Products at 12% of GMV: ₹17,988
Total variable cost: ₹85,065. Contribution: ₹1,04,140 − ₹85,065 = ₹19,075, or ₹233 per kept order, or 18.3% of net revenue.
On the returns line we've assumed the referral fee comes back and the fulfilment and closing fees don't, plus a charge for the return leg. That treatment varies by programme and by how the return is classified, and your settlement report is the only source of truth. It is also the line item most sellers never reconcile, which is why so many Amazon P&Ls are three or four points optimistic.
The same ₹1,499 on your own Shopify store
Now the same 100 orders, 60% COD and 40% prepaid, which is roughly where a mid-priced Indian D2C brand sits outside metro-heavy categories.
Order outcomes:
- 40 prepaid orders, 8% return → 3.2 back
- 60 COD orders, 20% RTO → 12 never delivered; of the 48 delivered, 6% return → 2.9 back
- Total lost: 18.1 orders. Kept: 82
Costs:
- Net revenue: 82 × ₹1,270 = ₹1,04,140
- COGS on kept orders: ₹36,900
- Write-offs: RTO units come back sealed, ~95% resellable → 0.6 units. Customer returns, 75% resellable → 1.5 units. 2.1 × ₹450 = ₹945
- Forward shipping, charged on all 100 shipments at ₹65 = ₹6,500
- RTO reverse leg: 12 × ₹65 = ₹780
- Customer return reverse leg: 6.1 × ₹70 = ₹426
- COD handling at ₹25 per delivered COD order: 48 × ₹25 = ₹1,200
- Gateway MDR on prepaid, 2% + GST on gross, not refunded on returns: 40 × ₹35.40 = ₹1,416
- Acquisition: 65 of the 100 orders from new customers at ₹520 CAC = ₹33,800
- Platform and apps at ₹15 per order: ₹1,500
Total variable cost: ₹83,467. Contribution: ₹20,673, or ₹252 per kept order, or 19.8% of net revenue.
One line to verify yourself: depending on your plan and gateway combination, Shopify may charge an additional fee on transactions that don't run through Shopify Payments. Indian merchants using Razorpay, PayU or Cashfree should read their own billing statement rather than assume. It's a small number that behaves like a large one at scale.
Side by side, and the variable that actually decides it
Amazon 18.3%. Own site 19.8%. On these inputs the channels are a wash, and anyone telling you the marketplace is a margin trap at this price point hasn't done the sum.
Then move one number. Hold everything else and push CAC from ₹520 to ₹700, which is a single bad quarter of Meta auction pressure:
65 × ₹700 = ₹45,500. Acquisition cost rises ₹11,700. Contribution falls to ₹8,973, or 8.6%. Amazon now wins by nearly ten points.
Now go the other way. Improve retention so only 45 of your 100 orders come from new customers:
45 × ₹520 = ₹23,400. You save ₹10,400. Contribution rises to ₹31,073, or 29.8%. Your own site wins by eleven points.
That's the whole thing. Amazon margin is capped and stable — you cannot negotiate the referral fee, and your ad efficiency there converges toward everyone else's because you're all bidding on the same intent. Own-site margin is volatile and uncapped, and the only lever that compounds is repeat purchase. A brand with a 55% repeat order rate and a decent CRM should be off Amazon for anything but discovery. A brand on its first 500 orders, with no email list and no reason for anyone to come back, is usually better off on the marketplace and is fooling itself about the alternative.
RTO is the line item that kills own-site margin
Look at what the 12 undelivered COD orders cost in the model above: ₹780 of reverse freight, ₹780 of forward freight already spent, and — the expensive part — ₹6,240 of acquisition cost for orders that produced zero revenue. That's 12 × ₹520. Nearly 30% of your total ad spend on that cohort bought you nothing.
Cut RTO from 20% to 12% and you recover roughly ₹2,500 per 100 orders on freight alone, plus the ad spend behind five orders that now deliver. The tactics are unglamorous and they work: a ₹50–₹75 prepaid incentive shown at checkout, partial COD where the customer pays ₹100–₹200 upfront, an OTP or WhatsApp confirmation step on high-value COD, pincode-level COD blocking on your worst 2% of postcodes, and address validation that catches the six-digit pincode that doesn't match the city.
We get the pincode blocklist wrong on the first pass maybe a third of the time, because the worst-performing pincodes in month one are often just low-volume noise. Give it 90 days of data before you switch off a serviceable area.
What Amazon costs you that never appears on the settlement report
The fees are visible. These are not.
You don't get the customer. No email, no phone number, no permission to market. Every order is a first order forever. In the sensitivity analysis above, that's the difference between 8.6% and 29.8% margin, and it isn't available to you at any price.
Price parity gravity. Once your Amazon price is the anchor, your own site can't sit above it without looking greedy, and can't sit below it without hurting your buy box position. Founders who launch on Amazon first often find their own store's pricing power was decided two years ago by someone else's algorithm.
Cash timing and TCS. Marketplace settlement cycles plus 1% TDS under Section 194-O and GST TCS mean working capital sits with someone else for a couple of weeks. It's credit-able, not lost, but it's cash you can't spend on inventory before the festive season. A COD aggregator remitting in two to seven days is materially better for a growing brand.
Category volatility. Referral fee slabs and weight-handling bands change. Your operating model shouldn't depend on one of them staying put.
What your own store costs that founders leave out
The ₹15-per-order platform-and-apps figure in the model assumes real volume. At 300 orders a month, a Shopify plan, a reviews app, a filters app, a shipping aggregator, a WhatsApp tool and an email platform can easily run ₹15,000–₹25,000 a month, which is ₹50–₹80 per order. That alone moves the comparison by three to five points at low volume. This is the single most common reason a small brand's own-site P&L looks worse than its Amazon P&L: the fixed costs haven't been amortised yet.
Then there's the build and the people. Our breakdown of what a store actually costs to build and run in India is here, and it's worth reading before you assume own-site is the cheap option.
And site speed sits directly on CAC. A checkout that loads in 4.5 seconds on a 4G connection in a tier-2 city converts materially worse than one at 1.8s, which means your ₹520 CAC is really ₹620. If your Meta CPMs went up and nothing else changed, look at your LCP on mobile before you blame the auction.
How we'd actually split the channels
Not a clean either/or, but not a lazy "be everywhere" either.
Keep on Amazon: your entry SKU, your single best-selling hero product, and anything where the customer is searching for the product category rather than for you. Treat it as paid discovery with a positive contribution margin, which is better than most paid discovery.
Keep off Amazon: bundles, subscriptions, refill packs, limited editions, anything above roughly 2× your entry price, and anything where the margin depends on a second purchase. Those are the products that pay for a customer relationship, and there's no point handing them to a channel that won't give you one.
Watch one number monthly: the share of own-site orders coming from returning customers. If it's below 30% after a year, the site is a paid-media funnel wearing a brand's clothes, and Amazon is probably your better channel until the product or the retention work improves. That's a product problem, not a marketing one, and no amount of Shopify work fixes it.
Brands moving from marketplace-only to a proper own-site operation usually underestimate the catalogue work — variant structure, HSN mapping, GST rates per SKU, inventory sync across both channels. If that's the transition you're in, our migration notes cover the parts that go wrong.
Do this before you decide anything
Take last quarter's Amazon settlement report and your last quarter of Shopify orders. Build the two 100-order tables above with your own COGS, your own return and RTO rates, and your real blended CAC including the ads that produced RTOs. Not modelled CAC. Actual spend divided by actual orders.
Most founders find the two channels within three points of each other, and then find that the entire strategic question was about repeat rate all along. If you'd like a second pair of eyes on the numbers and where your own store is leaking, our free audit covers checkout, RTO drivers and page speed in one pass.

