Shopify D2C accounting starts from the Shopify order report, not the bank statement, because your money arrives through three separate systems on three different clocks. Prepaid orders settle through Razorpay in two to three days, COD orders settle through the courier in seven to fifteen, and RTO shipments never settle at all while still costing you freight both ways.
The result is that a D2C brand’s bank balance tells you almost nothing about the month it belongs to. This guide covers where the sales figure actually comes from, how to treat COD and RTO, what a D2C chart of accounts looks like, and the contribution margin working that shows whether growth is paying for itself.
Why D2C accounting is not marketplace accounting
A marketplace seller has one settlement report per platform and one tax deduction to track. A D2C brand has an order system, a shipping aggregator and a payment gateway, none of which agree with each other on any given day.
Two differences matter most. There is no GST TCS on your own website sales, because Section 52(1) of the CGST Act applies only to supplies made through an operator by other suppliers. The GST Council’s own e-commerce FAQ confirms that a sale on your own account through your own website is not covered. And COD exists, which marketplaces largely absorb on your behalf but a D2C brand carries in full.
If you also sell on Amazon or Flipkart alongside your own store, the marketplace side follows a different method entirely. Our guide to ecommerce accounting basics covers settlement reports and TCS treatment.
Where your sales number actually comes from
Use Shopify as the source of truth for revenue and Shiprocket and Razorpay as sources of truth for cost and cash.
System | What it is authoritative for | What it must never be used for |
|---|---|---|
Shopify | Order value, order date, tax, discounts, customer state | Cash received |
Shiprocket or courier panel | Freight, weight discrepancy charges, RTO events, COD remittance | Revenue |
Razorpay or gateway | Prepaid collections, gateway fees, refunds processed, chargebacks | Revenue |
Bank | Final cash position only | Anything else |
The revenue entry is passed from Shopify on the order or dispatch date. Everything else is a downstream cash or cost event attached to that order. Brands that post revenue from Razorpay settlements lose every COD order from their books, which for most Indian D2C brands is between 40% and 65% of volume.
Weight discrepancy charges deserve their own mention. Couriers raise them weeks after dispatch, often against orders from a closed month, and they land in the wallet as a deduction with no invoice attached to any order. Book them to a separate ledger rather than netting them into freight, because a rising balance there usually means your packaging weight is declared wrong, not that shipping got expensive.
How to treat COD orders
A COD order is revenue on dispatch, not on remittance. The customer has not paid you yet, so the entry creates a receivable from the courier, and GST is payable on the invoice date regardless of when the cash arrives.
Post the sale from Shopify on dispatch, debiting COD receivable and crediting sales and output GST.
Keep COD receivable as a separate ledger from gateway receivable, because the ageing behaves differently.
On remittance, clear the receivable against the bank credit and book the COD handling fee as an expense.
Reconcile the courier’s COD remittance statement to the orders it claims to cover, order ID by order ID.
Age anything unremitted beyond 21 days and raise it with the courier before it becomes unrecoverable.
Output GST on a COD order falls due with the return for the month of supply, which means you often pay the tax before the customer’s money reaches you. A brand pushing hard on COD during a festive month can finish that month with GST paid in cash on revenue still sitting with the courier. That is a cash flow question, not an accounting one, but the books are where you see it coming.
How to treat returns and RTO
RTO and a customer return are different events and should never share a ledger. An RTO shipment was never delivered, so no sale was completed. A return was delivered, accepted and then sent back.
For an RTO, reverse the sale with a credit note dated when the shipment is marked RTO delivered back to your warehouse, bring the stock back in, and book both the forward and the reverse freight to an RTO cost ledger. For a customer return, issue the credit note on the date the goods are received back, not the date the refund leaves Razorpay. Those two dates commonly fall in different months and pushing them together overstates the earlier month.
Under Section 34(2) of the CGST Act, a credit note that reduces your output tax liability has to be declared by 30 November following the end of the financial year in which the supply was made, or the date of the annual return, whichever is earlier. March RTOs that get cleaned up in the following December are outside that window. The stock comes back, the GST does not.
RTO cost is the number most D2C founders underestimate, because it hides inside the shipping expense head. Pull it out. A 28% RTO rate on COD orders with ₹150 of round-trip freight is ₹42 of pure loss carried by every COD order you accept, before any product cost.
The chart of accounts a D2C brand needs
Generic accounting software gives you Sales, Purchases and Indirect Expenses. That structure cannot answer the only question a D2C founder asks, which is whether a given product makes money.
Split revenue by channel first, keeping Shopify, marketplace and offline separate. Then split direct costs so each one can be traced to an order: cost of goods, inward freight, packaging material, forward shipping, reverse and RTO freight, COD handling, payment gateway charges, and platform subscription.
Marketing needs its own discipline. Keep Meta, Google, influencer and agency retainer as separate ledgers rather than a single Advertising head, because blended ROAS hides which channel is actually funding itself. Under current assets, keep COD receivable, gateway receivable and inventory by location as three distinct ledgers.
Product-wise bifurcation is what makes the whole structure useful. Tag every direct cost line with the SKU or product group it belongs to at the point of entry. Retrofitting that tag across a year of vouchers is a project nobody finishes.
Sales classification and why GST needs it
Four classifications have to exist in your data from day one: B2B against B2C, and COD against prepaid.
B2B orders where the customer supplies a GSTIN go into Table 4A of GSTR-1 invoice by invoice, and your customer cannot claim credit unless you report them correctly. B2C orders go into Tables 5 and 7 by place of supply. A Shopify export that does not carry the customer’s state cannot produce a correct GSTR-1, and place of supply for goods is where the movement terminates, which is the delivery address rather than the billing address.
COD against prepaid is not a GST classification, but keeping it in the same data structure is what lets you run RTO and remittance analysis without rebuilding the file every month.
A D2C brand shipping across state lines has no turnover threshold to hide behind. Section 24(i) of the CGST Act makes registration compulsory for any person making an inter-state taxable supply of goods, from the first order.
The three reconciliations that must tie every month
Nothing in D2C accounting works until these three close.
Reconciliation | What you match | Common cause of a gap |
|---|---|---|
Payment gateway | Razorpay settlement report against gateway receivable and prepaid orders | Refunds processed in a later month than the credit note |
COD | Courier remittance statement against COD receivable, order by order | RTO shipments still sitting as receivable |
GST | Books against GSTR-1 and GSTR-3B as filed | Credit notes booked in the wrong period |
Run them in that order. The gateway reconciliation is the easiest and clears the largest volume of orders, which leaves a smaller and more meaningful residue in the COD file. The GST reconciliation is last because it depends on the other two being right.
The GST one catches the errors that get expensive. Turnover in your books and turnover in your filed GSTR-1 should differ by nothing. Where they differ, the cause is nearly always credit notes for RTO recognised on the refund date. Fixing the method matters more than fixing the month, and the related work of filing GST returns as a seller becomes far easier once the books tie.
Slow-moving and non-moving inventory
Run an ageing on stock quantity, not on stock value, at least once a quarter. Value-based reports flatter slow inventory because the cost stays on the books at full value until someone decides to write it down.
Classify by days since last sale. Anything with no dispatch in 90 days is slow moving; anything at 180 days with stock on hand is effectively dead capital. For a D2C brand holding ₹40 lakh of inventory at 22% blocked in non-moving SKUs, that is ₹8.8 lakh of working capital funding nothing, usually while the founder is raising money to buy more stock.
Two entries follow from the review. Write down obsolete stock rather than carrying it, and record any inventory lost or damaged separately, because Rule 56(2) of the CGST Rules requires a location-wise account of goods lost, stolen, destroyed or written off, and input tax credit on written-off goods has to be reversed under Section 17(5)(h) of the CGST Act.
The contribution margin working a D2C founder actually needs
Gross profit is the wrong number for D2C. It ignores shipping, RTO and customer acquisition, which together often exceed cost of goods.
The working below is illustrative, built on an order with a taxable value of ₹1,000 and a 28% RTO rate on the COD mix. Substitute your own figures.
Line | Per order | Note |
|---|---|---|
Net revenue, taxable value | ₹1,000 | Excluding GST |
Cost of goods | ₹350 | Landed cost including inward freight |
Forward shipping and packaging | ₹95 | Net of input tax credit |
Payment gateway or COD handling | ₹20 | Net of input tax credit |
RTO provision | ₹38 | Round-trip freight × RTO rate |
Contribution before marketing | ₹497 | |
Customer acquisition cost | ₹300 | Total ad spend ÷ orders |
Contribution after marketing | ₹197 | 19.7% of net revenue |
At ₹197 per order and fixed costs of ₹4 lakh a month, break-even is roughly 2,030 orders. That single number is worth more than any profit and loss statement, because it converts every marketing decision into an order target.
Track it by product group and the picture usually splits. One or two SKUs carry the brand while a long tail runs at negative contribution once RTO and acquisition are loaded in. Deeper ecommerce profitability analysis builds this by SKU and by channel rather than at a blended level.
Is a Shopify store an e-commerce operator under GST
Your own store is an electronic commerce operator by definition, but it does not collect TCS.
Section 2(45) of the CGST Act defines an e-commerce operator as any person who owns, operates or manages a digital facility for electronic commerce, which a Shopify store plainly is. TCS under Section 52(1) is a separate question, and it applies only to supplies made through the operator by other suppliers. Selling your own goods on your own account is not that, so no TCS arises and there is no GSTR-8 to file.
That distinction changes the moment you let another brand sell through your store. A multi-brand site holding third-party inventory on a commission model crosses into Section 52 territory, with TCS collection, GSTR-8 by the 10th and registration under Section 24(x). D2C brands adding a partner-brand section often cross that line without anyone in finance being told.
Need monthly books that tie across Shopify, Shiprocket and Razorpay? Talk to Simran’s team at Complylocal Consultants about Shopify accounting and compliance.



