You built a one-click upsell. It works great — until a cash-on-delivery order comes in, and the offer never shows up. Here's the simple reason why, the full list of payment methods that block it, and five workarounds that still grow your order value on COD.
A post-purchase upsell charges a saved card with one tap. Cash on delivery has no saved card — the buyer pays cash at the door, later. So there is nothing for Shopify to charge, and it skips the offer on COD orders. The fix is simple: stop waiting until after checkout. Make your offer before the customer pays — in the cart, on the product page, or as a bundle. That works on every order, COD included. Our own app, Oxify Cart Drawer PostPurchase, was built for exactly this.
A post-purchase upsell is a one-click offer. It shows up right after the customer pays, on the thank-you page.
The magic is the one click. The card is already charged, so the buyer can add another item with a single tap. No new checkout. No typing card details again.
That one detail — "one click, no re-typing" — is the whole point. And it's also why COD breaks it.
COD means cash on delivery. The customer orders now and pays cash when the package arrives at their door.
In a lot of the world, COD is not a small thing. In India, industry reports put it at around 60% of online orders. It's also huge across parts of Southeast Asia, the Middle East, North Africa and Latin America. (See e-commerce in India for background.)
So if you sell in those markets, this isn't an edge case. It could be most of your orders. And right now, most of those orders show no upsell at all.
Here's the simplest way to think about it.
To charge an add-on in one click, Shopify needs a card it can use again. During a normal card or Shop Pay checkout, Shopify saves (or "vaults") that card for a few seconds. That saved card is what the upsell charges.
COD never gives Shopify a card. There's no payment yet — just a promise to pay cash later. So there is nothing to vault and nothing to charge.
When Shopify sees no card it can charge, it does the only sensible thing: it hides the upsell page and sends the buyer straight to the thank-you page.
This isn't a bug, and it isn't your app being broken. It's how Shopify's post-purchase product offers are built to work. Every post-purchase app — AfterSell, ReConvert, Zipify, ours — follows the same Shopify rule, so switching apps won't change it.
And it's not only COD. Any payment method where Shopify can't reuse the card gets skipped too — which surprises a lot of merchants.
Based on Shopify's published behaviour for post-purchase product offers as of June 2026. The exact list can change and can vary by region and gateway — always test with a real order on your own store. The common thread: the offer needs a card Shopify can charge again in one click.
Payment method is the big one. But even on a normal card order, Shopify will skip the post-purchase offer in a few other cases. If your offer "isn't showing" and the payment looks fine, check these:
Notice the pattern. Most of these come back to the same thing: Shopify can't safely charge a saved card in that situation, so it plays it safe and shows nothing. COD is just the most common version of that problem.
You can't force Shopify's native upsell onto a COD order. But you don't need to. You just need to move the offer to a spot where a saved card isn't required. Here are five ways, from easiest to most advanced.
This is the big one. Offer the extra item in the cart drawer, on the product page, or as a "frequently bought together" pick — before the customer pays.
No payment has happened yet, so no saved card is needed. It works on 100% of orders: COD, PayPal, gift card, all of them.
Think of it as catching the customer while the cart is still open, instead of after the door has closed. This is exactly what our app, Oxify Cart Drawer PostPurchase, is built to do — cart-drawer upsells, gifts and discounts that fire before payment, so COD orders count too.
Works on every COD orderGive people a reason to add more before they check out:
All of this lifts the order value at the cart, where COD doesn't get in the way. It's also the safest kind of upsell, since the customer is still deciding.
Works on every COD orderSome apps replace the normal checkout with a COD order form and add their own upsells and quantity offers right on that form.
They don't use Shopify's native post-purchase system, so they sidestep the saved-card problem. Well-known options in this space include EasySell, Releasit, CodMonster and Madgic.
Good fit if COD is most of your sales and you run a dropshipping-style store where the order form is your checkout.
Built for COD-heavy storesGive a small reward for paying online instead of COD:
Every customer who switches to prepaid unlocks Shopify's native post-purchase upsell again. Bonus: prepaid orders get returned far less often (more on that below).
Unlocks the native one-click upsellYou can still put an offer on the thank-you (order status) page for COD buyers. It shows fine there.
The catch: with no saved card, it can't charge silently. So a "yes" becomes a new order or a second step, not a one-tap add to the same order. Treat it as a bonus, not your main lever — and pair it with a follow-up email or SMS a few days later with a "complete the set" code.
Works, but not a silent one-click charge| Method | Works on COD? | Effort | Best for |
|---|---|---|---|
| Native post-purchase (one-click) | No | Low | Card & Shop Pay orders |
| Pre-checkout (cart drawer, bundles) | Yes | Low | Every store, especially COD |
| COD order-form app upsells | Yes | Medium | COD-heavy / dropshipping |
| Thank-you-page offer | Partly | Low | Bonus add-on, any method |
| Post-delivery email / SMS | Yes | Low | Repeat sales |
"Partly" means the offer can show, but it can't charge a saved card on COD, so a yes becomes a separate order or second step. For a deeper look at where each offer lives, see our guide on post-purchase vs pre-purchase upsells.
You don't have to choose just one. But if you want a simple plan:
The smart move for most stores: do your upselling before checkout so it works for everyone, then use prepaid nudges to slowly grow the share of orders that can get a native post-purchase offer. That's the combination we'd run, and it's why Oxify Cart Drawer PostPurchase puts the cart drawer, free gifts and volume discounts in one app.
Here's something many merchants miss. COD doesn't just block upsells — it also gets returned a lot.
When a COD package comes back undelivered, it's called RTO (return to origin). Industry data shows RTO can hit 20–30% of COD orders, versus just 2–3% for prepaid ones. You pay shipping both ways and get nothing.
So pushing customers toward prepaid does double duty. You unlock the one-click upsell and you cut expensive returns. That's why the prepaid nudge in workaround #4 is worth real effort, not just a footnote.
Want more of these? See our full list of post-purchase upsell mistakes that quietly flatten AOV.
The one-click upsell charges a saved card. COD has no saved card — the buyer pays cash at the door later — so there's nothing to charge. Shopify skips the offer page and sends the customer straight to the thank-you page.
COD and manual methods, gift cards, PayPal and express wallets (Apple Pay, Google Pay, Amazon Pay), buy-now-pay-later (Klarna, Affirm, Afterpay), and redirect gateways like Mollie. Offers mainly show for credit-card and Shop Pay orders. A non-default currency, duties, local delivery, and totals under $0.50 also hide them.
Not through Shopify's native post-purchase offer, because there's no saved card to charge. But you can still raise the order value on COD by offering before checkout (cart drawer, bundles, volume discounts) or by using a COD order-form app that adds its own upsells outside Shopify's native system.
Yes. Cart-drawer upsells, product-page bundles, free-gift thresholds and volume discounts all happen before payment, so they don't need a saved card. They work on every order — COD, PayPal and gift cards included.
They can show on COD orders, but they can't silently charge a card, so a "yes" becomes a separate order or a second confirmation rather than a true one-click add. For COD, raising the value before checkout or on a dedicated COD form is usually cleaner.
Standard PayPal and most express wallets don't, for the same reason as COD: the card isn't saved by Shopify during checkout. PayPal Express can work only if the account is approved for automatic payments (reference transactions).
Yes, twice over. Prepaid orders pay by card or Shop Pay, which unlocks the native post-purchase upsell. Prepaid also has much lower return rates than COD, so a small "pay online and save" reward often pays for itself.
Oxify Cart Drawer PostPurchase adds cart-drawer offers, free gifts, BOGO and volume discounts that fire before payment — so they work on every order, cash on delivery included.