COD form apps vs checkout rules: the trade-offs
There are two places to control cash on delivery on Shopify. A COD form app puts its own order form on your product or cart page. The shopper types a name, phone number and address, and the app creates the order in Shopify without the shopper ever opening Shopify's checkout. Checkout rules leave Shopify's checkout as it is and change the payment step, for example by hiding COD on big carts or showing an Arabic name. The two don't overlap: Shopify lists the Create Order API and draft orders handled in the admin among the places where payment customizations don't run, so checkout rules never see orders that a form app creates that way.
How does a COD form app work?
The app adds a short form, often in a pop-up or on the product page itself. It asks for what a COD order needs: name, phone, city and address, and sometimes a one-time code (OTP) sent to the phone. When the shopper submits the form, the app creates the order in your Shopify admin.
It does this through Shopify's Admin API, usually in one of two ways:
- It creates the order directly. Shopify describes its
orderCreateAPI as the way to create orders that don't come through the standard checkout. - It creates a draft order and completes it. Completing a draft turns it into a regular order on your Orders page, and Shopify says it commits the stock for the items at that point.
Either way, the order shows up in your admin with a payment method name the app chooses. Ask the app which method it uses, because that decides which Shopify features still apply to the order.
One reason stores use a form at all: adding your own fields or steps inside Shopify's information, shipping and payment pages uses checkout UI extensions, and Shopify makes those available only to stores on Shopify Plus. A form on the product page doesn't depend on your plan.
How do checkout rules work?
Checkout rules use a Shopify payment customization: a Shopify Function, added by an app, that runs while the shopper is at checkout. It can hide, rename or move payment methods. The app's rules decide when, using what the checkout knows: the cart total, the customer's tags and number of previous orders, the products and the delivery address.
The shopper goes through Shopify's normal checkout and sees every payment method you offer, minus any a rule hides. A store can have up to 25 active payment customizations. Checkout rules can't add a field or a step, and they can't check a phone number. They only decide which payment methods appear. For the full picture, see Shopify payment customizations explained.
Where don't checkout rules run?
Shopify's documentation for payment customizations lists where they run. The parts that matter when you compare the two approaches:
| Where the order comes from | Do payment customizations run? |
|---|---|
| Shopify's online checkout | Yes |
| The checkout link of a draft order | Yes |
| The Create Order API | No |
| A draft order handled in the admin | No |
| Shopify admin, POS, order editing | No |
A form app that creates and completes a draft order never opens that draft's checkout link, so there is no payment step for a rule to act on.
In practice, if you run a form app and a checkout rules app side by side, the rules only cover
shoppers who use the normal checkout. A big cart, a large first order or a customer you tagged
cod-refused can still order with COD through the form, unless the form app has limits of its
own. If you use both, set the same limits inside the form app, or the form becomes a way around
your rules.
What changes for the shopper?
A form is short, so a COD order takes fewer taps. That cuts both ways: it's quicker for a real shopper and for someone placing a prank order. Some form apps add a phone code (OTP) for that reason. The form also only speaks the languages the app supports, so check its Arabic before you switch it on.
With checkout rules, every shopper goes through the same Shopify checkout, in the languages you have set it up in. Low-risk shoppers see COD as usual. A risky checkout shows only your online methods, with no extra step.
The two approaches also fix different problems. A phone code catches fake numbers but can't stop a real shopper changing their mind. Hiding COD stops the riskiest orders from being placed with cash, but doesn't check the phone. Hide COD, COD fee, partial COD or OTP compares them in detail.
What changes in your data and reports?
An order created outside the checkout misses some things Shopify's checkout does on its own. Check these with the form app before you rely on it:
- Discounts. Shopify's documentation for
orderCreatesays automatic discounts aren't applied unless the app copies their logic, and only one discount code can be set per order. If you run sales, check that a form order gets the same price as a checkout order. - Abandoned checkouts. Shopify counts a checkout as abandoned when it stays incomplete for more than ten minutes after the shopper has entered their email, and lists it under Orders > Abandoned checkouts, where you can send recovery emails. A form that a shopper starts and leaves isn't a Shopify checkout, so it won't be on that list unless the app tracks it itself.
- Ad tracking. Shopify's standard purchase event for pixels,
checkout_completed, fires once for each checkout, usually on the Thank you page. An order created through the API has no Shopify checkout behind it, so that event doesn't fire for it. Ask the form app how it sends purchases to Meta, Google, TikTok or Snapchat, and how it avoids counting one sale twice. - Shipping and tax. The app, not Shopify's checkout, decides what goes on the order. Place a test order through the form and one through the checkout with the same cart and address, then compare the two.
With checkout rules, none of this changes. The order goes through Shopify's checkout as usual, and the rule only decides which payment methods the shopper sees.
Side by side
| Question | COD form app | Checkout rules |
|---|---|---|
| Where is the order placed? | The app's form | Shopify's checkout |
| Do payment customizations apply? | No, for API orders and completed drafts | Yes |
| Can it check the phone number? | Some apps add OTP | No |
| Can it stop risky COD orders? | Only with its own limits | Yes, by cart, customer, product or area |
| Shopify abandoned checkouts and pixel events | Not for form orders | Yes |
| Shopify plan | Any | Any, with a public app |
Which should you choose?
- A form app fits if your main problem is fake numbers and prank orders, and you're happy to manage COD limits inside the form, since checkout rules won't cover form orders.
- Checkout rules fit if your main problem is refused parcels from big carts, first orders or repeat refusers, and you want one checkout for every payment method, with Shopify's discounts, abandoned checkouts and pixel events working as usual.
- Both together work only if the form has the same limits as your checkout rules. Test both paths: one order through the form, and one through a draft order's checkout link (see how to test checkout payment rules with draft orders).
Khaleeji COD is a checkout rules app: it hides or renames COD inside Shopify's checkout and doesn't add an order form. Whichever kind of app you look at, go through the questions to ask before installing any COD app first.
Sources
- Shopify.dev: Payment customization Function API
- Shopify.dev: orderCreate mutation (Admin GraphQL API)
- Shopify.dev: draftOrderComplete mutation (Admin GraphQL API)
- Shopify.dev: Checkout UI extensions
- Shopify Help Center: Abandoned checkouts
- Shopify.dev: Web Pixels API, checkout_completed event
Checked on the date above. Shopify and courier settings change, so check the source if something looks different.