How to hide Cash on Delivery in Shopify (5 approaches compared)

Cash on Delivery drives huge volumes for Shopify stores in MENA, Southeast Asia, and Latin America — and an industry-average 25–35% return-to-origin rate that quietly eats margin. The most effective lever to claw that back is gating COD: keep it visible for the customers who’ll actually pay, and hide it from the ones who won’t. Here are the five concrete ways to do that on Shopify, with honest trade-offs.

Skip ahead to the comparison table if you just want the summary.

Why hide COD at all?

If you operate primarily in markets where COD is rare (US, EU, Australia), the answer is usually “don’t bother — just don’t activate it.” This post is for merchants in COD-heavy markets where:

The lever is to keep COD available for the predictable, safe customer profile, and force the high-risk profile onto pre-paid methods. Most stores doing this well see RTO rates drop 5–15 percentage points, which on a $50k/mo COD volume is meaningful money.

Five ways to do it, ordered roughly from least to most flexible.

Approach 1: Don’t activate COD in the first place

What it is

In Shopify admin: Settings → Payments → Manual payment methods. Either don’t add Cash on Delivery, or remove it. This is the simplest possible answer.

When it works

If your COD volume is so small (say, <5% of orders) that the gross revenue lost from disabling it is less than the RTO losses you’re absorbing, just turn it off entirely. Most US/EU stores fit this profile.

When it doesn’t work

In COD-heavy markets, this is throwing the baby out with the bathwater. You’d lose 40–80% of your topline. Not viable.

Approach 2: Manual per-order toggling

What it is

Keep COD activated for everyone, but manually intervene on suspect orders — cancel-and-refund the bad ones, or call the customer to confirm before fulfilling. No code required.

When it works

Very low order volume (say, <100 orders/day where you can eyeball every COD order before fulfillment) and you have time for outbound calls. Some merchants build a customer service team around this.

When it doesn’t work

It doesn’t scale. Once you’re past ~50 COD orders/day, the labor cost of manual review eats more than the RTO losses you’re preventing. And the failed-to-confirm calls still cost you something — you ate the freight to attempt the call.

Also: you’ve already shipped the order in many cases by the time you realize it looks suspect. The right place to stop these is before the customer hits “Complete order,” not after.

Approach 3: Shopify Scripts (deprecated June 30, 2026)

What it is

If you’re on Shopify Plus, you used to be able to write a Ruby Script in the Script Editor that hides COD based on cart total, customer tag, country, or other conditions. Example:

if Input.cart.subtotal_price >= Money.new(cents: 50000)
  Input.payment_gateways.delete_if { |gw| gw.name == "Cash on Delivery" }
end

That hides COD for any cart over $500.

When it works

It doesn’t, anymore. Shopify disabled editing of Scripts on April 15, 2026, and is shutting off execution entirely on June 30, 2026. Any Script you have today silently stops firing after that date. If you’re still relying on Scripts for COD gating, you have a migration deadline.

We covered the migration in detail in Migrating from Shopify Scripts to Functions. The short version: pick a Functions-native replacement and import your existing Scripts.

Approach 4: Build a custom Shopify Function

What it is

The official replacement for Scripts is Shopify Functions. You write a small WebAssembly program (Rust or JavaScript), deploy it through the Shopify CLI, and it runs at checkout to hide payment methods based on whatever logic you want.

When it works

If you have engineering resources and your COD-hiding logic is genuinely unusual — pulling data from an external risk-scoring API, combining 8+ signals in a weighted score, or running against a proprietary blacklist — a custom Function gives you total flexibility.

When it doesn’t work

Most merchants underestimate the lift. A from-scratch Function involves:

  • Learning Rust or the Shopify Functions JS runtime
  • Setting up the Shopify CLI, partner app, and Function deployment pipeline
  • Writing GraphQL metafield schemas for your rule configuration
  • Building an admin UI so non-engineers can edit the rules (otherwise every change is a code deploy)
  • Ongoing maintenance as Shopify Functions APIs evolve

Realistic timeline: 1–2 weeks of dev work, plus ongoing maintenance. Worth it if you’re a large enterprise with a Shopify engineering team. Not worth it for the 95% of merchants whose COD logic falls into a handful of well-understood patterns.

Approach 5: A payment customization app (PayLogic and others)

What it is

An app installed from the Shopify App Store that runs as a Function on your behalf and exposes a visual rule-builder so you can configure the COD gating without writing code.

There are several apps in this space. They differ on architecture (older ones use the carrier-service-callback hack, newer ones are Functions-native), feature coverage, and pricing. The honest picks worth evaluating are the Functions-native ones with Built-for-Shopify status — PayLogic is one, and a couple of others exist.

When it works

This is the right answer for nearly every Shopify merchant who’s gating COD as a business rule. You get:

  • Rules configured in minutes, by anyone on the team — no engineering required
  • Cover for the common patterns (cart total, country, customer tag, first-time customer, item count) out of the box
  • A migration path off Scripts if you’re still on them
  • With some apps (including PayLogic): gating COD by Shopify’s own order risk model. This is the move that Scripts could never do — hiding COD specifically from customers Shopify has previously flagged HIGH or MEDIUM risk on prior orders. For COD-heavy markets, this single rule typically cuts RTO 5–15 percentage points.

When it doesn’t work

If your COD gating logic genuinely requires an external API call, custom risk-scoring math, or something else outside the standard rule templates, an app won’t do it for you — you’d need a custom Function (approach 4). But this case is rarer than people assume.

Side-by-side comparison

Approach Works for Cost Effort Future-proof
1. Don’t activate Stores with negligible COD volume Free 2 min Yes
2. Manual toggling Very low volume + customer-service team Labor Ongoing Yes
3. Scripts Shopify Plus only — and ends June 30, 2026 Free (until deadline) Dev required No
4. Custom Function Large stores with engineering capacity Dev time 1–2 weeks Yes
5. Payment customization app Almost everyone $1.99–$25/mo 15 min Yes

The rule that pays for itself in COD-heavy markets

If you only do one COD-gating rule, do this one:

Hide Cash on Delivery when the customer has prior orders flagged HIGH or MEDIUM risk by Shopify.

Shopify automatically assesses every order for fraud risk and stores the result. Returning customers carry that history. A customer who no-showed on COD last month, or whose previous order shipped to a suspect address, will have HIGH or MEDIUM markers on their record — and you should not be offering them COD a second time.

This is the rule Scripts couldn’t do (Scripts had no access to order risk). Functions can. PayLogic exposes it as a one-toggle rule on the Plus tier, but any Functions-native app with order-risk access would do the same job.

On a store doing $50k/month of COD with a 30% RTO rate, dropping RTO to 25% recovers roughly $7,500/year in freight and product return losses. The app pays for itself in roughly a week.

What to do this week

  1. Pull your last 90 days of orders and check the RTO rate on COD specifically. If it’s under 5%, this is a low-priority project. If it’s above 15%, this is probably your single highest-ROI fix.
  2. If you’re still on Shopify Scripts, you have a deadline anyway. Migrate to a Functions-native app and add COD gating as part of the migration.
  3. If you’re not on Scripts, install a payment customization app on a dev store, configure the COD rules you want, test them with bogus gateway orders, then enable on production.
  4. Watch your RTO rate for 30 days. Most stores see the drop within the first 2 weeks of rule activation.

Try PayLogic on the Plus tier free for 3 days

Install free from the App Store. The risk-history COD rule that powers the “hide COD for customers Shopify flagged risky” behavior is on the $9.99 Plus tier, with a 3-day trial.

Install PayLogic