How to Charge a Cash on Delivery (COD) Fee on Shopify
Shopify has no native per-payment-method surcharge, so charging a COD fee takes a workaround. Here are the approaches that work, their trade-offs, and how to set up a clean COD fee flow.

Cash on delivery costs more to run than prepaid orders. Couriers often charge a collection fee, cash takes longer to reach your account, and some percentage of COD parcels are refused at the door and come back at your expense. Many merchants in COD-heavy markets want to pass part of that cost on with a small COD fee.
The catch is that Shopify has no native setting to add a surcharge based on payment method. You cannot say "add $2 when the customer chooses cash on delivery" in the admin. This guide walks through the approaches merchants actually use, what goes wrong with each, and how to build a setup that is clear for customers and easy for your team.
Why a COD fee can make sense
A COD fee also nudges behavior:
- It encourages prepaid payment for customers who are comfortable with either option, which reduces your refusal risk.
- It filters some impulse orders. A customer who is not serious about receiving the parcel is less likely to accept an extra charge.
- It makes your pricing honest. Instead of raising prices for everyone to cover COD costs, the customers who use the more expensive method cover more of its cost.
The trade-off is friction. Any fee at checkout can reduce conversion, so the goal is a fee that is small, clearly labeled, and only shown to customers who choose COD.
The approaches
Approach 1. A dedicated COD shipping rate
This is the cleanest approach on standard Shopify checkout. You create a separate shipping rate whose price already includes the COD fee, and then use payment rules so that COD only appears with that rate.
For example, if your standard shipping is $3 and your COD fee is $2:
| Shipping rate | Price | Payment methods shown |
|---|---|---|
| Standard shipping (prepaid) | $3.00 | Cards, wallets, bank transfer |
| Standard shipping + COD fee | $5.00 | Cash on delivery only |
The customer picks a shipping rate first, then reaches the payment step. A Payment Customization function checks which delivery option was selected and shows the matching payment methods. When the COD rate is selected, COD becomes the only option, so it is effectively auto-chosen. When the prepaid rate is selected, COD is hidden.
Why this works well:
- The fee is visible as part of the price before payment.
- No extra products in the cart, no inventory side effects.
- The fee appears on the order as shipping, which is easy to reconcile.
Approach 2. A fee product
Some merchants create a product called "COD handling fee" and ask customers to add it, or add it with a cart script. It looks simple, but it has real downsides:
- Payment is chosen after the cart. You cannot reliably add or remove the product based on the payment method the customer picks later.
- Customers remove it. Nothing stops someone from deleting the fee and still choosing COD, unless you add a validation rule.
- It distorts reports. The fee shows up as product sales, can affect inventory and best-seller lists, and complicates refunds.
Step-by-step setup for the COD shipping rate method
- Decide the fee. Keep it modest and round, for example $1 or $2, and decide whether it is flat or varies by region.
- Create the COD rate. In Settings → Shipping and delivery, add a second rate to each relevant zone, named clearly, such as "Standard shipping + COD fee ($2)". Price it as your standard rate plus the fee.
- Mirror conditions. If your standard rate is free above a threshold, decide whether the COD rate should also drop. Often merchants keep the COD fee even when shipping is free, so the COD rate becomes $2 above the threshold.
- Add the payment rules. With a Payment Customization function, hide COD when the selected delivery option is not the COD rate, and hide all other methods when it is.
- Optionally reorder delivery options. Put the prepaid rate first so it is the default choice. Our guide on renaming and reordering shipping methods covers this.
- Explain it once. Add a short line on your shipping policy or FAQ: "Cash on delivery orders include a $2 handling fee."
- Test every path. Place a COD order, a prepaid order, and an order where the customer switches rates after reaching the payment step.
Concrete examples
- Flat fee everywhere. Every zone gets a COD rate at standard price plus $2. Simple and easy to explain.
- COD only below a cart value. Combine the COD rate with a rule that hides COD above a certain total, since high-value COD orders carry more risk.
Pair the fee with risk rules
A COD fee helps, but it does not stop customers who never intended to accept the parcel. The strongest setups combine a fee with hiding COD for risky orders: first-time customers in high-refusal areas, addresses with prior refused deliveries, or carts above a value threshold. We cover the rules in detail in how to hide COD for high-risk orders, and the regional patterns in COD fraud in Vietnam, Indonesia and the Philippines.
Blockly Fraud Filter can handle the risk side, while your checkout rules handle the fee presentation.
Legal and policy considerations
Rules about surcharging differ by country and sometimes by payment type. Some places restrict or prohibit surcharges on certain payment methods, while others allow them if they are disclosed clearly and reflect actual cost. Before you launch a COD fee:
- Check the consumer protection rules in each market you sell to.
- Make sure the fee is shown before the order is placed, never added later.
- Keep the fee proportionate to your real costs.
- Check your courier and payment provider terms.
This is general information, not legal advice.
Pitfalls and edge cases
- Customers choose the COD rate but want to pay by card. If your rules hide card payments with the COD rate, they need to go back and switch rates. Name the rates clearly so this rarely happens.
- Express checkout buttons. Wallet checkouts usually do not offer COD, but they may still show your COD shipping rate. Hide the COD rate where it does not make sense, or name it so the purpose is obvious.
- Free shipping discounts. A free shipping discount can zero out your COD rate and remove the fee. Decide whether that is acceptable, or restrict the discount to rates below a certain price.
- Refunds. Decide in advance whether the COD fee is refundable when an order is returned.
How to do it with Blockly Checkout Customizer
Blockly Checkout Customizer, launching soon on the Shopify App Store, lets you build the payment side of this setup without code:
- Create your COD shipping rate in Shopify settings as described above.
- In the app, add a payment rule: hide Cash on Delivery when the selected shipping method is not "Standard shipping + COD fee".
- Add a second rule: when that rate is selected, hide all other payment methods.
- Optionally add a delivery rule to place the prepaid rate first.
- Save and run a few test checkouts.
The rules run as Shopify Functions, so they apply server-side and work on any plan.
Takeaway
Shopify does not offer a native COD surcharge, but you can get a clean result with a dedicated COD shipping rate plus payment rules that tie COD to that rate. Avoid fee products unless your store is very small. Keep the fee modest and clearly disclosed, check local surcharging rules, and pair the fee with risk-based COD hiding so you reduce both cost and refused deliveries.
Related articles

Limit Order Quantity per Product on Shopify

Shopify Checkout Links: Pre-fill Products, Discounts and Customer Details

