Cash on Delivery on Your Online Store: How to Build COD Rules, Order Verification and Prepaid Nudges Into Your Checkout
The most reliable way to cut the number of cash-on-delivery orders that come back undelivered is to fix the checkout, not the courier: validate the address and phone number as the customer types them, confirm risky orders before they ship, show the prepaid option at the moment of choice, and switch COD on or off by rule rather than for the whole store. Those controls live in your website and order system, so they are web development work, and they work on Shopify, WooCommerce or a custom store. This guide explains how to build each control, how to decide where to apply it using your own order data, and how to test it without driving away genuine customers.
It is written for owners and developers of Indian online stores who offer cash on delivery and want the website to do more of the work. We do not quote nationwide COD shares or return rates, because published figures vary widely by category, price band and customer base and we cannot source a reliable single number. Your own order export is the only version that should drive decisions, and this article shows how to read it. Costs of courier and logistics contracts are outside this guide; we cover only what the website can control.
Why COD is a website problem as much as an operations problem
Cash on delivery lets a customer place an order without paying. That removes a barrier for shoppers who distrust online payments, but it also removes the commitment that a payment gives. Some COD orders are placed on impulse, some with an incomplete or wrong address, some by people who will not be home, and a few are fake. When the parcel cannot be delivered, the order fails, and the store is left with the work of handling it and the stock tied up in transit.
Operations teams usually respond after the fact: phoning customers, chasing couriers, restocking. But most of the causes begin at the website:
- A checkout that accepts any text as an address.
- A phone field that accepts a number that cannot receive calls.
- A product page that does not make clear what the customer will pay or when the product arrives.
- A payment choice screen where COD is the easy default and prepaid has no visible reason to be chosen.
- No step between "order placed" and "order shipped" where anyone checks that the order is real.
Each is fixable in code and settings. You do not need to replatform to do it; these are changes to the checkout and the order workflow on whatever store you run.
Step 1: Read your own order data first
Before building anything, spend an hour with an export of your last few months of orders. Most platforms let you download orders with payment method, delivery pincode, order value, product, order status and customer type. In a spreadsheet, build a few simple cuts:
- COD share of orders, overall and by product category.
- Share of COD orders that were not delivered, compared with the same share for prepaid orders. Use one consistent definition of "not delivered" and write it down.
- The same share by pincode or city group, by order value band, by first-time versus repeat customer, and by product.
- The reasons recorded for failed deliveries, if your courier panel or order notes capture them: refused, unreachable, wrong address, not at home, and so on.
You are looking for concentrations. If failed COD orders cluster in a handful of pincodes, in the first order from a new customer, in a particular high-value product or in orders placed late at night, a targeted rule will help much more than a blanket one. If failures are spread evenly, address quality and confirmation steps will matter more. If your data is too thin to show a pattern, start with the universal controls below and revisit after a few months.
Be honest about small samples. A store with a few hundred COD orders a month can see apparent patterns that are noise. Prefer changes that are cheap, reversible and sensible on their own merits, and judge them over several weeks.
Step 2: Make the address and phone number right at the point of entry
A checkout that accepts anything pushes data-quality problems onto the courier. Fix it where the customer types.
- Pincode first. Ask for the six-digit pincode before the rest of the address and auto-fill city and state from it. This reduces mismatched city and pincode pairs and lets you apply pincode-based rules immediately.
- Format checks. An Indian mobile number has ten digits; reject obviously invalid entries and strip spaces and prefixes sensibly.
- A landmark field where addresses are informal, and a clear instruction to include house or flat number, building name and floor.
- Sensible limits. Do not force a long form on someone who will abandon it. Our guide on checkout forms and guest checkout explains how to keep fields to what is needed.
- Address autocomplete through a maps or address service can speed entry on mobile, but it adds cost, a third-party script and privacy considerations, so evaluate it before adding it.
- Confirm serviceability early. A pincode checker on the product page tells a shopper whether you deliver and whether COD is available before they commit, and stops orders to places you cannot serve.
None of this guarantees a correct address, because a customer can type a valid but wrong one. It does remove the avoidable errors.
Step 3: Verify the order before it ships
The strongest control for risky orders is a quick confirmation from the customer. The aim is to catch wrong, fake or unwanted orders before the parcel is dispatched. Options, from lightest to heaviest:
OTP at checkout
A one-time code sent to the customer's phone proves the number is reachable and belongs to someone present. It adds a step, so apply it where risk is higher rather than to everyone. Use a reputable provider, expire codes quickly and limit attempts. Remember that SMS delivery in India involves regulated sender and template registration, so confirm the setup with your provider.
WhatsApp confirmation after the order
After the order is placed, send a WhatsApp message asking the customer to confirm, with buttons such as "Confirm" and "Change address" or "Cancel". This is lighter for the customer than a phone call and gives you a written record. It requires a WhatsApp Business API setup with an approved template and a customer who has agreed to receive messages; see our guides to WhatsApp order updates and the WhatsApp opt-in checklist for the requirements. Unconfirmed orders can be held for a short period, then reminded, then cancelled according to a rule you state on the site.
A confirmation call
For high-value or high-risk orders, a human call remains effective. It does not scale and costs staff time, so reserve it for the orders your rules flag.
A hold in the order workflow
Whatever method you use, the website or order system needs a status such as "awaiting confirmation" that stops the order from being passed to the courier until it is cleared. Without that status, the confirmation message is only a courtesy. On Shopify, this is usually handled with order tags and a workflow or an app; on WooCommerce, a custom order status and a plugin or small custom code; on a custom store, a status in your order table. Our guides on Shopify COD setup and verification and WooCommerce COD plugins cover the platform specifics.
Fake and automated orders are a related but different problem, with their own defences such as rate limiting and server-checked challenges. We cover them in stopping fake orders and bot checkouts.
Step 4: Decide where COD is offered, using rules
A single storewide switch is a blunt tool. A rule-based approach lets you keep COD where it works and add friction where it does not. Typical rules, to be set from your own data:
- By pincode: offer COD only where your courier serves reliably, or require extra verification elsewhere.
- By order value: cap COD above a certain basket value, or require a part-payment or prepayment for expensive orders.
- By customer type: require verification for a first order, and relax for repeat customers with a history of accepted deliveries.
- By product: turn COD off for items that are custom-made, personalised or hard to resell.
- By behaviour: flag patterns such as several orders to the same address with different names, or many failed attempts in a short time.
Build the rules so a non-developer can change thresholds without a code release, and log which rule applied to each order so you can review its effect later. State the rule on the page: a short line such as "Cash on delivery is available for orders up to ₹X in selected pincodes" is better than a surprise at checkout. Use your own limits; do not copy a number from another store.
On Shopify, COD rules are commonly handled by payment-customisation features or apps; on WooCommerce, by conditions in a payment-gateway plugin or small custom code. The exact mechanisms change with platform versions, so confirm what your current setup supports.
Step 5: Show the prepaid option when the customer is choosing
Many COD orders exist because the prepaid option does not look attractive or trustworthy at the moment of choice. Improve that on the page:
- Place the incentive next to the choice, not in a banner on another page. A line beside the prepaid option, such as free delivery or a small discount that you have actually decided to offer, is read at the right moment.
- Make prepaid easy. Offer the payment methods your customers use and make the flow quick on mobile. Our guide on UPI versus COD checkout discusses the presentation of options.
- Do not penalise honest COD buyers. A modest COD handling fee is a legitimate business choice if you state it clearly, but a surprise fee at the last step increases abandonment.
- Do not hide COD in a way that feels manipulative. Consumer-protection rules in India address dark patterns, and a checkout that deceives customers risks both complaints and trust. Our article on dark patterns and checkout design lists what to avoid.
- Reassure on returns and safety, with plain language on returns and refunds near the payment choice.
Test this as an experiment: show the new layout to a random half of customers and compare completed orders and delivered orders, not clicks on the prepaid button.
Step 6: Set the right expectations on the product page
A customer who is surprised by the delivery time, the price or the item is more likely to refuse a parcel. The product page and cart should state:
- the total price including any charges, before checkout;
- the expected delivery window for the entered pincode;
- what the product is, with accurate images, size and specification information;
- what happens if they are not available at delivery;
- the returns policy in plain language.
Our product page conversion checklist covers how to present this without cluttering the page.
Step 7: Handle failed deliveries with a prepared message flow
When a delivery attempt fails, a fast, polite message can save the order. The website or order system can trigger a message to the customer, via WhatsApp where consent exists, asking them to confirm availability, correct the address or reschedule. Integrating courier status updates into your order system is a build task: your order system receives status events from the carrier, maps them to your own order statuses and triggers the right message. Because these messages are transactional, use the template category that matches their purpose and follow the platform's rules.
What to measure after you launch
Track a small set of measures before and after each change, over enough weeks to be meaningful:
- Share of orders that are COD, so you can see whether the changes push customers toward prepaid.
- Order conversion rate at checkout, so you can see whether the new friction is losing genuine customers.
- Share of COD orders confirmed, cancelled before dispatch and not delivered.
- Time from order to confirmation.
- Support contacts and complaints mentioning COD, OTP or confirmation.
A change that lowers failed deliveries but lowers conversion by more than it saves is not a success. Compare delivered orders per hundred checkout sessions, which captures both effects.
A worked example (hypothetical)
Consider an imaginary Pune store selling home organisers, with COD popular for first-time buyers. Its order export shows failed COD orders concentrated in first-time customers, in a few pincodes where the courier is less reliable, and in baskets above a certain value. It also shows that most addresses lack a landmark.
A reasonable first release might:
- Move the pincode field to the top of checkout, with auto-fill and a landmark prompt.
- Add a WhatsApp confirmation, with an "awaiting confirmation" status that holds first-time COD orders from the courier until the customer confirms.
- Offer COD in the flagged pincodes only after confirmation, and show a clear message when it is unavailable.
- Show the prepaid incentive beside the payment options.
- Add a pincode checker on the product page.
It would then compare conversion, confirmed share and delivered share over several weeks and adjust thresholds. The numbers are not provided because this example is invented to illustrate the method.
Common mistakes
- Switching COD off for the whole store because of a problem in a few pincodes.
- Adding OTP for everyone and losing genuine buyers.
- Sending a confirmation message but not holding the order until it is answered.
- Hiding a COD fee until the last step.
- Measuring clicks on prepaid instead of delivered orders.
- Copying another store's thresholds.
- Building rules that only a developer can change.
- Forgetting consent when using WhatsApp for confirmation or marketing.
Questions to ask your ecommerce developer
- Which COD rules can we set ourselves, without code?
- Does the order system have an "awaiting confirmation" status that blocks dispatch?
- How do we verify phone numbers and addresses at checkout?
- Can we compare conversion and delivered orders before and after each change?
- How are WhatsApp confirmations consented, templated and logged?
- What happens to a customer who does not reply?
Working with Govindani Infotech on COD checkout builds
Govindani Infotech is a Pune-based website design and development company at 2nd Floor, Landmark Plaza, 206 Satara Road, Parvati Paytha, Pune 411009. We build and improve e-commerce stores on Shopify, WooCommerce and custom stacks, including checkout flows, order-status workflows and WhatsApp integrations, and our checkout system service page describes the checkout side in more detail.
If you would like a second opinion on your checkout and order workflow, send us your platform and a description of your current COD process and we will explain, before any price is discussed, which controls we would look at first. You can message us on WhatsApp at wa.me/919201958278 or write through our contact page.
Frequently Asked Questions
How can I reduce COD returns on my online store without removing COD?
Validate pincode, address and phone number at checkout, confirm risky orders by WhatsApp, OTP or call before dispatch, set COD rules by pincode, order value and customer type, and show the prepaid option clearly. Measure delivered orders, not just placed orders.
Should I use OTP verification for all COD orders?
Not necessarily. OTP adds a step and can cost you genuine customers. Many stores apply it to first-time buyers, high-value baskets or flagged pincodes, and leave repeat customers with a good history free of it.
Can I turn COD on or off for certain pincodes on Shopify or WooCommerce?
Usually, yes, through payment-customisation features, apps or plugins that apply conditions such as pincode, cart value and customer. The exact options depend on your platform version and plan, so confirm with your developer.
Is a COD fee allowed on my store?
Many Indian stores charge one, provided it is clearly disclosed before the customer commits. Showing it only at the last step is poor practice and can breach consumer-protection expectations. Ask a qualified adviser about your specific wording.
How do I know if my COD controls are working?
Compare, over several weeks, the checkout conversion rate and the number of delivered orders per hundred sessions before and after each change. If failed deliveries fall but conversion falls more, the control is too strict.
Sources: The practices above are general ecommerce engineering practice, not figures from a published study; no statistics are cited. Confirm platform features in the current Shopify and WooCommerce documentation, and messaging rules in the WhatsApp Business Platform documentation.