How to link Cash on Delivery to specific shipping methods in Shopify

Updated · ACOD (E-TRADE PARTNER)

Shopify has no native setting that ties a payment method to a shipping method — but Shopify Functions can enforce it: show the Cash on Delivery payment method only when a chosen shipping rate is selected, and hide your prepaid-only rates when COD is picked. That link is exactly what ACOD does, and it's also how you charge a COD fee cleanly and run two different pay-on-delivery options with different fees and couriers — on any plan, not just Shopify Plus.

Why would you link a payment method to a shipping method?

  • Charge a COD fee. Put the fee in the price of a dedicated “Cash on Delivery” shipping rate. If the rate and the COD payment method only appear together, every COD order pays the fee — and no prepaid order ever does.
  • Use the right courier. Many merchants ship COD orders with a courier that offers cash collection and prepaid orders with a cheaper one. The link guarantees the order lands on the courier that can actually collect the money.
  • Offer two pay-on-delivery options. Cash at the door with courier A, card at the door with courier B — each with its own fee. Customers self-select at checkout; no order notes, no follow-up calls.

Why this is hard in plain Shopify

Two platform limits collide here. First, Shopify allows only one manual “Cash on Delivery” payment method per store — you cannot create a second COD method for a second courier or fee. Second, payment methods and shipping rates are computed independently at checkout: nothing stops a customer from selecting your express prepaid rate and then paying COD, skipping your fee entirely. Checkout scripts used to patch this on Plus; they're gone. The current mechanism is Shopify Functions payment and delivery customizations, which run natively inside checkout on every plan.

The setup, step by step

  1. Activate the manual COD payment method in Settings → Payments → Manual payment methods. If you'll offer more than one pay-on-delivery variant, rename it to something generic like “Pay on delivery” — the shipping rate will carry the specifics.
  2. Create your COD shipping rate(s) in Settings → Shipping and delivery, in every zone where you offer COD. The rate price is your COD fee. For two variants, create two rates: “Pay on delivery — cash (Courier A)” priced at your cash fee, and “Pay on delivery — card (Courier B)” priced at your card fee.
  3. Link them in ACOD. Tell ACOD which shipping rates are your COD rates. From then on the pay-on-delivery payment method appears only when one of those rates is selected — and, the other direction, ACOD hides those COD rates for customers who choose prepaid payment paths where they don't belong.
  4. Add availability rules if you need them — hide the whole COD option by country, state, city, postal codes (including prefix rules), order value, products, collections, SKUs, or customer tags.
  5. Test with testing mode on. ACOD's testing mode limits the setup to checkouts using test@example.com, so you can verify the fee and the linking on your live store without real customers seeing anything change.

What the customer sees

At the shipping step, the customer picks “Pay on delivery — cash (+$4)” or “Pay on delivery — card (+$6)” — or a normal prepaid rate. If they pick a pay-on-delivery rate, the matching payment method is available at the payment step; if they pick a prepaid rate, pay-on-delivery is hidden. The fee travels inside the shipping line, so totals, taxes, and refunds behave like any standard Shopify order, and the order clearly shows which courier to dispatch.

Honest limits

The fee is a fixed amount per rate (per zone), not a percentage of the order. And because the fee is part of the shipping line, it appears as shipping on invoices and exports — if your accounting needs the fee as a separate order line item, read our explainer on the shipping-rate vs line-item trade-off.

Can other COD apps do this?

Most COD fee apps charge the fee (as a shipping rate or a cart line) and can hide COD by conditions, but the two-way link between specific shipping rates and the COD payment method — which is what makes multiple pay-on-delivery variants with different fees possible — is ACOD's specialty. It's a question that comes up unresolved in Shopify's community forums, where merchants are usually told a second COD option is impossible. It isn't: one payment method, several linked rates, each carrying its own fee and courier.

Set up the COD ↔ shipping link in about 5 minutes

ACOD locks the pay-on-delivery payment method to the shipping rates you name — with fees per rate, per zone, plus full show/hide rules.

Install ACOD on Shopify — 7-day free trial

Frequently asked questions

Can I have two Cash on Delivery payment methods in Shopify?

No — Shopify allows one manual COD payment method per store. But you can offer several pay-on-delivery variants by creating one shipping rate per variant (each with its own fee and courier) and linking them all to the single payment method with ACOD.

Does this require Shopify Plus?

No. The linking runs on Shopify Functions payment and delivery customizations, which work on every plan including Basic. Nothing touches checkout.liquid or theme code.

Can the COD fee be different per region?

Yes. Shipping rates are defined per zone, so the same “Cash on Delivery” rate can cost a different amount in each shipping zone — one fee for domestic, another for a neighboring country.

What happens if a customer picks a prepaid shipping rate?

The pay-on-delivery payment method is hidden at the payment step, so they can't combine a prepaid rate with COD payment — which is exactly the loophole that lets customers dodge COD fees when apps only add a fee without enforcing the link.