The two things that move money after checkout on a Shopify store are the order notifications and the tracking page. Everything else — the branded unboxing card, the loyalty tier, the NPS survey — is downstream of whether the customer knows where their parcel is and whether they can get hold of you when it's late. Shopify gives you enough to build a decent post-purchase experience without buying much: editable notification templates, Flow on every plan, customer accounts with order lookup, an order status page you can extend, and a returns flow in admin. Most of the brands we audit have touched none of it and are paying a helpdesk to answer "where is my order" forty times a day.
The surfaces you actually control
Map them before you buy anything. On a standard Shopify store there are six:
- The thank-you page, shown once, immediately after payment.
- The order status page, which the customer returns to repeatedly through the link in their email. This is the real tracking page.
- Email notifications — order confirmation, shipping confirmation, out for delivery, delivered, refund.
- SMS and WhatsApp, which in India usually run through a third-party tool rather than Shopify itself.
- Customer accounts, where order history and self-serve returns live.
- The carrier's own tracking page, which you don't control at all, which is exactly why you want yours to be better.
Shopify retired the old checkout.liquid route for thank-you and order status customisation. Those pages are now built with checkout extensions and the app blocks that sit on them, which is a stricter sandbox but a much faster one. If someone quotes you for a "fully custom order status page" with liquid edits, they're quoting from a 2021 playbook.
Your tracking page gets more repeat views than your homepage
A customer who orders on a Tuesday and receives on a Friday will typically open the order status link three to five times. That is more attention than any product page gets from the same person. Default Shopify shows a map and a status line and nothing else.
What we put on it, in rough order of value:
- A realistic delivery window, not the carrier's optimistic one. If your Delhivery surface shipments to tier-2 pin codes take four to six days, say four to six days. Underpromising costs you nothing here; the sale is already made.
- A support route that isn't email. A WhatsApp deep link with the order number pre-filled cuts ticket volume because the customer doesn't have to explain who they are.
- One relevant cross-sell block, product-based, not a generic bestsellers grid. Refill, accessory, size-up. Nothing more.
- The returns policy in two lines, with the window in days. Ambiguity here generates tickets before the parcel even lands.
Skip the review request on this page. The product hasn't arrived. Ask for a review seven days after the delivered webhook fires, which Flow can do for free.
Fix the default notifications before you buy a notification app
Shopify's notification templates are editable Liquid in Settings. They ship plain, they ship in English, and they ship with your store name as the sender. Three changes that take an afternoon and pay for themselves:
Rewrite the shipping confirmation so the tracking number is the largest element and the carrier name is stated. Customers who see "XpressBees" for the first time in an SMS assume it's spam. Put the estimated window in the subject line, not the body.
Add a separate "delivered" email. Shopify sends one only if the carrier reports delivery through the tracking integration, and plenty of Indian aggregator setups don't pass that reliably. If yours doesn't, trigger it from Flow on fulfilment status rather than leaving the customer with an unresolved thread.
Set the sender address to something a human monitors. We still find stores sending from noreply@ and then wondering why refund requests arrive as Instagram DMs at 11pm.
Only after that does a Klaviyo or Omnisend flow earn its keep, because now it's layering on top of something that works instead of papering over it.
COD confirmation and the RTO arithmetic
For Indian D2C, the single most valuable post-purchase intervention is the one that happens in the first two hours: a WhatsApp or IVR confirmation on cash-on-delivery orders, with a prepaid-conversion offer attached.
Run the numbers on a store shipping 3,000 orders a month. Say 60% are COD, so 1,800 COD orders. At a 22% RTO rate that's 396 parcels that go out and come back. Forward and reverse freight at ₹85 each way is ₹170 per failed order, so ₹67,320 a month in pure freight, before packaging, before the labour of reconciling returns to stock.
Now suppose the confirmation flow pulls RTO down to 17%. That's 306 failures instead of 396 — 90 fewer — and 90 × ₹170 = ₹15,300 saved every month on freight alone. Add the orders you convert from COD to prepaid, where you stop paying the aggregator's COD remittance fee and collect the cash three weeks earlier, and the working-capital effect is larger than the freight saving.
The unwelcome part: a confirmation message also gives hesitant buyers an easy exit. Some brands see cancellations rise while RTO falls. That is still the better outcome, because a cancellation costs you nothing and an RTO costs you ₹170 plus a damaged carton, but you need to brief your team on the metric before the dashboard scares them.
Returns are where the Indian setup diverges from the documentation
Shopify's returns management is solid: the customer requests a return from their account, you approve it, stock goes back. The gap is the label. Shopify's return shipping labels don't cover Indian carriers, so the reverse pickup has to be raised in Shiprocket, Delhivery, iThink or whatever sits in your logistics layer, and then the status has to come back into Shopify so support can see it.
Two workable patterns. The cheap one: customer requests in Shopify, ops raises the pickup manually in the courier panel, a Flow tags the order and emails the customer the pickup date. It's manual and it holds up to maybe 60 returns a week before someone starts dropping them. The better one: a middleware app that listens to the return-requested webhook, calls the courier API for a reverse pickup, and writes the AWB back onto the Shopify order as a metafield so it renders in the customer account. That's a few weeks of custom app work and it removes an entire spreadsheet from your operation.
One more thing that breaks silently: exchanges. Shopify handles refunds cleanly and exchanges awkwardly. If size exchange is a meaningful share of your returns — apparel, footwear — build the exchange as a new zero-value order linked by metafield rather than trying to force it through the returns UI. We get the mapping wrong on the first pass more often than we'd like, usually on partial fulfilments.
Post-purchase upsells: overrated for most Indian stores
The one-click upsell page between payment and thank-you is a genuinely good mechanic. It just doesn't work for most stores in India, because post-purchase checkout extensions depend on the payment method, and the Razorpay, Cashfree and PayU flows that Indian merchants run on typically won't render them. Check with the app vendor against your exact gateway before you pay for a year.
If you're selling into the US, UK or UAE on Shop Pay, it's a different conversation and the incremental revenue is real. For a Bengaluru brand doing 70% domestic COD, put the same effort into a 48-hour replenishment email and you'll earn more from it.
Related: post-purchase alone is not a reason to move to Plus. Checkout branding APIs and Functions are excellent, but if your case for Shopify Plus rests on customising the thank-you page, it isn't a case yet. Come back when you need checkout-level discount logic, B2B price lists or multiple expansion stores.
The GST invoice problem nobody mentions until the first B2B order
Shopify's order confirmation is a receipt. It is not a tax invoice. No HSN codes, no GSTIN, no place of supply, no CGST/SGST split. For D2C that's mostly fine until a customer buys for their company and asks for a proper invoice, at which point your finance person is typing one out in Excel.
Solve it with one of the GST invoicing apps on the App Store and wire the invoice PDF into the order confirmation email so it arrives automatically. Ten minutes of setup, and it removes a recurring support thread. If you sell food or supplements, the same email is the right place for the FSSAI licence number and batch details rather than burying them on the PLP.
A sequence worth building, in order of effort
If you have one sprint, do it in this order. Notification templates rewritten and delivered-email added. WhatsApp COD confirmation with prepaid nudge. Order status page with delivery window, support link and returns policy. Review request on day seven post-delivery, via Flow. Replenishment or cross-sell email timed to your actual consumption cycle, which for a 200ml serum is around day 45, not day 30. Self-serve returns turned on in customer accounts with the courier pickup wired behind it.
Measure two things, monthly: RTO percentage on COD, and 90-day repeat purchase rate. Both are slow-moving and both respond to post-purchase work. Ticket volume per hundred orders is a useful third, because it tells you whether your notifications are answering questions or creating them.
Where to start this week
Open your last 50 support tickets and sort them by what the customer was actually asking. If more than a third are tracking queries, your shipping confirmation email and order status page are the fix, and neither costs anything but time. If they're returns queries, the reverse-pickup handoff is the fix and it probably needs code.
If you want a second pair of eyes on the flow end to end, our free store audit covers post-purchase alongside speed and checkout, and you'll get the list whether or not you work with us.


