# Khaleeji COD: full text > Everything on https://khaleejicod.com as plain text, for AI assistants and other tools. Facts checked 2026-10-26. ## Facts - Name: Khaleeji COD. Arabic name: خليجي للدفع عند الاستلام. Shopify App Store listing name: Khaleeji COD: Gulf COD Rules. - What it is: A Shopify app that hides, limits or renames the Cash on Delivery (COD) payment method at checkout, so risky orders pay online instead. - Made for: Shopify stores selling in the Gulf (GCC): United Arab Emirates, Saudi Arabia, Kuwait, Qatar, Bahrain and Oman. - Made by: Trifid Media LLC, Dubai, United Arab Emirates. - Status: Coming soon to the Shopify App Store. Not listed there yet. - Price: Free plan: Arabic or English COD name and 1 checkout rule. Pro plan: $7.99 per month with a 14-day free trial, billed through Shopify. - Checkout rules: COD is hidden when any switched-on rule matches: customer tagged cod-refused or cod-blocked; cart total above an amount; first order (or guest) above an amount; a product tagged no-cod in the cart; shipping emirate in a blocked list (codes such as AE-AZ); shipping city in a blocked list (English or Arabic). No postcodes needed. - GCC preset: One click switches on the refuser, cart-above (1,500), first-order-above (500) and no-cod product rules, in the shop's currency, plus the COD rename. - COD name: Arabic-language checkouts show «الدفع عند الاستلام»; other checkouts show "Cash on Delivery". Both are editable. - Refuser scan: Finds COD orders placed in the last 60 days that were cancelled, and offers to tag those customers cod-refused. Nothing is tagged without confirmation. - Money-lost report: Cancelled COD orders that had shipped × (shipping out + shipping back), using costs the merchant enters. Orders cancelled before shipping are counted separately as costing no shipping. - Never changes: Card payments, wallets such as Apple Pay, buy-now-pay-later options such as Tabby and Tamara, and any non-COD method. Missing or broken settings mean no change. - Languages: Admin page in Arabic (right to left) and English. Checkout COD name in Arabic and English. - How it runs: A Shopify Function (payment customization) inside Shopify's checkout. Settings are stored in the merchant's own store. No scripts added to the theme. - Shopify plans: Public Shopify apps with Functions can be used on every Shopify plan. - Data: Stores no customer data outside the merchant's Shopify store. - Support: 9090mohammad123@gmail.com - Website: https://khaleejicod.com ## Features ### Checkout rules Khaleeji COD adds one rule to your Shopify checkout. It checks each order against the rules you switched on, and hides Cash on Delivery when any of them match. Everyone else sees COD as normal. - Past refusers: Customers tagged cod-refused or cod-blocked. Works when the checkout is linked to the customer, for example when they're logged in. - Cart above an amount: In your shop's currency. Carts paid in other currencies are converted before the check. - Large first orders: A guest checkout, or a customer with no previous orders, above a smaller amount. - Products tagged no-cod: One tagged product switches COD off for the whole cart. Good for custom-made, fragile or high-value items. - Emirates: Emirate codes such as AE-AZ (Abu Dhabi) or AE-FU (Fujairah). Shopify's checkout asks for the emirate in the UAE. In Saudi Arabia, Qatar, Bahrain and Oman it asks for no region, so use the city rule there. - Cities: Exact names in English or Arabic, such as Al Ain or العين. ### The GCC preset One click switches on four rules with starting amounts, which you then adjust to your store: past refusers, carts above 1,500, first orders above 500, and products tagged no-cod. Amounts are in your shop's currency. The region and city rules stay off until you fill them in. ### A clear name for COD, in Arabic and English Shopify shows the built-in method as "Cash on Delivery (COD)" in English. Khaleeji COD renames it at checkout: «الدفع عند الاستلام» for shoppers using your Arabic checkout, and "Cash on Delivery" for everyone else. You can edit both names. ### Refuser scan The scan finds orders placed in the last 60 days that were cancelled, keeps the ones paid by COD, and lists their customers. One click tags them cod-refused, so the past-refuser rule hides COD for them next time. Nothing is tagged until you confirm, and customers who already have the tag are skipped. ### Money-lost report Type what one order costs you to ship out and to ship back. The report counts the cancelled COD orders that had shipped (Shopify recorded a fulfillment) and multiplies. Orders cancelled before they shipped are listed separately, because they cost no shipping. It leaves out packaging, fees and ad spend, so treat it as an estimate. ### Admin page in Arabic The settings page follows your Shopify admin language and switches to Arabic, right to left, with one click. Every rule, message and button is translated. ### Built to fail safe A payment rule should never cost you a sale by mistake, so Khaleeji COD is careful by design. - Only Cash on Delivery changes. Cards, Apple Pay, Tabby, Tamara and every other method are never touched. - Missing or broken settings mean no change. It never hides every payment method. - One payment customization for all rules. Shopify allows 25 per store. - No scripts added to your theme or storefront. - Your rules are stored in your own Shopify store. No customer data is kept anywhere else. ## Pricing - Free: Arabic or English name for COD at checkout; 1 checkout rule of your choice; Arabic and English admin page. - Pro ($7.99/month): Every checkout rule, switched on together; One-click GCC preset; Refuser scan and one-click tagging; Money-lost report; 14-day free trial. **How am I billed?** Through Shopify. The Pro charge appears on your regular Shopify invoice. There's no separate account or card to add. **How does the free trial work?** Pro starts with a 14-day free trial. You're only charged if you keep Pro after the trial. **Can I cancel?** Yes, at any time. Switching back to Free or removing the app stops the Pro charge. Shopify handles the billing. **Is it free on development stores?** Yes. On Shopify development stores, Pro can be tested at no charge. ## FAQ ### What does Khaleeji COD do? It hides, limits or renames the Cash on Delivery payment method at Shopify checkout. When an order matches a rule you set (a past refuser, a big cart, a large first order, a no-cod product, or a blocked region or city), COD is hidden for that checkout, so the shopper pays online or doesn't order. It also renames COD to a clear Arabic or English name. ### Is Khaleeji COD on the Shopify App Store? Not yet. It's coming soon. Email 9090mohammad123@gmail.com and we'll tell you the day it's live. ### Which countries is it for? It's built for stores selling in the Gulf (GCC): the UAE, Saudi Arabia, Kuwait, Qatar, Bahrain and Oman. Emirate rules use the UAE's emirate codes. In the other Gulf countries Shopify's checkout asks for no region, so use city rules there. No postcodes are needed anywhere. ### Does it change card, Apple Pay, Tabby or Tamara payments? No. Khaleeji COD only ever changes Cash on Delivery. Every other payment method stays exactly as you set it up. ### How does it know which payment method is COD? By name. It recognises "Cash on Delivery", "Cash-on-Delivery", "Pay on Delivery", "COD", "C.O.D" and the Arabic names «الدفع عند الاستلام», «الدفع عند التسليم» and «الدفع نقدا عند الاستلام». ### What happens if the settings break? Nothing is hidden. If the settings are missing or can't be read, COD shows as normal. Khaleeji COD never hides all payment methods. ### Which Shopify plans does it work on? Khaleeji COD is built as a public Shopify app using Shopify Functions. Shopify allows public apps with Functions on every plan, not only Shopify Plus. ### Does it work for guest checkouts? Yes, for the cart total, first-order, product, region and city rules. A guest checkout counts as a first order. The past-refuser rule needs the checkout to be linked to a customer record, because guests carry no tags. ### What currency are the amounts in? Your shop's currency. If a shopper pays in another currency, the cart total is converted to your shop's currency before it's compared. ### Can I set a different COD name for Arabic shoppers? Yes. Shoppers whose checkout language is Arabic see «الدفع عند الاستلام» by default, and everyone else sees "Cash on Delivery". You can edit both names. ### How does the refuser scan work? It finds orders placed in the last 60 days that were cancelled, keeps the ones paid by COD, and lists their customers. You click "Tag N customers" to add the cod-refused tag. Nothing is tagged before you confirm, and customers who already have the tag are skipped. ### How is the money-lost number worked out? Number of cancelled COD orders that had shipped (Shopify recorded a fulfillment) × (your shipping cost out + your shipping cost back). You type in the two costs. Orders cancelled before they shipped cost no shipping, so they're left out. It's an estimate: packaging, fees and ad spend aren't included. ### Does it store customer data? No customer data is kept outside your store. Your rules are saved inside your own Shopify store. The scan runs in your Shopify admin and only adds a tag when you ask it to. ### Does it add anything to my theme or slow down checkout? It adds no scripts to your theme or storefront. The rule runs inside Shopify's checkout as a Shopify Function. ### Does it work on Shopify POS or orders created in the admin? No. Shopify runs payment customizations on the online checkout only, not in POS or when you collect payment inside the admin. A draft order's checkout link does use the rules. ### Can I use it with other payment apps? Yes. Shopify allows up to 25 payment customizations per store, and Khaleeji COD uses one for all its rules. ### How much does it cost? Free covers the Arabic/English COD name and 1 rule. Pro is $7.99 a month with a 14-day free trial and includes every rule, the refuser scan and the money report. Billing goes through Shopify. ### Who makes Khaleeji COD? Trifid Media LLC, a company in Dubai, UAE. Support: 9090mohammad123@gmail.com. --- # Cash on delivery in the UAE: a guide for Shopify stores URL: https://khaleejicod.com/guides/cash-on-delivery-uae/ Updated: 2026-10-26 Short answer: In Shopify, COD is a manual payment method, so each COD order stays Pending until you mark it paid. Shopify's UAE address form asks for an emirate from a fixed list of seven and a typed city, with no postcode. So UAE COD rules work by emirate code (such as AE-DU) or by city name. On a Shopify store, cash on delivery is a manual payment method. The shopper places the order without paying, the courier collects the money at the door, and the order stays **Pending** in your admin until you mark it as paid. For UAE orders, Shopify's checkout asks for the emirate from a fixed list of seven and a city that the shopper types in. There is no postcode field. So if you want COD rules based on location, set them by emirate or by city name. ## How does COD work for a UAE Shopify store? 1. You turn on cash on delivery in your Shopify admin under **Settings > Payments**, in the manual payment methods section. 2. The shopper picks COD at checkout. Shopify marks the order as **Pending** on the **Orders** page. 3. You ship with your courier. The courier collects the money and pays it to you on the schedule in your contract, minus any COD fee they charge. 4. Once you receive the money, you mark the order as paid in Shopify. If the shopper refuses the parcel or can't be reached, the courier brings it back. In Shopify, the refused order stays Pending until you cancel it. ## What does Shopify's UAE checkout ask for? For a UAE shipping address, Shopify's address data uses these fields: name, company, address, a second address line, city, emirate and phone. The emirate is chosen from a dropdown. The city is free text. Shopify stores each emirate as a short code. Rules that check the region join the country code and this code, for example `AE-DU` for Dubai. | Emirate | Arabic | Rule code | |---|---|---| | Abu Dhabi | أبو ظبي | `AE-AZ` | | Ajman | عجمان | `AE-AJ` | | Dubai | دبي | `AE-DU` | | Fujairah | الفجيرة | `AE-FU` | | Ras al-Khaimah | رأس الخيمة | `AE-RK` | | Sharjah | الشارقة | `AE-SH` | | Umm al-Quwain | أم القيوين | `AE-UQ` | The English spellings above are Shopify's own. Use the codes, not the names, when you set a region rule. ## Why don't postcode-based COD rules work in the UAE? A COD rule based on postcode needs a postcode to check. Shopify's UAE address form has no postcode field, so a postcode rule has nothing to match. Use these instead: - **The emirate**, when the whole emirate needs the same treatment. - **The city**, when you need something smaller than an emirate. - **Non-location rules**, such as cart total, first order, customer tags and product tags. Without a postcode, the courier depends on what the shopper types in the address lines. Good address details matter more in the UAE than in postcode countries. See [better UAE addresses: landmarks, Makani numbers and delivery notes](/guides/uae-addresses-makani/). ## Where do refusals hurt a UAE store? A refused COD order costs you shipping out, shipping back, any COD or return fee in your courier contract, packaging, and the days your stock is away from the shelf. You also paid to win that order with ads. For a full worked calculation, see [what one refused COD order really costs](/guides/cost-of-a-refused-cod-order/). The loss is bigger in some situations than others. Look at your own cancelled COD orders for patterns like these: - **Large carts.** More stock is away from the shelf, and more cash is at stake. - **First orders.** You know nothing about a new shopper yet. - **Repeat refusers.** A customer who refused before may refuse again. - **Products that are hard to resell** after a return trip, such as custom or fragile items. - **Long delivery routes**, where your courier charges more for the trip back. ## What can UAE shoppers pay with instead? Hiding COD only works if the shopper has an online option they trust. In the UAE you can offer: - **Cards.** Shopify Payments is available for stores in the UAE and accepts credit and debit cards and accelerated checkouts. You can also use a third-party payment provider. - **Apple Pay.** Apple lists the UAE as a country that supports Apple Pay. Whether it shows at your checkout depends on your payment provider. - **Buy now, pay later**, if your payment provider offers it. For ways to make online payment the easy choice, see [nudging shoppers from cash to card](/guides/move-shoppers-from-cash-to-card/). ## How do you set COD rules per emirate or city? Shopify lets apps change the payment step with **payment customization Functions**. A Function can hide, rename or reorder payment methods at checkout. Stores on any plan can use public App Store apps that contain Functions. Only custom apps with Functions need Shopify Plus. ### By emirate The emirate comes from a dropdown, so it is always spelled the same way. That makes emirate rules reliable. > **Example:** You ship from Dubai and your courier charges more to bring parcels back from > Fujairah and Ras al-Khaimah. You could hide COD for `AE-FU` and `AE-RK` and keep it everywhere > else. These emirates are only an example. Use your own refusal and courier data. ### By city A city rule is useful when an emirate is too big. Blocking `AE-AZ` hides COD for the whole emirate of Abu Dhabi, including Al Ain. If you only want to change COD for Al Ain, use a city rule. The city is typed by the shopper, so the same place can arrive in several spellings: "Al Ain", "Alain", "Al-Ain" or «العين». Before you rely on a city rule, export your orders and check what shoppers actually typed in the **Shipping City** column. Add each common spelling to your list. Khaleeji COD has both rules: blocked regions written as codes like `AE-AZ`, and a blocked city list that matches the exact English or Arabic name, without caring about upper or lower case. More detail is in [how to limit COD by emirate, region or city](/guides/limit-cod-by-emirate-or-city/). ### Check the rule Place a test order to an address in the emirate or city you blocked, and open the payment step. COD should be missing. Then try an address outside the rule and check that COD is back. > **Note:** Payment customizations run on the online checkout only. They don't change what you > see when you collect payment for a draft order inside the Shopify admin. Sources: - Shopify worldwide: United Arab Emirates address data (AE.yml): https://github.com/Shopify/worldwide/blob/main/data/regions/AE.yml - Shopify Help Center: Manual payment methods: https://help.shopify.com/en/manual/payments/manual-payments - Shopify Help Center: Shopify Payments for the United Arab Emirates: https://help.shopify.com/en/manual/payments/shopify-payments/supported-countries/united-arab-emirates - Apple Support: Countries and regions that support Apple Pay: https://support.apple.com/en-us/102775 - Shopify.dev: Payment customization Function API: https://shopify.dev/docs/api/functions/latest/payment-customization - Shopify.dev: About Shopify Functions: https://shopify.dev/docs/apps/build/functions --- # Cash on delivery in Saudi Arabia: a guide for Shopify stores URL: https://khaleejicod.com/guides/cash-on-delivery-saudi-arabia/ Updated: 2026-10-26 Short answer: Shopify's Saudi address form has no region field, so COD rules by location must use city names in English and Arabic. Saudi press reports say parcel companies may not carry shipments without a National Address since January 2026. Offer mada and Apple Pay through a third-party provider. On Shopify, cash on delivery is a manual payment method in Saudi Arabia just as it is anywhere else. Three things are different for Saudi orders. Shopify's Saudi address form doesn't ask for a region, so location rules have to use city names. The Saudi press has reported that, from January 2026, parcel companies may not accept or carry shipments without a National Address. And Shopify Payments isn't available in Saudi Arabia, so online payment (including mada) goes through a third-party provider. ## What does Shopify's Saudi checkout ask for? Shopify's address data for Saudi Arabia uses these fields: name, company, address, a second address line, city, postal code and phone. The postal code is five digits and Shopify marks it as optional. What's missing matters for COD: - **No region or province field.** Shopify keeps no list of Saudi regions, so a Saudi order never carries a region code. - **No district field and no National Address field.** The shopper writes the district, building number and street in the address lines, in whatever order they like. Shopify's own example Saudi address is written in Arabic, with the city as «الرياض». Expect city names in Arabic as well as English. ## Should COD rules use cities or regions in Saudi Arabia? Use cities. A rule that checks the region code can never match a Saudi order, because Shopify's checkout doesn't record one. A city rule checks what the shopper typed in the city field. Because the city is typed, one place can arrive under several names. Build your list from real orders: 1. In your Shopify admin, go to **Orders** and click **Export** to download your orders as a CSV file. 2. Filter the **Shipping Country** column to Saudi Arabia, then look at the **Shipping City** column. Note every spelling of the cities you care about. 3. Add each spelling to your city rule, in English and in Arabic. > **Example:** A store that wants to treat Jeddah differently might list "Jeddah", "Jiddah", > "Jedda" and «جدة». For Makkah it might list "Makkah", "Mecca", «مكة» and «مكة المكرمة». > These spellings are examples. Use the ones that appear in your own orders. Khaleeji COD matches city names exactly, in English or Arabic, without caring about upper or lower case. "riyadh" and "Riyadh" match each other, but "Ar Riyadh" is a separate entry. For more on spelling variants, see [how to limit COD by emirate, region or city](/guides/limit-cod-by-emirate-or-city/). City rules are only one option. Rules that don't depend on the address work the same in every country: hiding COD above a cart total, on large first orders, for tagged customers who refused before, and for tagged products. ## Why does the National Address matter for COD orders? The Saudi newspaper Al Eqtisadiah reported in April 2025 that the Transport General Authority had decided that, from the start of January 2026, parcel transport companies may not accept or carry a shipment without a National Address. The stated aims were better customer experience, faster deliveries and fewer calls between couriers and recipients. For a COD store, this means your courier should refuse a parcel that has no National Address. Get the address before you hand the parcel over, either at checkout or in your order confirmation message. The National Address has a short form of four letters and four numbers that shoppers can look up in government apps. How to ask for it, and how to check it, is covered in [Saudi National Address and fewer failed deliveries](/guides/saudi-national-address/). ## What can Saudi shoppers pay with online? When you hide COD on a risky order, the shopper needs an online option they already use: - **mada cards.** In 2018 the Saudi Central Bank (SAMA) allowed all banks to switch on mada cards for online payments. Shoppers can pay with a mada card at online stores whose payment provider supports it. - **Credit cards.** - **Apple Pay.** Apple lists Saudi Arabia as a country that supports Apple Pay. - **Buy now, pay later**, if your payment provider offers it. Saudi Arabia isn't on Shopify's list of countries where Shopify Payments is available, so you need a third-party payment provider. When you choose one, check that it supports mada. A checkout that accepts only credit cards leaves out shoppers whose only card is a mada card. ## How do you make the checkout work in Arabic? Arabic isn't one of the 33 languages Shopify's checkout comes pre-translated in, so you have to provide the Arabic checkout translations yourself, for example with Shopify's Translate & Adapt app. Shopify's address data lists both Arabic and English as languages of Saudi Arabia, so plan for both. The steps are in [how to offer an Arabic checkout on Shopify](/guides/arabic-checkout-shopify/). The COD option needs an Arabic name too. In Arabic, cash on delivery is usually written «الدفع عند الاستلام» ("payment on receipt"). A payment customization can show the Arabic name only to shoppers on your Arabic checkout and keep the English name for everyone else. Khaleeji COD does this when its rename is switched on, and you can edit both names. For other wordings, see [what to call Cash on Delivery in Arabic](/guides/cash-on-delivery-in-arabic/). ## A starting checklist for Saudi COD - Turn on COD in your payment settings and give it a clear Arabic name. - Offer at least one online option that accepts mada. - Collect the National Address before you ship. - Hide COD above a cart total and on large first orders, using amounts from your own refusal history. - Tag customers who refused COD before, and hide COD for them. - Add city rules only for cities where your own data shows a problem, with every spelling you found. Sources: - Shopify worldwide: Saudi Arabia address data (SA.yml): https://github.com/Shopify/worldwide/blob/main/data/regions/SA.yml - Al Eqtisadiah: National address on shipments a condition for parcel transport in Saudi Arabia from 2026 (Arabic, 17 April 2025): https://www.aleqt.com/2025/04/17/article_2759956.html - SAMA Rulebook: Use mada bank cards for buying products through the internet (circular, March 2018): https://rulebook.sama.gov.sa/en/node/4689 - Shopify Help Center: Shopify Payments supported countries: https://help.shopify.com/en/manual/payments/shopify-payments/supported-countries - Apple Support: Countries and regions that support Apple Pay: https://support.apple.com/en-us/102775 - Shopify Help Center: Requirements and considerations for selling in multiple languages: https://help.shopify.com/en/manual/international/languages/requirements - Shopify Help Center: Exporting orders: https://help.shopify.com/en/manual/fulfillment/managing-orders/exporting-orders --- # Cash on delivery in Kuwait: a guide for Shopify stores URL: https://khaleejicod.com/guides/cash-on-delivery-kuwait/ Updated: 2026-10-26 Short answer: KNET lets Kuwaiti shoppers pay online with a local bank debit card, so offer it next to COD. Shopify's Kuwait checkout asks for a governorate (one of six), a block, a typed city and an optional postal code. Governorates cover large areas. For smaller areas, use city names. In Kuwait, the local online alternative to cash on delivery is **KNET**, which lets shoppers pay with a debit card from a Kuwaiti bank. Shopify's Kuwait checkout asks for the governorate from a fixed list of six, a block number, and a city that the shopper types. Use the governorate when a rule should cover a large area, and city names when you need something smaller. ## What does Shopify's Kuwait checkout ask for? For a Kuwait shipping address, Shopify's checkout shows these address fields: - **Address**: street and house or building. - **Apartment, suite, etc.** - **Block** «قطعة». Shopify shows this field automatically for Kuwait, and it's required. You can't turn it off or make it optional. - **Postal code**, which Shopify doesn't require for Kuwait. - **City**, typed by the shopper. - **Governorate** «المحافظة», chosen from a dropdown. Shopify stores each governorate as a code. Unlike the UAE, Kuwait's codes already include the country prefix: | Governorate | Arabic | Shopify code | |---|---|---| | Al Ahmadi | الأحمدي | `KW-AH` | | Al Asimah (Capital) | العاصمة | `KW-KU` | | Al Farwaniyah | الفروانية | `KW-FA` | | Al Jahra | الجهراء | `KW-JA` | | Hawalli | حولي | `KW-HA` | | Mubarak Al-Kabeer | مبارك الكبير | `KW-MU` | > **Note:** Shopify says the Block field and other regional address fields don't appear if the > default checkout address labels were renamed (an old workaround), or if apps or customizations > read or edit address information. If your Kuwait checkout has no Block field, check those two > things first. ## How are addresses in Kuwait structured? The Public Authority for Civil Information (PACI) publishes Kuwait Finder, a free app for finding addresses in Kuwait. It searches by governorate, area, block, street and parcel or house. It also searches by **PACI number**, and it can share any location, including the shopper's current one, through apps such as WhatsApp. A practical way to fit that structure into Shopify's fields: | Part of the address | Where it goes in Shopify | |---|---| | Governorate | Governorate dropdown | | Area (for example Salmiya) | City | | Block | Block | | Street, house or building | Address | | Floor, flat | Apartment, suite, etc. | Shopify's own example Kuwait address puts "Kuwait City" in the city field. Some shoppers may do the same and type the city name instead of their area. When you confirm a COD order, ask for the area if it's missing. A PACI number or a shared location pin also helps the courier. ## What can Kuwaiti shoppers pay with instead of cash? - **KNET.** Shoppers pay with a local debit card issued by a Kuwaiti bank that is a KNET member. The payment usually redirects the shopper to a separate payment page to finish. - **Credit cards.** - **Apple Pay.** Apple lists Kuwait as a country that supports Apple Pay. Kuwait isn't on Shopify's list of countries where Shopify Payments is available, so you need a third-party payment provider. If you sell to Kuwait, choose one that supports KNET. A checkout that accepts only credit cards leaves out shoppers whose only card is a KNET debit card. ## How do you set COD rules by governorate or area? ### By governorate The governorate comes from a dropdown, so the value is always the same. But a governorate rule is wide: one governorate covers many areas. Use it when your courier treats a whole governorate differently, for example a higher charge for return trips. > **Note:** Kuwait's codes already start with `KW-`, unlike the UAE's (`DU` for Dubai). A tool > that adds the country code in front itself, as Khaleeji COD does, may not match a Kuwaiti > governorate. For Kuwait, use the city rule below, and test any governorate rule with a real > checkout before you rely on it. ### By area For smaller areas, use a city rule. The city is typed, so the same area arrives in different spellings. > **Example:** For Salmiya you might see "Salmiya", "Salmiyah", "Al Salmiya" and «السالمية». > These are examples. Export your orders and check the **Shipping City** column for the > spellings your own shoppers use. Khaleeji COD can hide COD for a list of cities, matched exactly in English or Arabic without caring about upper or lower case. Add every spelling you found. See [how to limit COD by emirate, region or city](/guides/limit-cod-by-emirate-or-city/) for more on spelling variants. ### Rules that don't depend on the address Cart total, first order, customer tag and product tag rules work the same in Kuwait as anywhere else. If your store's currency isn't KWD (for example, you sell from the UAE in AED), think about your cart limit in both currencies: you set it in your store's currency, and Kuwaiti shoppers may be paying in KWD. More on running several GCC countries from one store is in [different COD rules per GCC market](/guides/gcc-cod-rules-per-country/). After setting any rule, place a test order to a Kuwait address and check the payment step. See [how to test checkout payment rules with draft orders](/guides/test-payment-rules-draft-orders/). ## What should COD be called in Arabic? Shopify's address data lists Arabic as Kuwait's language, so plan for an Arabic checkout. In Arabic, cash on delivery is usually written «الدفع عند الاستلام» ("payment on receipt"). Use the same wording on product pages, in your FAQ and in order messages, so the shopper sees one name everywhere. For other wordings, see [what to call Cash on Delivery in Arabic](/guides/cash-on-delivery-in-arabic/). Sources: - Shopify worldwide: Kuwait address data (KW.yml): https://github.com/Shopify/worldwide/blob/main/data/regions/KW.yml - Shopify Help Center: Address collection preferences (regional address components): https://help.shopify.com/en/manual/checkout-settings/address-collection-preferences - Apple App Store: Kuwait Finder, published by the Public Authority for Civil Information: https://apps.apple.com/us/app/-/id593476960 - Checkout.com Docs: KNET: https://www.checkout.com/docs/payments/payment-methods/knet - Shopify Help Center: Shopify Payments supported countries: https://help.shopify.com/en/manual/payments/shopify-payments/supported-countries - Apple Support: Countries and regions that support Apple Pay: https://support.apple.com/en-us/102775 --- # Cash on delivery in Qatar: a guide for Shopify stores URL: https://khaleejicod.com/guides/cash-on-delivery-qatar/ Updated: 2026-10-26 Short answer: Shopify's checkout for Qatar asks for an address, a city and a phone number, with no region or postcode. So COD rules for Qatar have to use cart totals, customer and product tags, and city names. Make the phone number required and ask for zone, street and building numbers. Cash on delivery in Qatar works as it does elsewhere in the GCC: the courier hands over the parcel and collects the money. The difference for a Shopify store is the address. Shopify's checkout form for Qatar has no region and no postcode field, so you can't limit COD by region code. Build your Qatar rules from cart totals, customer tags, product tags and, with care, city names. And give shoppers an online way to pay that they trust. ## What does Shopify's checkout ask for in Qatar? Shopify publishes the address formats its checkout uses in its open-source Worldwide data. For Qatar, the form asks for: - first and last name, and a company name if you show that field - address line 1 and address line 2 - city - phone number There's no region (province) dropdown and no postcode. Shopify's own sample Qatar address is "Lussail City, P.O. Box 1968" with "Doha" as the city. Two things follow for COD: - **A region rule has nothing to match.** In the UAE, a rule can block COD for a whole emirate by its code. In Qatar the checkout never records a region. - **The city is free text.** Shoppers type whatever they like, in English or Arabic, with different spellings. ## How are addresses written in Qatar? Qatar Post says home deliveries use the Anwani addressing system. The blue plates on buildings show three numbers: **zone, street and building**. The Universal Postal Union's guide for Qatar adds that mail is delivered either to a P.O. box, or by phone plus zone and street numbers, and that "Doha" should be written as the locality on every mail item. What this means for a COD store: - **A P.O. box isn't a doorstep.** If a shopper gives only a P.O. box, the courier has to phone them to find out where to go. A wrong or switched-off number then means no delivery. - **Zone, street and building numbers are what a courier needs.** Ask for them. - **The city field may tell you little.** If many shoppers write "Doha" whatever their area, a city list won't separate one part of the country from another. ## How do you get better Qatar addresses at checkout? Shopify says address line 2 is meant for apartment or floor numbers, and that making it required can stop some customers from finishing their purchase. So don't force it for zone numbers. These steps help instead: 1. **Make the phone number required.** In your Shopify admin, go to **Settings > Checkout**. In the **Customer information** section, set **Shipping address phone number** to **Required**. Shopify suggests this when your carrier needs a phone number, which a COD courier does. 2. **Ask for zone, street and building numbers after the order.** Your order confirmation message (SMS, WhatsApp or email) can ask the shopper to reply with any numbers that are missing. Check them before the parcel leaves. ## Which online payments can shoppers in Qatar use instead of COD? Hiding COD for a risky order only works if the shopper has another way to pay. In Qatar, these are the options to check: - **International credit and debit cards**, through your payment provider. - **Local debit cards on NAPS**, Qatar's national card network. Qatar Central Bank's national card, **Himyan**, runs on NAPS. Qatar News Agency reported in March 2024 that Himyan holders can pay on local online shopping sites through the QPay payment portal. Whether your checkout accepts these cards depends on your payment provider, so ask it. - **Apple Pay**, which Apple lists as available in Qatar. - **Fawran**, Qatar Central Bank's instant payment service, launched in March 2024. People send money from their bank app using a mobile number or alias instead of an IBAN. It's a bank transfer, not a checkout button: to accept it, you'd add it as a custom manual payment method and check each payment yourself before shipping. Check which of these your store can actually take before you hide COD for any group of shoppers. ## Which COD rules fit Qatar? | Rule | Works for Qatar? | Why | |---|---|---| | Hide COD above a cart total | Yes | Doesn't depend on the address | | Hide COD on large first orders | Yes | Covers guests and new customers | | Hide COD for tagged customers | Yes | Needs the customer identified at checkout | | Turn off COD for tagged products | Yes | Good for custom or high-value items | | Limit COD by region code | No | Shopify's Qatar form has no region | | Limit COD by city name | With care | Free text, and spellings vary | A practical way to start: 1. **Turn on the rules that ignore the address**: cart total, large first order, tagged refusers and tagged products. Pick the amounts from your own order history. See [how to hide COD above a cart total](/guides/hide-cod-above-cart-total/). 2. **Export your past Qatar orders and look at the city values.** Note every spelling you actually receive, in English and Arabic. 3. **Add a city rule only if refusals clearly cluster in one place**, and include every spelling you found. See [how to limit COD by emirate, region or city](/guides/limit-cod-by-emirate-or-city/). Khaleeji COD can run all of these rules together. Its city rule matches exact names in English or Arabic and ignores capital letters, so list each spelling separately. ## Which currency do the amount rules use? Shopify's data lists the Qatari riyal (QAR) as Qatar's currency. Your shop's currency may be something else, such as AED. In Khaleeji COD, amounts are set in your shop's currency, and a cart in QAR is converted before the comparison. If you sell to several GCC countries, read [one Shopify store, six GCC countries](/guides/gcc-cod-rules-per-country/) before you choose your amounts. ## Should COD be in Arabic for Qatar shoppers? Shopify's data lists Arabic as Qatar's language. If you offer an Arabic checkout, show the COD option in Arabic too, with the same wording you use on product pages and in messages. See [what to call Cash on Delivery in Arabic](/guides/cash-on-delivery-in-arabic/). Sources: - Shopify Worldwide: Qatar address data (QA.yml): https://github.com/Shopify/worldwide/blob/main/data/regions/QA.yml - Qatar Post: Postal standards: https://www.qatarpost.qa/Home/PostalStandards - Universal Postal Union: Qatar addressing guide: https://www.upu.int/UPU/media/upu/PostalEntitiesFiles/addressingUnit/qatEn.pdf - Qatar News Agency: Qatar Central Bank launches Himyan debit card: https://www.qna.org.qa/en/News-Area/News/2024-03/30/0019-qatar-central-bank-launches-%27himyan%27-debit-card - Qatar News Agency: QCB launches Fawran instant payment service: https://www.qna.org.qa/en/News-Area/News/2024-03/07/0036-qcb-launches-%27fawran%27-instant-payment-service - Apple Support: Countries and regions that support Apple Pay: https://support.apple.com/en-us/102775 - Shopify Help Center: Editing the checkout form options: https://help.shopify.com/en/manual/checkout-settings/checkout-form-options --- # Cash on delivery in Bahrain: a guide for Shopify stores URL: https://khaleejicod.com/guides/cash-on-delivery-bahrain/ Updated: 2026-10-26 Short answer: Shopify's checkout for Bahrain asks for address lines, a city, an optional postcode and a phone number, but no governorate. So COD rules for Bahrain use cart totals, customer and product tags, and city names. Check whether your payment provider supports BenefitPay before you hide COD. Cash on delivery in Bahrain works as it does across the GCC: the courier delivers and collects the payment. For a Shopify store, the point to know is that Shopify's checkout for Bahrain doesn't ask for a governorate. COD rules for Bahrain therefore rely on cart totals, customer tags, product tags and city names. Before you hide COD for anyone, make sure your checkout offers an online option Bahraini shoppers use, such as BenefitPay or a local card. ## What does Shopify's checkout ask for in Bahrain? Shopify's open-source Worldwide data sets out the address form its checkout uses. For Bahrain the form has: - first and last name, and a company name if you show that field - address line 1 and address line 2 - city, plus an **optional** postcode - phone number There's no governorate (region) field. The postcode field accepts a 3 or 4 digit number. Shopify's sample Bahrain address puts "Road 2904 Building 293" in address line 1, "Manama" as the city and 329 as the postcode. Bahrain has four governorates: Capital, Muharraq, Northern and Southern, as listed in the Ministry of Health's 2020 census tables. Because Shopify's checkout doesn't record them, a COD rule can't target a governorate directly. ## How are addresses written in Bahrain? The Universal Postal Union's guide for Bahrain gives this order: 1. house, building or shop number 2. street or road name or number 3. town or village, followed by the postcode Its example is "House 916, Road 2035, Riffa 926". The UPU says Bahraini postcodes are 3 or 4 digits, running from 1XX to 12XX, and that in a 4 digit postcode the first two digits identify the region. For a COD store, a few habits help: - **Ask for building, road and block numbers**, and check them before you ship. If one is missing from the order, ask for it in your confirmation message. - **Make the phone number required.** In **Settings > Checkout**, in the **Customer information** section, set **Shipping address phone number** to **Required**. A courier who can't call the shopper can't arrange the handover or collect the cash. - **Don't treat the postcode as reliable.** It's optional in Shopify's form, so some orders won't have one. Base rules on fields every order has. ## Which online payments can shoppers in Bahrain use? These are the options to check with your payment provider: - **BenefitPay**, Bahrain's national e-wallet, run by The BENEFIT Company. BENEFIT says merchants can accept it in their own website or app, and that merchants sign up through an acquiring bank. Whether you can show it at Shopify checkout depends on your payment provider, so ask. - **Credit and debit cards**, including Bahraini debit cards if your provider accepts them online. - **Apple Pay**, which Apple lists as available in Bahrain. - **Fawri+ bank transfers.** The Central Bank of Bahrain lists Fawri+ among the kingdom's near real-time transfer services. It's a bank transfer, not a checkout button: to accept it, you'd add a custom manual payment method and confirm each payment before shipping. Hiding COD only helps if the shopper can still pay. Confirm which of these your store can take first. ## Which COD rules fit Bahrain? | Rule | Works for Bahrain? | Why | |---|---|---| | Hide COD above a cart total | Yes | Doesn't depend on the address | | Hide COD on large first orders | Yes | Covers guests and new customers | | Hide COD for tagged customers | Yes | Needs the customer identified at checkout | | Turn off COD for tagged products | Yes | Good for custom or high-value items | | Limit COD by governorate | No | Shopify's Bahrain form has no region field | | Limit COD by city name | Yes, with care | Free text, typed in English or Arabic | A sensible way to start: 1. **Turn on the rules that ignore the address**: cart total, large first order, tagged repeat refusers and tagged products. Choose the amounts from your own orders. See [how to hide COD on large first orders](/guides/hide-cod-first-orders/). 2. **Look at the city values on your past Bahrain orders.** Note every spelling you receive, in English and Arabic. 3. **Add a city rule only where refusals or failed deliveries clearly cluster**, with every spelling you found. See [how to limit COD by emirate, region or city](/guides/limit-cod-by-emirate-or-city/). Khaleeji COD can run these rules together. Its city rule matches exact names in English or Arabic and ignores capital letters, so add each spelling as its own entry. > **Example:** a store finds most of its refused Bahrain orders came from first-time guests with > large carts, spread across many towns. A city rule wouldn't help here. A first-order limit > would. Replace this pattern with what your own order history shows. ## Which currency do the amount rules use? Shopify's data lists the Bahraini dinar (BHD) as Bahrain's currency. In Khaleeji COD, amounts are set in your shop's currency, so if your shop runs in AED or SAR, a cart in BHD is converted before it's compared. If you sell to several GCC countries, see [one Shopify store, six GCC countries](/guides/gcc-cod-rules-per-country/) for how to choose one set of amounts for all of them. ## What should COD be called in Arabic? Shopify's data lists both Arabic and English as languages for Bahrain. If your store offers both, give COD one clear Arabic name, such as «الدفع عند الاستلام» ("payment on receipt"), and use it everywhere: checkout, product pages and order messages. See [what to call Cash on Delivery in Arabic](/guides/cash-on-delivery-in-arabic/) for the choices and how to show the Arabic name only on your Arabic checkout. Sources: - Shopify Worldwide: Bahrain address data (BH.yml): https://github.com/Shopify/worldwide/blob/main/data/regions/BH.yml - Universal Postal Union: Bahrain addressing guide: https://www.upu.int/UPU/media/upu/PostalEntitiesFiles/addressingUnit/bhrEn.pdf - Bahrain Ministry of Health: Census and demographic statistics 2020: https://www.moh.gov.bh/Content/Files/Publications/statistics/HS2020/PDF/CH-02-census_2020.pdf - BENEFIT: BenefitPay for business: https://benefit.bh/business/benefitpay-business/ - Central Bank of Bahrain: Payment and settlement systems: https://www.cbb.gov.bh/payment-settlement/ - Apple Support: Countries and regions that support Apple Pay: https://support.apple.com/en-us/102775 - Shopify Help Center: Editing the checkout form options: https://help.shopify.com/en/manual/checkout-settings/checkout-form-options --- # Cash on delivery in Oman: a guide for Shopify stores URL: https://khaleejicod.com/guides/cash-on-delivery-oman/ Updated: 2026-10-26 Short answer: Shopify's checkout for Oman asks for address lines, an optional postcode, a city and a phone number, but no governorate. So COD rules for Oman use cart totals, customer and product tags, and city or wilayat names. Ask for a building or landmark when a shopper gives only a P.O. box. Cash on delivery in Oman works as it does across the GCC: the courier delivers and collects the payment. For a Shopify store, two things shape your COD rules. Shopify's checkout for Oman doesn't ask for a governorate, so you can't limit COD by region code. And Omani postal addresses are often written around a P.O. box, which isn't a place where a courier can hand over a parcel. Build your Oman rules from cart totals, customer and product tags and city names, and make sure every order has a working phone number. ## What does Shopify's checkout ask for in Oman? Shopify's open-source Worldwide data sets out the address form its checkout uses. For Oman the form has: - first and last name, and a company name if you show that field - address line 1 and address line 2 - an **optional** postcode, then the city - phone number There's no governorate (region) field. Shopify's own sample Omani address shows how a P.O. box and a building can both appear: "P.O. Box 1161" in address line 1, "Al Markazi, Building Number 44, CBD" in address line 2, postcode 112 and "Ruwi" as the city. ## How are addresses written in Oman? Oman has 11 governorates, and each governorate includes several wilayats (provinces), according to Oman's Ministry of Foreign Affairs. Shopify's checkout records neither. The city field holds whatever the shopper types, such as a town or wilayat name, in English or Arabic. The Universal Postal Union's guide for Oman shows postal addresses built around a P.O. box, a 3 digit postcode and the district, for example "P.O. Box 15, 133, Al-Khoer". That works for mail. A COD courier needs a building and a person to hand the parcel to. What this means for a COD store: - **Treat a P.O. box alone as an incomplete address.** Ask for a building, street or landmark, and keep the P.O. box if the shopper gives it. - **Make the phone number required.** In your Shopify admin, go to **Settings > Checkout**. In the **Customer information** section, set **Shipping address phone number** to **Required**. Shopify suggests this when your carrier needs a phone number. A COD courier may need to call to find the shopper. - **Don't build rules on the postcode.** It's optional in Shopify's form, so some orders won't have one. ## Which online payments can shoppers in Oman use? These are the options to check with your payment provider: - **Local debit cards.** The Central Bank of Oman set up a national payment gateway in 2016 for online payments with debit cards issued in Oman. It runs through OmanNet, the national card switch. Ask your payment provider whether your Shopify checkout accepts these cards. - **Maal, the national payment card.** The Central Bank of Oman describes Maal as a local bank card issued by licensed banks and payment providers, usable at Omani online stores and in local apps. The central bank says the cards and where they're accepted will be announced in phases, and that your bank or payment provider updates its systems to accept them. Ask your provider about Maal too. - **International credit and debit cards**, through your payment provider. - **Apple Pay**, which Apple lists as available in Oman. Hiding COD only helps if the shopper can still pay. Check what your store can actually take before you switch on any rule. ## Which COD rules fit Oman? | Rule | Works for Oman? | Why | |---|---|---| | Hide COD above a cart total | Yes | Doesn't depend on the address | | Hide COD on large first orders | Yes | Covers guests and new customers | | Hide COD for tagged customers | Yes | Needs the customer identified at checkout | | Turn off COD for tagged products | Yes | Good for custom or high-value items | | Limit COD by governorate | No | Shopify's Oman form has no region field | | Limit COD by city or wilayat | Yes, with care | Free text, typed in English or Arabic | A sensible way to start: 1. **Turn on the rules that ignore the address**: cart total, large first order, tagged repeat refusers and tagged products. Choose the amounts from your own order history. See [how to hide COD above a cart total](/guides/hide-cod-above-cart-total/). 2. **Use a city rule for places your courier finds hard or costly to reach.** For example, the Ministry of Foreign Affairs notes that Musandam is separated from the rest of Oman by a strip of UAE land. If deliveries there cost you more or fail more often, list the town names your shoppers type for it, in English and Arabic. 3. **Check spellings in your real orders first.** Export your Oman orders, look at the city values and add every variant you find. See [how to limit COD by emirate, region or city](/guides/limit-cod-by-emirate-or-city/). Khaleeji COD runs these rules together. Its city rule matches exact names in English or Arabic and ignores capital letters, so each spelling needs its own entry. > **Example:** a store's refused Oman orders are mostly P.O. box addresses with no building given. > Rather than blocking towns, it keeps COD but sends a confirmation message asking for a landmark > and a building before shipping. Replace this pattern with what your own orders show. ## Which currency do the amount rules use? Shopify's data lists the Omani rial (OMR) as Oman's currency. In Khaleeji COD, amounts are set in your shop's currency, so if your shop runs in AED, a cart in OMR is converted before it's compared. If you sell to several GCC countries, read [one Shopify store, six GCC countries](/guides/gcc-cod-rules-per-country/) before you set the amounts. ## What about the Arabic name for COD? Shopify's data lists Arabic as Oman's language. If you offer an Arabic checkout, show COD in Arabic with the same wording you use in your messages and policy page. See [what to call Cash on Delivery in Arabic](/guides/cash-on-delivery-in-arabic/). Sources: - Shopify Worldwide: Oman address data (OM.yml): https://github.com/Shopify/worldwide/blob/main/data/regions/OM.yml - Universal Postal Union: Oman addressing guide: https://www.upu.int/UPU/media/upu/PostalEntitiesFiles/addressingUnit/omnEn.pdf - Oman Ministry of Foreign Affairs: Oman by region: https://www.fm.gov.om/en/about-oman/state/oman-by-region/ - Central Bank of Oman: Payment system reforms: https://cbo.gov.om/Pages/PaymentSystemReforms.aspx - Central Bank of Oman: National Payment Card (Maal): https://cbo.gov.om/Pages/NationalPaymentCard.aspx - Apple Support: Countries and regions that support Apple Pay: https://support.apple.com/en-us/102775 - Shopify Help Center: Editing the checkout form options: https://help.shopify.com/en/manual/checkout-settings/checkout-form-options --- # One Shopify store, six GCC countries: different COD rules per market URL: https://khaleejicod.com/guides/gcc-cod-rules-per-country/ Updated: 2026-10-26 Short answer: One Shopify store can sell to all six GCC countries with Shopify Markets. Two things shape COD rules: amount limits are compared in your shop's currency, and only the UAE and Kuwait have a region field at checkout. Outside the UAE, target a place by city or area name. You can sell to the UAE, Saudi Arabia, Kuwait, Qatar, Bahrain and Oman from one Shopify store by setting them up as markets. Your COD rules then have to deal with two differences between the countries. First, currencies: a limit such as "hide COD above a cart total" is set once, in your shop's currency, so it has to make sense in every market. Second, addresses: only the UAE and Kuwait have a region field at checkout. Everywhere except the UAE, target a place by the city or area name the shopper types. ## How does one store sell to six GCC countries? Shopify Markets lets you create markets that target specific countries or regions, and group several countries together. For each market you decide how prices are shown: - **Converted prices.** By default, Shopify converts prices using the current market exchange rate. You can set exchange rates manually instead, and round prices per market. - **Local currencies need the right payment provider.** Shopify says selling in local currencies is only supported with Shopify Payments or Adyen. Orders placed through other third-party payment providers are processed in your store's default currency. - **COD can follow the market's currency.** Since July 2025, Shopify shows and records manual payment methods, including cash on delivery, in the currency configured in Markets rather than only in your shop's currency. So depending on your setup, a shopper in Kuwait may place a COD order in Kuwaiti dinars or in your shop's currency. Your COD rules need to give the same answer either way. ## Which currency do COD amount rules use? A payment customization Function, the Shopify feature apps use to hide or rename payment methods, receives the cart in the shopper's currency together with the exchange rate between that currency and your shop's currency. An app can use that rate to compare every cart against one limit. Khaleeji COD works this way: amounts are set in your shop's currency, and carts in other currencies are converted before the comparison. > **Example:** your shop's currency is AED and you hide COD above 1,500. A shopper in Qatar sees > prices in QAR. At checkout, their cart total is converted to AED with Shopify's rate and then > compared with 1,500 AED. The same happens for a cart in SAR or KWD. These figures are examples; > use limits from your own order data. What this means in practice: - **One limit covers all six countries.** You can't set 1,500 for the UAE and a different amount for Kuwait with an amount rule. Choose a limit that makes sense across your markets. - **Type the amount in your shop's currency.** 1,500 is a very different sum in a shop that runs in Kuwaiti dinars than in one that runs in dirhams. Convert the limit you have in mind before you enter it. - **Expect small movement.** With Shopify's automatic rates, the local-currency value of your limit can shift a little as exchange rates change. ## What does Shopify's checkout ask for in each country? Shopify publishes the address form for every country in its open-source Worldwide data. Every GCC country's form has address lines, a city and a phone number. The rest differs: | Country | Currency | Region field at checkout | Postcode field | |---|---|---|---| | UAE | AED | Yes: 7 emirates | None | | Saudi Arabia | SAR | No | Optional | | Kuwait | KWD | Yes: 6 governorates | Optional | | Qatar | QAR | No | None | | Bahrain | BHD | No | Optional | | Oman | OMR | No | Optional | The region field is the one that matters for COD rules. Where it exists, every order records it in the same spelling, because the shopper picks it from a list. Where it doesn't, you only have the free-text city field. ## Should you use region codes or city names? ### UAE: emirate codes The UAE is the straightforward case. Each emirate has a fixed code, written as country plus region: - AE-AZ Abu Dhabi - AE-AJ Ajman - AE-DU Dubai - AE-FU Fujairah - AE-RK Ras al-Khaimah - AE-SH Sharjah - AE-UQ Umm al-Quwain Use a code to treat a whole emirate differently. Use a city name when you only want part of an emirate, for example "Al Ain" and «العين». ### Kuwait: governorates Shopify's data lists six Kuwaiti governorates: Al Ahmadi, Al Asimah, Al Farwaniyah, Al Jahra, Hawalli and Mubarak Al-Kabeer. Shoppers pick one at checkout. But Shopify's codes for them already include the country (for example KW-KU for Al Asimah), a different format from the UAE's AE-AZ. A tool that builds codes the UAE way may not match a Kuwaiti governorate. For Kuwait, use area names in the city field instead, and test any governorate rule with a real checkout before you rely on it. ### Saudi Arabia, Qatar, Bahrain and Oman: city names These four forms have no region field, so city names are the only way to target a place. The same applies to Kuwaiti areas. Keep in mind: - **Spellings vary.** Shoppers type the city in English or Arabic, with and without "Al". Shopify's own sample Saudi address writes the city as «الرياض», so expect Arabic names alongside English ones. - **Collect spellings from real orders.** Export each country's orders and list the city values you actually receive before you write a rule. - **A city name isn't tied to a country.** A city rule matches the name typed, whichever country the address is in. If you ship to several countries, check that a name you block isn't also used somewhere you want to keep COD. For the details of both rule types, see [how to limit COD by emirate, region or city](/guides/limit-cod-by-emirate-or-city/). ## What's a sensible starting setup for each country? > **Example:** this is a starting point to adjust with your own refusal data, not a > recommendation based on anyone's statistics. | Country | Start with | |---|---| | All six | Tagged repeat refusers, tagged no-COD products, one cart-total limit and one first-order limit in your shop's currency | | UAE | Add emirate codes or city names only where your refusals or delivery costs are higher | | Saudi Arabia | Add city names, in English and Arabic, only where refusals cluster | | Kuwait | Add area names, in English and Arabic, only where refusals cluster | | Qatar | Amount and tag rules first; check whether your orders' city values really separate areas before adding a city list | | Bahrain | Amount and tag rules first; city names only if refusals cluster | | Oman | Amount and tag rules; city names for places your courier finds costly to reach | Start small. Every rule you add hides COD for more shoppers, so add region and city rules only when your own orders show a pattern. Khaleeji COD hides COD when any switched-on rule matches, so one rule that is too broad affects every country it touches. ## How do you test the rules for each country? 1. Create a draft order for a test customer with a shipping address in the country you want to test, and open the checkout link. See [how to test checkout payment rules with draft orders](/guides/test-payment-rules-draft-orders/). 2. At the payment step, check whether COD shows or hides as you expect. 3. If you sell in local currencies, test a cart just under and just over your limit in that currency. 4. Repeat for each country where you set a region or city rule. > **Note:** Payment customizations run on the online checkout only. They don't run when you collect > payment for a draft order inside the Shopify admin, so always test through the checkout link. For what changes in each market, read the country guides: [UAE](/guides/cash-on-delivery-uae/), [Saudi Arabia](/guides/cash-on-delivery-saudi-arabia/), [Kuwait](/guides/cash-on-delivery-kuwait/), [Qatar](/guides/cash-on-delivery-qatar/), [Bahrain](/guides/cash-on-delivery-bahrain/) and [Oman](/guides/cash-on-delivery-oman/). Sources: - Shopify Help Center: Shopify Markets: https://help.shopify.com/en/manual/international - Shopify Help Center: Selling in local currencies: https://help.shopify.com/en/manual/international/pricing/currencies - Shopify Help Center: Guidelines and restrictions for selling in local currencies: https://help.shopify.com/en/manual/markets/pricing/limitations - Shopify Changelog: Manual payment methods now support multi-currency checkouts: https://changelog.shopify.com/posts/manual-payment-methods-now-support-multi-currency-presentment - Shopify.dev: Payment customization Function API: https://shopify.dev/docs/api/functions/latest/payment-customization - Shopify Worldwide: address data per country: https://github.com/Shopify/worldwide/tree/main/data/regions --- # Why COD orders get refused at the door URL: https://khaleejicod.com/guides/why-cod-orders-get-refused/ Updated: 2026-10-26 Short answer: Common reasons for COD refusals are impulse orders, a change of mind, buying elsewhere, a total higher than expected, a phone the courier can't reach, a wrong address, slow delivery and fake orders. Each needs a different fix, so find out which ones hit your store first. A COD order gets refused when the shopper no longer wants it, can't pay for it, or was never going to accept it. The usual causes are impulse orders, a change of mind, buying the same item elsewhere, a total that is higher than the shopper expected, a phone number the courier can't reach, a wrong address, slow delivery, and fake orders. Each cause points to a different fix. This guide gives no percentages for these causes. We haven't found an independent, public breakdown for GCC stores, and the mix differs from store to store. Your own courier reports will show which causes matter for you. ## Why is it so easy to refuse a COD order? With cash on delivery, the shopper pays nothing when they place the order. Shopify marks an order paid with a manual payment method, such as COD, as **Pending** until you mark it as paid. So if the shopper changes their mind, refusing at the door costs them nothing. The costs of the trip, the return and the stock sitting on the road fall on you. That is why a refusal can be a symptom of something earlier: the order was placed too easily, the wait was too long, or the shopper got a surprise at the door. ## The common reasons, and what each one tells you ### 1. Impulse orders The shopper tapped "Buy" late at night after seeing an ad, then cooled off before the courier arrived. COD makes this easy because there is no card to enter. **What to fix:** send a confirmation message soon after the order, so the shopper has to say yes a second time. Dispatch fast, before the interest fades. For large first orders, consider asking for online payment instead of COD. ### 2. Changed their mind The shopper no longer needs the item, a family member said no, or the occasion has passed. This grows with every day the parcel takes to arrive. **What to fix:** shorter delivery times and tracking messages that keep the order in the shopper's mind ("Your order is out for delivery today"). ### 3. Bought it elsewhere The shopper ordered the same item from two shops and accepts whichever arrives first, or found it in a mall in the meantime. With COD there is no money to get back, so ordering twice has no cost for them. **What to fix:** speed again, plus a clear reason to buy from you (price, bundle, warranty, gift wrap). If the same shopper refuses more than once, treat it as a pattern. ### 4. The total was higher than expected The shopper saw one price on the product page and heard a higher one from the courier. This can happen when a shipping fee is added at checkout, when there is a COD fee the shopper didn't notice, or when a cross-border order carries customs duties. One UAE courier's cross-border terms, for example, say that duties, taxes and clearance charges are not included in the shipping price. Sometimes the shopper simply doesn't have enough cash at home. **What to fix:** show the full total, including shipping and any COD fee, before checkout and in the confirmation message. For cross-border orders, say clearly who pays duties. Accept card on delivery if your courier offers it. ### 5. The courier couldn't reach the phone The number has a missing digit, the shopper doesn't answer unknown numbers, or the phone is off. Couriers try a limited number of times. One UAE courier's published fee schedule includes three delivery attempts on next-day delivery and returns the order to the merchant after three failed attempts, or after two if the customer doesn't confirm a third. Strictly, this is a failed delivery, not a refusal. It ends the same way, though: the parcel comes back to you. **What to fix:** check the phone format at checkout, confirm the order by WhatsApp or SMS, and tell shoppers the courier may call from a number they don't know. ### 6. The address was wrong or incomplete In the UAE, Shopify's checkout doesn't ask for a postcode: Shopify's address format for the country has no postcode field. The courier relies on the building name, street, area and phone number. If any of these is vague, the courier may give up or the shopper may lose patience with repeated calls. **What to fix:** ask for a building name or villa number, the area, and a landmark, and give shoppers a delivery notes field. See [better UAE addresses: landmarks, Makani numbers and delivery notes](/guides/uae-addresses-makani/). ### 7. Delivery took too long Every extra day gives the shopper more time for reasons 2 and 3. A late parcel can also arrive when the shopper is travelling or at work. **What to fix:** dispatch the same or next day, promise a realistic delivery date, and send a message on the day of delivery so the shopper can be at home. ### 8. Fake, prank or test orders Someone entered another person's name and number, a bored visitor placed an order for fun, or a competitor or bot filled your checkout. Nobody was ever going to accept the parcel. **What to fix:** a confirmation step can catch these before you ship, because the real owner of the phone number will tell you they didn't order anything. Fake orders need a different fix from refusals, so it helps to tell them apart. See [fake, refused, failed: three COD problems that need different fixes](/guides/fake-refused-failed-cod-orders/). ## Quick reference: reason and first fix | Reason | First fix to try | |---|---| | Impulse order | Confirmation message, fast dispatch | | Changed mind | Faster delivery, tracking messages | | Bought elsewhere | Faster delivery, a reason to buy from you | | Total higher than expected | Show the full total early, accept card on delivery | | Unreachable phone | Phone format check, WhatsApp or SMS confirmation | | Wrong address | Better address fields and delivery notes | | Slow delivery | Same or next day dispatch, delivery-day message | | Fake order | Confirmation before shipping | For the full checklist, see [ways to cut COD refusals before the order is placed](/guides/reduce-cod-refusals/). ## How do you find out which reasons hit your store? You need a reason for every returned parcel. Three simple habits get you there: 1. **Read the courier's return reason.** Check the status your courier gives each returned parcel, such as "refused", "no answer" or "address not found". Ask for a report if you don't get one. 2. **Tag each returned order in Shopify** with the reason, for example `rto-refused`, `rto-no-answer` or `rto-address`. After a month you can filter your orders by tag and count. 3. **Ask a few refusers why.** A short, polite message ("We saw your order came back. Was anything wrong?") can get you an honest answer, and sometimes a second chance at the sale. Once you know your main causes, fix the cheapest ones first. Address fields and a confirmation message cost little. If repeat refusers or large first orders cause most of your returns, limiting COD for those orders is the next step. Khaleeji COD does this with checkout rules, for example hiding COD for customers tagged `cod-refused` or for first orders above an amount you choose. To see what each refusal costs you, read [what one refused COD order really costs](/guides/cost-of-a-refused-cod-order/). Sources: - Shopify Help Center: Manual payment methods: https://help.shopify.com/en/manual/payments/manual-payments - Shopify worldwide: United Arab Emirates address data (AE.yml): https://github.com/Shopify/worldwide/blob/main/data/regions/AE.yml - Quiqup: Services and Fees Schedule (self-service, UAE courier): https://www.quiqup.com/terms-of-service/quiqup-services-and-fees-schedule---self-service-26-07-15 - Quiqup: Cross Border Services and Fees: https://www.quiqup.com/terms-of-service/current-quiqup-cross-border-services-fees-addendum-24-11-01-v2 --- # What one refused COD order really costs URL: https://khaleejicod.com/guides/cost-of-a-refused-cod-order/ Updated: 2026-10-26 Short answer: A refused COD order costs you shipping out and back, plus any COD or handling fee, packaging, the ad spend that won the order, damaged or unsellable stock, and staff time. Add these up with your own numbers. Shipping alone understates the cost. A refused COD order costs you more than the delivery fee. Add up seven things: shipping out, shipping back, any COD or handling fee, packaging, the ad spend that won the order, stock you can't sell again, and staff time. Work it out once with your own numbers. The result tells you how much each refusal hurts and how far it makes sense to limit COD. ## The fill-in formula **Cost of one refused COD order =** shipping out + shipping back + COD or handling fee + packaging + ad cost per order + stock loss + staff time | Cost | What to put in | Where to find it | |---|---|---| | Shipping out | What the courier charges for the delivery attempt | Courier invoice or rate card | | Shipping back | Any return (RTO) fee on top of that | Courier invoice or contract | | COD or handling fee | Any fee charged on a COD parcel that wasn't paid | Courier contract | | Packaging | Box, mailer, filler, insert, label | Your supplier prices | | Ad cost per order | Ad spend ÷ orders, same period | Ads manager and Shopify orders | | Stock loss | Value of returned items you can't resell, spread over all returns | Your returns log | | Staff time | Minutes spent on the order × hourly cost | Your own estimate | Use averages for a typical order. You can refine them later. ## What goes into each part ### Shipping out Your courier may charge for the trip even when nobody pays at the door. One UAE courier's published fee schedule, for example, says orders returned to origin (RTO) are charged the full delivery fee. Check your own contract, and use the rate for the emirates you ship to most. ### Shipping back Contracts differ here. Check whether yours charges a separate fee for the return leg or includes it in the delivery fee. If it charges nothing extra, put 0. For cross-border parcels, look for extra charges: one UAE courier's cross-border terms say VAT and import duties are charged when a returned parcel comes back into the UAE. ### COD or handling fee Your courier may charge for collecting cash. One UAE courier's schedule charges a percentage of the value it collects. On a refused parcel no cash is collected, so check whether your courier still charges a COD or handling fee on refused parcels. Put 0 if it doesn't. ### Packaging Everything that leaves with the parcel: box or mailer, filler, printed insert, label. Some of it may come back usable. Count only what you have to replace. ### Ad cost per order If you sell through paid ads, divide last month's ad spend by last month's orders. A delivered order pays that cost back. A refused order doesn't, because it brings no revenue. So the ad spend behind it is lost. > **Note:** If you already count ad cost when you work out profit per delivered order, keep it > in both numbers. Just don't add it twice to the same order. ### Stock loss When a parcel comes back, the item has been off sale for days, and sometimes it can't be sold again: the box is crushed, the seal is broken, a cosmetic is near its expiry date, or a seasonal item came back after the season. Work out an allowance: **stock loss per refused order = share of returned items you can't resell × average item cost** If a sold-out item was sitting in a returning parcel while other shoppers wanted it, that is a missed sale too. It is hard to price, so leave it out of the formula but keep it in mind. ### Staff time Count the minutes your team spends on an order that never pays: packing, a confirmation call, chasing the courier, receiving and checking the return, putting it back on the shelf, and cancelling the order in Shopify. Multiply by the hourly cost of the person doing it. ## A worked example in AED > **Example:** These figures are made up for illustration. Replace every one with your own. > > - Shipping out: AED 18 > - Shipping back: AED 12 > - COD fee on a refused parcel: AED 0 (this courier only charges on cash collected) > - Packaging: AED 3 > - Ad cost per order: AED 40 > - Stock loss: 1 in 10 returned items can't be resold, average item cost AED 60, so AED 6 > - Staff time: 20 minutes at AED 30 an hour, so AED 10 > > **Total: 18 + 12 + 0 + 3 + 40 + 6 + 10 = AED 89 per refused order.** > > With 25 refused COD orders in a month, that is 25 × AED 89 = **AED 2,225**. Shipping alone > would show 25 × AED 30 = AED 750, about a third of the full cost. ## When does COD stop paying? Compare the cost of a refused order with the profit on a delivered one. Use your profit after product cost, shipping and ad cost. **Break-even refusal rate = profit per delivered order ÷ (profit per delivered order + cost per refused order)** > **Example:** With the figures above and a profit of AED 50 per delivered order: > 50 ÷ (50 + 89) = 0.36, so about 36%. If more than about 36 out of every 100 COD parcels you > ship come back, your COD orders lose money overall. Below that, they make money, but every > refusal still eats the profit of almost two delivered orders (AED 89 lost ÷ AED 50 profit). Measure the refusal rate per parcel shipped, not per order placed. See [RTO (return to origin) explained for GCC stores](/guides/rto-explained/) for how to work out your own rate. ## How to read the money-lost report in Khaleeji COD The money-lost report is an estimate. It takes the COD orders placed in the last 60 days that are now cancelled, keeps the ones that had shipped (Shopify recorded a fulfillment for them), and multiplies their number by shipping out + shipping back, using the per-order costs you type in. It shows a sentence such as "USD 150 lost on 3 refused COD orders that had shipped (last 60 days)." Cancelled COD orders that never shipped are shown as a separate count, because they cost you no shipping. Read it with two limits in mind: - **It uses only shipping.** It leaves out COD or handling fees, packaging, ad spend, stock loss and staff time, which differ a lot between stores and between orders. For each parcel that really was refused, the full cost is higher. In the example above, the report would count AED 30 for each refused order, against a full cost of AED 89. - **It depends on your order records.** An order counts as shipped only if it was marked as fulfilled in Shopify, and a shipped order that was cancelled can also be a failed delivery rather than a refusal. So its order count may not match the number of parcels that came back. Check the count against your courier's returns for the same period. One habit keeps the report closer to the truth: mark COD orders as fulfilled when they ship, and cancel refused COD orders in Shopify when the parcel comes back. A refused order you never cancel stays **Pending**, the status Shopify gives unpaid manual-payment orders, and the report doesn't see it. When you decide how far to limit COD, use the full formula above. ## What to do with your number Once you know the full cost of a refusal, you can judge the fixes. For example, if a confirmation call costs AED 3 of staff time and a refusal costs AED 89, the calls pay for themselves if they stop one refusal in about every 30 calls (89 ÷ 3). Limiting COD only on the orders most likely to come back, such as big carts or customers who have refused before, cuts refusals while keeping COD open for everyone else. See [how to hide COD above a cart total](/guides/hide-cod-above-cart-total/) and [how to spot repeat refusers in your Shopify orders](/guides/spot-repeat-cod-refusers/). Sources: - Quiqup: Services and Fees Schedule (self-service, UAE courier): https://www.quiqup.com/terms-of-service/quiqup-services-and-fees-schedule---self-service-26-07-15 - Quiqup: Cross Border Services and Fees: https://www.quiqup.com/terms-of-service/current-quiqup-cross-border-services-fees-addendum-24-11-01-v2 - Shopify Help Center: Manual payment methods: https://help.shopify.com/en/manual/payments/manual-payments --- # Fake, refused, failed: three COD problems that need different fixes URL: https://khaleejicod.com/guides/fake-refused-failed-cod-orders/ Updated: 2026-10-26 Short answer: A fake order was never meant to be accepted, a refused order reached the shopper who said no, and a failed delivery never reached the shopper at all. They look the same in your returns pile but need different fixes: confirmation, limits on COD, or better addresses and phone numbers. Every COD parcel that comes back looks the same on your shelf, but it came back for one of three reasons. A **fake order** was never meant to be accepted. A **refused order** reached the right person, who said no. A **failed delivery** never reached the shopper, who may still want it. Each one needs a different fix, and the wrong fix can cost you real customers. ## What is the difference? | | Fake order | Refused order | Failed delivery | |---|---|---|---| | What happened | Nobody meant to accept it | The shopper said no | The courier couldn't complete the delivery | | Did the courier reach the buyer? | Reached a number, but not a buyer | Yes | No | | Does the buyer still want it? | There is no buyer | No | Possibly | | Main fix | Confirm before shipping | Confirm, then limit COD for risky orders | Better address and phone details | ### Fake orders Someone placed the order with no plan to receive it. The name and number may belong to another person, or be made up. It may be a prank, a competitor, a bot filling your checkout, or a shopper "testing" whether COD works. Signs to look for: - The person who answers the phone says they never ordered anything. - The number doesn't work at all, or has too few digits. - Names like "test" or random letters, or an address that doesn't exist. - Several orders in a short time with the same phone number under different names, or the same name with different numbers. ### Refused orders The courier reached the shopper, at the door or on the phone, and the shopper said no. They changed their mind, bought the item elsewhere, didn't have the cash, or the total was higher than they expected. For the full list, see [why COD orders get refused at the door](/guides/why-cod-orders-get-refused/). Signs to look for: - The courier's status says something like "refused" or "customer cancelled". - The shopper answered the phone and said they don't want the parcel. - The same customer has refused before. ### Failed deliveries The courier couldn't complete the delivery: nobody answered the phone, the address couldn't be found, the shopper wasn't home, or the area is outside the courier's zone. Couriers try a limited number of times before they send the parcel back. One UAE courier's published fee schedule, for example, includes three attempts on next-day delivery and returns the order to the merchant after three failed attempts, or after two if the customer doesn't confirm a third. Signs to look for: - The courier's status says "no answer", "address not found" or "rescheduled". - The shopper contacts you later asking where the order is. - The address is vague: no building name, no area, or no landmark. ## How do you tell them apart in your order history? Your order list doesn't show why a parcel came back unless you record it. Do it when the parcel returns, while the courier's reason is still in front of you. 1. **Get the courier's reason** for each returned parcel from its portal or report. 2. **Cancel the order in Shopify** if it's a COD order that won't be paid. Open the order, then select **More actions > Cancel order**. Pick the closest option in **Reason for cancellation**, and use the **Staff note** field for the detail, for example "Refused at door, courier ref 12345". 3. **Add an order tag for the type**, such as `rto-fake`, `rto-refused` or `rto-failed`. Order tags can be up to 40 characters long. 4. **Filter your orders** by **Order status: Canceled** and **Tagged with** one of your tags, then select **Save** to keep the view for next time. > **Note:** Shopify's help says that canceling an order prevents you from collecting payment. > For an order that was fulfilled but not paid, it says to use Shopify's returns process to get > the items returned. After a month or two, count each tag. The biggest group tells you where to start. ## Which fix fits which problem? ### Failed deliveries: fix the address and the phone number These shoppers may still want the order, so blocking them can lose real customers. Instead: - Ask for clearer addresses: building or villa, area, landmark and a delivery notes field. In the UAE, see [better UAE addresses: landmarks, Makani numbers and delivery notes](/guides/uae-addresses-makani/). - Check the phone number format at checkout. - Tell shoppers to expect a call from the courier, so they pick up. - Ask your courier whether it can reschedule instead of returning straight away. ### Refused orders: confirm, then limit COD where it's risky - **Confirm before you ship.** A WhatsApp, SMS or phone confirmation gives the shopper a chance to cancel before you pay for delivery. See [confirming COD orders by phone, SMS or WhatsApp](/guides/confirm-cod-orders-phone-sms-whatsapp/). - **Show the full total early**, including shipping and any COD fee, so there is no surprise at the door. - **Limit COD for the kinds of orders that come back most in your data**, such as large carts or large first orders. - **Block COD for repeat refusers.** A customer who refuses again and again can still buy, but should pay online. See [how to spot repeat refusers in your Shopify orders](/guides/spot-repeat-cod-refusers/). ### Fake orders: stop them before they ship Confirmation is your main defence. The real owner of the phone number won't confirm an order they never placed, so you don't ship it. Hiding COD on large first orders also helps. A fake order placed under a new name counts as a first order, so a first-order limit stops the costly ones without touching your regular customers. Customer tags help less here. A tag only matches a customer you have seen before, and fake orders can use new details every time. ## Why mixing them up costs you If you treat a failed delivery as a refusal, you may block a customer who did nothing wrong except live in a building that's hard to find. If you treat refusals as address problems, you spend time on address fields while the same customers keep refusing. And if you call every shopper to confirm when your real problem is addresses, you pay for calls that don't help. If you use Khaleeji COD, keep this in mind when you run the refuser scan. It lists customers whose COD orders placed in the last 60 days are now cancelled, shipped or not, and nothing is tagged until you confirm. Check your tags or staff notes before you tag anyone. A cancelled order can also be a failed delivery, or an order you cancelled before it shipped. Sources: - Shopify Help Center: Canceling orders: https://help.shopify.com/en/manual/orders/cancel-delete-order - Shopify Help Center: Creating and using tags: https://help.shopify.com/en/manual/productivity-tools/using-tags - Shopify Help Center: Filtering orders: https://help.shopify.com/en/manual/fulfillment/managing-orders/viewing-orders/filtering-orders - Quiqup: Services and Fees Schedule (self-service, UAE courier): https://www.quiqup.com/terms-of-service/quiqup-services-and-fees-schedule---self-service-26-07-15 --- # RTO (return to origin) explained for GCC stores URL: https://khaleejicod.com/guides/rto-explained/ Updated: 2026-10-26 Short answer: RTO (return to origin) is when the courier brings a parcel back to you because it couldn't be delivered or the shopper refused it. For a COD order that means no payment, a delivery fee you may still pay, and stock off sale for days. RTO rate = RTO parcels ÷ parcels shipped × 100. **RTO** stands for **return to origin**. It means the courier brings a parcel back to the sender (you) because it couldn't be delivered or the shopper refused it. You may also see it called "return to sender" or "return to shipper". For a cash on delivery store, every RTO means no payment, a delivery fee you may still have to pay, and stock that is off sale until it comes back. ## How do couriers handle an RTO? The details depend on your courier and your contract, but the steps usually look like this: 1. The courier tries to deliver. If nobody answers, the address can't be found, or the shopper refuses, the attempt fails. 2. The courier may call the shopper and try again on another day. 3. After a set number of failed attempts, or when the shopper refuses, the courier marks the parcel for return. 4. The parcel travels back to your pickup location or warehouse. 5. You receive it, check it, and put it back in stock if you can. As one example, a UAE courier's published self-service fee schedule says: - Next-day delivery prices include three attempts. - After two failed attempts, its customer care team contacts the shopper to confirm a third. - After three failed attempts, or two without the shopper's confirmation, the order goes back to the merchant's pickup location (RTO). - RTO orders are charged the full delivery fee. Cross-border parcels can cost more. The same courier's cross-border terms say VAT and import duties are charged on the way back into the UAE. Other couriers work differently, so read your own contract. Check these points: - How many delivery attempts are included? - Does the courier call or message the shopper before giving up? - Can you ask for a new attempt or a new address instead of a return? - What is charged on an RTO: the delivery fee, a separate return fee, a COD fee, or a mix? - How long until returned parcels reach you? - Does the courier give a reason for each return, such as "refused" or "no answer"? ## What does an RTO cost you? First, whatever your courier charges for an RTO: the delivery fee, a return fee, or both, depending on your contract. On top of that come packaging, the ad spend that won the order, staff time, and items that come back damaged or can't be sold again. For a fill-in formula and a worked example in AED, see [what one refused COD order really costs](/guides/cost-of-a-refused-cod-order/). ## How is RTO different from a customer return? An RTO happens before the shopper has the item. A customer return happens after. | | RTO | Customer return | |---|---|---| | Did the shopper receive the item? | No | Yes | | Did a COD shopper pay? | No | Yes, at delivery | | Who starts it? | The courier, after a failed or refused delivery | The shopper | | Is there a refund? | No, nothing was paid | Usually, under your return policy | | Common causes | Refusals, wrong addresses, unreachable phones | Wrong size, changed mind, faulty item | In Shopify, a COD order stays **Pending** until you mark it as paid, so an RTO order is still unpaid when the parcel comes back. Shopify's help says that canceling an order prevents you from collecting payment, and that for an order that was fulfilled but not paid, you use Shopify's returns process to get the items returned. Choose one way to record RTOs and use it every time, so your numbers stay comparable from month to month. Cancelling the order and adding a tag such as `rto` works well, because you can then filter **Orders** by **Order status: Canceled** and **Tagged with** `rto`. ## How do you calculate your RTO rate? **RTO rate (%) = RTO parcels ÷ parcels handed to the courier × 100**, for the same period. A few rules keep the number honest: - **Count parcels shipped, not orders placed.** An order cancelled before it left your warehouse isn't an RTO. - **Wait until every parcel has finished its trip.** Measure last month's shipments a couple of weeks after the month ends, once each parcel has been delivered or returned. If you measure too early, parcels still on the road make your rate look better than it is. - **Keep COD and prepaid separate.** Prepaid parcels can also come back, for example when the address is wrong, but their cost to you is different. - **Count a parcel once.** A parcel that took three attempts and then came back is one RTO. > **Example:** These figures are made up for illustration. In September you hand 320 COD parcels > to the courier. By mid-October, 48 of them have come back. > RTO rate = 48 ÷ 320 × 100 = **15%**. Your delivery success rate for COD is 100% − 15% = 85%. Your courier's shipment report, with the final status of every parcel, is a good source for both numbers. If your courier doesn't send one, ask for it. ### Split the rate to find the cause One number for the whole store hides the pattern. Work out the same rate for groups of orders: - **By emirate or city.** Some areas may have harder-to-find addresses or longer delivery times. - **By product.** Impulse products and items with sizing doubts can behave differently. - **New versus returning customers.** If first orders come back far more often, a limit on large first orders may help. - **By cart size.** If big carts come back more often, a COD limit above a cart total may help. - **By ad campaign.** Some audiences may order more easily and refuse more often. ## Is my RTO rate good or bad? We don't quote an "industry average" here. We haven't found an independent, public figure for GCC stores that explains how it was measured. Two comparisons are more useful: 1. **Your own trend.** Is your rate going up or down month by month, and did a change you made (a confirmation message, a new courier, a COD limit) move it? 2. **Your break-even rate.** Using your own costs, work out the RTO rate at which your COD orders stop making money overall. The cost guide linked above shows the formula. To bring the rate down, start with the causes behind your returns. See [why COD orders get refused at the door](/guides/why-cod-orders-get-refused/) and [ways to cut COD refusals before the order is placed](/guides/reduce-cod-refusals/). Sources: - Quiqup: Services and Fees Schedule (self-service, UAE courier): https://www.quiqup.com/terms-of-service/quiqup-services-and-fees-schedule---self-service-26-07-15 - Quiqup: Cross Border Services and Fees: https://www.quiqup.com/terms-of-service/current-quiqup-cross-border-services-fees-addendum-24-11-01-v2 - Shopify Help Center: Canceling orders: https://help.shopify.com/en/manual/orders/cancel-delete-order - Shopify Help Center: Manual payment methods: https://help.shopify.com/en/manual/payments/manual-payments - Shopify Help Center: Filtering orders: https://help.shopify.com/en/manual/fulfillment/managing-orders/viewing-orders/filtering-orders --- # How to spot repeat refusers in your Shopify orders URL: https://khaleejicod.com/guides/spot-repeat-cod-refusers/ Updated: 2026-10-26 Short answer: Cancel and tag refused COD orders the same way every time, filter Orders by canceled status and tag, then check each customer's other orders. Tag customers with a clear pattern, such as two or more refusals and no delivered orders, as cod-refused. One refusal alone can be a mistake. A repeat refuser is a customer who has refused more than one COD order and has few or no delivered ones. To find them in Shopify, record refused orders the same way every time, filter your orders to the cancelled ones, and check each customer's other orders. Tag the customers who show a clear pattern `cod-refused`. Be careful with one-off cases: a single refusal can be an honest mistake. ## Step 1: Record every refused order the same way You can only find a pattern if refused orders are easy to find. When a refused COD parcel comes back: 1. In your Shopify admin, go to **Orders** and open the order. 2. Select **More actions > Cancel order**. 3. Choose the closest option in **Reason for cancellation**. 4. In **Staff note**, write what happened, for example "Refused at door, courier ref 12345". 5. Select **Cancel order**. 6. Add an order tag such as `refused`. Order tags can be up to 40 characters long. Only use the `refused` tag when the courier actually reached the shopper and they said no. If the parcel came back because nobody answered or the address was wrong, that is a failed delivery, not a refusal. Give it a different tag, such as `failed-delivery`. See [fake, refused, failed: three COD problems that need different fixes](/guides/fake-refused-failed-cod-orders/). > **Note:** Shopify's help says canceling an order prevents you from collecting payment. For an > order that was fulfilled but not paid, it says to use Shopify's returns process to get the > items returned. ## Step 2: Filter your orders to the refused ones 1. Go to **Orders**. 2. In the search and filter bar, add the filter **Order status** with the value **Canceled**. 3. Add a second filter, **Tagged with**, and enter `refused`. 4. Add **Date** if you only want a recent period. 5. Select **Save** and give the view a name, such as "Refused COD", so you can open it again with one click. If you haven't been tagging orders, filter by **Order status: Canceled** only, then open each order and check its payment method to keep the COD ones. For more ways to find them, see [how to find cancelled COD orders in Shopify admin](/guides/find-cancelled-cod-orders/). ## Step 3: Check each customer's other orders A refusal means little until you see it next to the customer's full history. For each name in your refused list, search **Orders** by the customer's name or email address. Shopify's order search accepts both. Then look at: - **How many COD orders they refused**, and how close together. - **How many orders they accepted and paid.** A customer with many delivered orders and one refusal is a good customer having a bad day. - **The phone number and address.** The same person sometimes orders under different names or email addresses. If you see the same phone number or building on several refused orders, treat them as one person. - **The courier's reason.** "Customer refused" is a refusal. "No answer" or "address not found" usually isn't. ## What counts as a pattern? There is no official rule. Here is a reasonable starting point. Adjust it to your store and the size of your orders. | What you see | Suggested action | |---|---| | Two or more refused COD orders, no delivered orders | Tag `cod-refused` | | Two refusals close together, even with older delivered orders | Look closer, contact the customer, then decide | | One refusal on a first order | Don't tag yet. Watch for a second one | | One refusal, several delivered and paid orders | Don't tag | | Returns marked "no answer" or "address not found" | Don't tag. Fix the address or phone details | | Refusals under different names with the same phone number | Tag each matching customer | For one-off refusals on first orders, a limit on large first orders protects you without labelling anyone. See [how to hide COD on large first orders](/guides/hide-cod-first-orders/). ## How do you stay fair? A tag can stop a good customer from paying the way they prefer, so keep the bar sensible: - **Remember why one refusal happens.** The courier came while the shopper was at work, the shopper was travelling, the order was placed twice by mistake, or the size was wrong. - **Ask before you decide.** A short, polite message ("Your order came back to us. Was anything wrong?") can explain a refusal and save the customer. - **Keep notes factual.** Write what happened ("Refused 2 COD orders, March and May"), not opinions. Shopify's **Customer Note** field is visible only to your staff, but keep it something you'd be happy for the customer to read. - **Limit only the payment method.** A `cod-refused` tag should only affect how the customer can pay. They can still order and pay online. - **Review your tags.** If a tagged customer pays online a few times without problems, consider removing the tag. ## Step 4: Tag the customer `cod-refused` To tag one customer: 1. Go to **Customers** and open the customer. 2. In the **Tags** section, type `cod-refused`. 3. Select **Save**. To tag several at once, select them in **Customers**, select the horizontal menu icon, then **Add tags**. Choose the tag and select **Save**. To remove a tag later, open the customer, select the **x** on the tag, and select **Save**. Shopify says tags aren't case sensitive, but type `cod-refused` exactly, in lowercase, so any app that reads the tag matches it. To see everyone you've tagged, go to **Customers > Search and filter**, select **Tagged with**, enter `cod-refused`, then select **Save filters** and name the segment. Shopify saves this as a customer segment. In the segment editor, the same filter reads `customer_tags CONTAINS 'cod-refused'`. A tag on its own doesn't change the checkout. It only works with a COD rule that reads customer tags, and only when Shopify links the checkout to that customer's record. For how that works, and what happens with guest checkouts, see [how to block COD for specific customers with tags](/guides/block-cod-for-customers/). ## A faster way to build the list Khaleeji COD has a refuser scan that does most of step 2 for you. It looks at COD orders placed in the last 60 days that are now cancelled and lists the customers to tag `cod-refused`. Customers who already have that tag are skipped, guest orders have no customer to tag, and nothing is tagged until you select **Tag N customers**. The scan can't tell a refusal from a failed delivery or an order you cancelled before shipping, so still do step 3: check the list against your staff notes and courier reasons before you confirm. Sources: - Shopify Help Center: Filtering orders: https://help.shopify.com/en/manual/fulfillment/managing-orders/viewing-orders/filtering-orders - Shopify Help Center: Viewing and filtering orders: https://help.shopify.com/manual/orders/search-view-print-orders - Shopify Help Center: Canceling orders: https://help.shopify.com/en/manual/orders/cancel-delete-order - Shopify Help Center: Creating and using tags: https://help.shopify.com/en/manual/productivity-tools/using-tags - Shopify Help Center: Managing customers: https://help.shopify.com/en/manual/customers/manage-customers - Shopify Help Center: Shopify-based customer segment filters: https://help.shopify.com/en/manual/customers/customer-segmentation/reference-guide/shopify-segments --- # How to add Cash on Delivery to a Shopify store URL: https://khaleejicod.com/guides/add-cash-on-delivery-shopify/ Updated: 2026-10-26 Short answer: In your Shopify admin, go to Settings > Payments, select Cash on Delivery (COD) from the manual payment methods, add the text shoppers see, and activate it. COD orders arrive unpaid, so you mark each one as paid after the courier pays you. Cash on Delivery is built into Shopify as a **manual payment method**. To turn it on, go to **Settings > Payments** in your Shopify admin, select **Cash on Delivery (COD)**, fill in the two text fields, and activate it. It takes a few minutes and costs nothing extra: Shopify says manual payments don't incur third-party transaction fees. ## What is a manual payment method? A manual payment method is a way of paying that happens outside the online checkout. Shopify lists cash on delivery, money orders and bank transfers as common examples. The shopper places the order without paying, and you record the payment yourself later. That has two effects you should plan for: - **Every COD order starts as unpaid.** Shopify marks orders paid with a manual method as unpaid (pending) on the **Orders** page. - **Shopify doesn't collect the money.** Your courier collects the cash and later pays it to you. You then mark the order as paid in Shopify. ## How do you turn on Cash on Delivery? These steps follow Shopify's help page for manual payment methods. Shopify moves admin menus from time to time, so if a section has a slightly different name in your admin, look for the list of manual payment methods. 1. From your Shopify admin, go to **Settings > Payments**. 2. Find the manual payment methods Shopify suggests. Shopify's help page currently places them in the **Payment providers** section. Select **Cash on Delivery (COD)**. 3. In **Additional details**, enter the text you want shown next to the method at checkout. 4. In **Payment instructions**, enter what the shopper needs to do to pay. Shopify shows this on the order confirmation page after the order is placed. 5. Select the button to activate the payment method. COD now appears as a payment option on your checkout for every shopper and every order. > **Note:** Shopify shows this method at checkout as "Cash on Delivery (COD)". Shopify's help > pages give no way to edit that name, and Shopify reserves it, so you can't create a custom > method with the same name. > If you want a clearer or Arabic name, see > [how to rename Cash on Delivery at Shopify checkout](/guides/rename-cash-on-delivery-shopify/). ## What should you write in Additional details and Payment instructions? Shopify suggests checking with your delivery service first, so your text matches exactly what the shopper must do. Ask your courier whether they accept card on delivery, whether they call before arriving, and whether the shopper can open the parcel before paying. Then write short, plain lines. **Additional details** (shown at checkout, next to the method). Say how and when the shopper pays: - "Pay the courier in cash when your order arrives." - "Pay cash or card to the courier on delivery." (only if your courier takes cards) **Payment instructions** (shown on the confirmation page). Say what happens next: - "Please keep the exact amount ready. Our courier will call you before delivery." - "Your order total includes delivery. You pay nothing before your order arrives." If many of your shoppers read Arabic, you can write each line in both languages. For example, «ادفع نقدًا لمندوب التوصيل عند استلام طلبك» means "Pay the delivery driver in cash when you receive your order." For help choosing the Arabic name of the method itself, see [what to call Cash on Delivery in Arabic](/guides/cash-on-delivery-in-arabic/). ## What happens to a COD order in your admin? 1. The order arrives on the **Orders** page marked as unpaid (pending). 2. You fulfill it as usual and hand it to your courier. 3. When the courier pays you the cash they collected, open the order and mark it as paid from the order details page. If the shopper refuses the parcel, the order stays unpaid. Decide in advance how you record a refusal (for example, by cancelling the order with a reason), because that makes refused COD orders much easier to find later. ## How do you test COD before shoppers see it? A COD test order costs nothing, because no card is charged. 1. Open your online store in a browser, add a product to the cart and go to checkout. 2. Enter a delivery address and continue to the payment step. 3. Check that "Cash on Delivery (COD)" appears with your **Additional details** text under it. 4. Place the order. Check that the confirmation page shows your **Payment instructions**. 5. In your admin, open the order and check that it shows as unpaid, with COD as the payment method. 6. Cancel the test order: open it, select **More actions > Cancel order**, keep **Restock inventory** selected, and deselect **Send a notification to the customer** if you don't want an email. Shopify's help page on cancelling orders adds that orders paid with a manual payment method can be deleted once they're cancelled or archived. Deleted orders are removed from your admin and from your reports, which keeps test orders out of your numbers. If your store also has an Arabic checkout, repeat steps 1 to 4 in Arabic to check the text there. ## How do you turn COD off again? 1. From your Shopify admin, go to **Settings > Payments**. 2. In the **Payment providers** area, find the **Manual payment methods** box and select **Manage** next to Cash on Delivery. 3. Select **Deactivate payment method** and confirm. You can activate it again at any time. ## Can you offer COD only on some orders? Not with Shopify's payment settings alone. Shopify's manual payment methods page has no setting to limit COD by cart total, product, customer or city. Once active, COD shows on every checkout. To show COD only where it makes sense, you need a **payment customization**: a small piece of logic that hides, renames or reorders payment methods at checkout. Shopify's help pages describe two routes: - **A payment customization app** from the Shopify App Store, which you then activate in **Settings > Payments**, in the **Payment customizations** section. - **Shopify's own Checkout Blocks app**, which can hide payment methods by rules such as cart total or customer tag. Shopify says this feature is only for stores on the Shopify Plus plan. Khaleeji COD uses a payment customization of this kind, built for COD only. It can hide COD for rules such as large carts, tagged customers, tagged products, or chosen regions and cities, and it leaves every other payment method alone. For the options in detail, read [how to hide a payment method on Shopify](/guides/hide-payment-method-shopify/) and [how to hide COD above a cart total](/guides/hide-cod-above-cart-total/). > **Note:** If you sell in more than one currency, Shopify says you need Shopify Payments to > accept manual payments in multiple currencies. With its international selling tools, manual > methods such as COD then show in each market's currency. Sources: - Shopify Help Center: Manual payment methods: https://help.shopify.com/en/manual/payments/manual-payments - Shopify Help Center: Canceling orders: https://help.shopify.com/en/manual/fulfillment/managing-orders/canceling-orders - Shopify Help Center: Customizing checkout (payment method customizations): https://help.shopify.com/en/manual/checkout-settings/checkout-customization - Shopify Help Center: Checkout Blocks payment method customizations: https://help.shopify.com/en/manual/checkout-settings/checkout-blocks/customizations/payment-methods --- # How to rename Cash on Delivery at Shopify checkout URL: https://khaleejicod.com/guides/rename-cash-on-delivery-shopify/ Updated: 2026-10-26 Short answer: Shopify reserves the name "Cash on Delivery (COD)" and its help pages give no way to edit it. For a clearer name, create a custom manual method with your own wording, or use an app with a payment customization that renames COD at checkout, with an Arabic name for Arabic shoppers. Shopify's built-in cash on delivery method shows up on an English checkout as **"Cash on Delivery (COD)"**. Shopify's help pages give no way to edit that name, and Shopify reserves it, so you can't create a custom method called "Cash on Delivery (COD)" either. You have two ways to show a clearer name: create a custom manual payment method with your own wording, or rename COD at checkout with a payment customization. ## Why rename COD at all? The default name works, but it isn't ideal for GCC shoppers: - **"(COD)" is jargon.** Many shoppers understand "Cash on Delivery" but not the abbreviation. - **It may not read the way you want on an Arabic checkout.** Open your checkout in Arabic and check the label. If it isn't the wording you want, you need your own translation or a rename. - **It doesn't say how to pay.** If you accept card on delivery as well as cash, the name can say so ("Cash on Delivery: cash or card"). A clear name won't fix refusals on its own, but it removes one small source of doubt at the moment the shopper decides how to pay. ## Option 1: Create a custom manual payment method This is free and takes two minutes. It works when you want one new name for everyone. 1. In your Shopify admin, go to **Settings > Payments**. 2. In the **Manual payment methods** section, select **Create custom payment method**. 3. Enter a name that isn't reserved. "Cash on Delivery" (without "(COD)") or "Pay cash on delivery" both work. Shopify's reserved list includes "Cash on Delivery (COD)", "Cash", "Bank Deposit" and "Money Order". 4. In **Additional details**, add a short line shoppers see next to the method at checkout, for example "Pay the courier in cash when your order arrives." 5. In **Payment instructions**, add what shoppers see on the order confirmation page, for example "Please keep the exact amount ready. Our courier will call before delivery." 6. Select **Activate**. 7. Deactivate the old "Cash on Delivery (COD)" method so shoppers don't see two cash options. > **Note:** Orders paid with any manual method are marked as unpaid (pending) in **Orders** until > you mark them as paid, exactly like the built-in COD method. **The limits of this option:** - **One name in the settings.** A manual method has a single name field, so its settings can't give Arabic shoppers an Arabic name and everyone else an English one. - **Apps that look for "Cash on Delivery" may not recognise a creative name.** If you call it "Doorstep payment", a COD app or courier integration might not treat it as COD. Keep the exact phrase "Cash on Delivery" in the name, or check with the app which names it recognises. ## Option 2: Rename COD at checkout with a payment customization Shopify lets apps change the payment step through **payment customization Functions**. A Function can rename, reorder or hide payment methods while the shopper is at checkout. It changes what the shopper sees, not your payment settings. This is the option to use when you want: - **A different name per language**, for example «الدفع عند الاستلام» for shoppers using your Arabic checkout and "Cash on Delivery" for everyone else. - **To keep the built-in method** (and any reports or integrations that depend on it) while showing a friendlier name. - **Other COD rules in the same place**, such as hiding COD above a cart total. Two Shopify facts are useful to know before you choose an app: - **Every plan can use it.** Shopify says stores on any plan can use public App Store apps that contain Functions. Only custom (private) apps with Functions need Shopify Plus. - **There's a limit of 25 active payment customizations per store.** One app normally uses one, so this only matters if you stack many payment apps. Khaleeji COD works this way: with the rename switched on, shoppers whose checkout language is Arabic see «الدفع عند الاستلام» and everyone else sees "Cash on Delivery". You can edit both names. ## What should you call it in Arabic? «الدفع عند الاستلام» (literally "payment on receipt") is a widely used wording on GCC checkouts. «الدفع عند التسليم» ("payment on delivery") is also understood. Pick one and use it everywhere: product pages, FAQ, order emails and the checkout. For more on the wording, see [what to call Cash on Delivery in Arabic](/guides/cash-on-delivery-in-arabic/). ## How do you check that the new name works? 1. Create a draft order for a test customer and open its checkout link. See [how to test checkout payment rules with draft orders](/guides/test-payment-rules-draft-orders/). 2. Go to the payment step and check the name. 3. If you use different names per language, switch the checkout to Arabic and check again. Shopify's Function sees the checkout language, so the Arabic name only appears on the Arabic checkout. > **Note:** Payment customizations run on the online checkout only. When you collect payment for > a draft order from inside the Shopify admin, you'll still see the original name. ## Which option should you pick? | You want | Use | |---|---| | One clearer English name, nothing else | Option 1: a custom manual method | | Arabic and English names | Option 2: a payment customization | | A clearer name plus rules about when COD shows | Option 2 | If you also want to control *when* COD appears, read [how to hide a payment method on Shopify](/guides/hide-payment-method-shopify/) next. Sources: - Shopify Help Center: Manual payment methods: https://help.shopify.com/en/manual/payments/manual-payments - Shopify.dev: Payment customization Function API: https://shopify.dev/docs/api/functions/latest/payment-customization - Shopify.dev: About Shopify Functions: https://shopify.dev/docs/apps/build/functions --- # How to hide a payment method on Shopify: every option explained URL: https://khaleejicod.com/guides/hide-payment-method-shopify/ Updated: 2026-10-26 Short answer: To remove a payment method for everyone, deactivate it in Settings > Payments. To hide it only for some checkouts, you need a payment customization: a public app (any plan), Shopify's Checkout Blocks app (Plus only) or a custom app (Plus only). Shopify Scripts were set to stop on June 30, 2026. There are two kinds of "hiding" on Shopify. If you want a payment method gone for **everyone**, deactivate it in **Settings > Payments**. If you want it hidden **only for some checkouts** (big carts, certain products, certain customers or countries), you need a **payment customization**, which comes from an app. Which app you can use depends on your Shopify plan. ## Option 1: Turn the method off for everyone This needs no app and works on every plan. Use it when you no longer want to offer a method at all. For a manual method such as Cash on Delivery, Shopify's steps are: 1. From your Shopify admin, go to **Settings > Payments**. 2. In the **Payment providers** area, find the **Manual payment methods** box and select **Manage** next to the method. 3. Select **Deactivate payment method** and confirm. Methods that come from a payment provider (cards, wallets, buy now, pay later) are switched on and off in that provider's settings, and the provider's help pages explain the steps. This is all or nothing. Shopify's payment settings have no option to show a method only above or below a cart total, only for some products, or only for some customers. For that, read on. ## Option 2: A public app with a payment customization Shopify lets apps change the payment step with **payment customization Functions**. A Function runs while the shopper is at checkout and can hide, rename or reorder payment methods. Shopify's own examples include hiding a method for carts above or below a value and hiding a method based on the customer's country. What a Function can look at includes: - the cart total, subtotal and each item in the cart - product tags, collections, product type and vendor - customer tags and the customer's number of orders - the delivery address and the checkout's country and language Shopify says stores on any plan can use public apps from the Shopify App Store that contain Functions. Its checkout customization page adds that the store must be on at least the Basic plan. To switch one on, install the app, then follow Shopify's steps: 1. From your Shopify admin, go to **Settings > Payments**. 2. In the **Payment customizations** section, select **Manage**. 3. Add or select the customization, configure it, save, then activate it. The **Payment customizations** section is also where you can see what's active on your store. A store can have at most 25 active payment customizations. Each active customization counts, so the limit matters if you stack many payment apps. Khaleeji COD uses a payment customization of this type and only touches Cash on Delivery. It hides COD when a rule matches and never hides cards, wallets or buy now, pay later options. ## Option 3: Shopify's Checkout Blocks app (Shopify Plus only) Checkout Blocks is Shopify's own app. Its payment section can hide, rename and reorder payment methods. Shopify says creating payment method customizations with it is available only on the Shopify Plus plan. The hiding rules Shopify lists include: | Rule group | Examples of rules | |---|---| | Cart | Cart total, cart subtotal, cart currency, total quantity | | Customer | Customer tag, order count, amount spent, logged in or not | | Delivery | Shipping country, shipping state (province), delivery method | | Product | Collection, product type, vendor | | Market | The Shopify Market of the checkout | Shopify's list doesn't include a product tag rule, so for product-based hiding you would group products by collection, type or vendor instead. Shipping country and state rules need a delivery address, so they can't hide anything before the shopper enters one. ## Option 4: A custom app with your own Function (Shopify Plus only) A developer can write a payment customization Function for your store alone. Shopify says only stores on a Shopify Plus plan can use custom apps that contain Function APIs. This makes sense when your rules are unusual and no public app covers them. ## What about Shopify Scripts? Before Functions, some stores hid payment methods with payment Scripts. That route is closed. Shopify stopped Script editing and publishing on April 15, 2026, and Scripts were set to stop running on June 30, 2026. If your store relied on one, see [from Shopify Scripts to Functions: what changed for payment rules](/guides/shopify-scripts-to-functions-payment-rules/). ## What can't be hidden? Payment customizations have limits that apply to every app, including Checkout Blocks: - **Admin, POS and order editing.** Shopify lists the Shopify admin, POS, order editing, draft orders created in the admin, the Create Order API and recurring subscription orders as places where payment customizations don't run. They do run on the online checkout, including the checkout link you send for a draft order. - **Inside Shop Pay.** Shopify says that in Shop Pay, payment customizations only affect the gift card field, not other payment methods. - **Express wallets.** You can remove a wallet such as Apple Pay or Google Pay from the express section or the payment section of checkout, but you can't reorder wallets. Hiding a wallet in only one of those places (for example, only the express button at the top) is available only on Shopify Plus. - **Names with logos.** Methods shown as a logo, such as Shop Pay, Apple Pay, Google Pay and other wallets, can't be renamed. They can still be hidden, within the limits above. - **Card fields in the US and Canada.** On plans other than Plus, Shopify limits these customizations to non-card payment methods for stores in the United States and Canada. - **Restricted methods.** Shopify says plan and geographical restrictions apply. When a method is restricted, an app's instruction to change it doesn't take effect at checkout. > **Note:** Because payment customizations don't run in the admin, collecting payment for a draft > order from inside the admin still shows every method. To check a rule, open the draft order's > checkout link instead. See > [how to test checkout payment rules with draft orders](/guides/test-payment-rules-draft-orders/). ## Which option should you choose? | Your situation | Use | |---|---| | You don't want to offer the method at all | Option 1: deactivate it | | Any plan, hide a method for some checkouts | Option 2: a public app | | Shopify Plus, your rules fit Checkout Blocks' list | Option 3: Checkout Blocks | | Shopify Plus, unusual rules no app covers | Option 4: a custom app | If the method you want to limit is Cash on Delivery, two simple starting rules are a cart total limit and a list of products that shouldn't ship with COD. See [how to hide COD above a cart total](/guides/hide-cod-above-cart-total/) and [how to turn off COD for certain products](/guides/disable-cod-for-products/). Sources: - Shopify.dev: Payment customization Function API: https://shopify.dev/docs/api/functions/latest/payment-customization - Shopify.dev: About Shopify Functions: https://shopify.dev/docs/apps/build/functions - Shopify Help Center: Customizing checkout (payment method customizations): https://help.shopify.com/en/manual/checkout-settings/checkout-customization - Shopify Help Center: Checkout Blocks payment method customizations: https://help.shopify.com/en/manual/checkout-settings/checkout-blocks/customizations/payment-methods - Shopify Help Center: Manual payment methods: https://help.shopify.com/en/manual/payments/manual-payments - Shopify.dev changelog: Shopify Scripts will be deprecated on June 30, 2026: https://shopify.dev/changelog/shopify-scripts-will-be-deprecated-on-june-30-2026 --- # From Shopify Scripts to Functions: what changed for payment rules URL: https://khaleejicod.com/guides/shopify-scripts-to-functions-payment-rules/ Updated: 2026-10-26 Short answer: Shopify stopped Script editing on April 15, 2026 and switched all Scripts off on June 30, 2026. Payment rules now run as payment customization Functions inside apps. Plus stores should check what their old Scripts did. Other plans could never use Scripts but can use public apps with Functions. Shopify Scripts no longer run. Shopify stopped all editing and publishing of Scripts on **April 15, 2026** and switched every Script off on **June 30, 2026**. Payment rules (hiding, renaming or reordering payment methods) now run as **payment customization Functions**, which come inside apps. If your store used a payment Script, its rules stopped working on June 30 and need a Functions-based replacement. ## What were the dates? | Date | What happened | |---|---| | April 9, 2026 | Shopify announced the change in its developer changelog | | April 15, 2026 | Stores could no longer edit or publish Shopify Scripts | | June 30, 2026 | All Shopify Scripts stopped running | Shopify's help pages now say that Scripts still published on June 30, 2026 were deactivated and no longer work. ## What did payment Scripts do? Scripts were small pieces of Ruby code written in Shopify's **Script Editor** app. Shopify's App Store listing for Script Editor says the app was only available to Shopify Plus customers. There were three kinds: - **Line item scripts** changed prices and gave discounts in the cart. - **Shipping scripts** changed or discounted shipping options. - **Payment scripts** renamed, hid or reordered payment gateways. Payment scripts ran when checkout reached the payment page. Shopify notes they didn't affect payment options shown before that point, such as Apple Pay. For example, a payment Script could hide Cash on Delivery for large orders, or for customers with a certain tag. ## What replaced them? For payment rules, the replacement is the **Payment Customization Function API**. A payment customization can: - hide a payment method - rename a payment method (except methods shown as a logo, such as wallets) - reorder payment methods - set payment terms (Shopify Plus only) - send a B2B order for review before it's placed (B2B on Shopify Plus only) The main practical change is where the logic lives. A Script was code that you or a developer wrote in the Script Editor. A Function is part of an **app**: you install the app and set the rules in your admin, with no code. A store can have at most 25 active payment customizations. ## Scripts and Functions compared | | Payment Scripts | Payment customization Functions | |---|---|---| | Who could use them | Shopify Plus stores only | Any plan through public App Store apps; custom apps need Plus | | Where the logic lives | Ruby code in the Script Editor app | Inside an app, configured in your admin | | What they change | Rename, hide, reorder gateways | Hide, rename, reorder methods; payment terms on Plus | | Status today | Switched off since June 30, 2026 | Supported | A Function can base its decision on the cart total and subtotal, the products in the cart (their tags, collections, type and vendor), the customer's tags and order count, the delivery address, and the checkout's country and language. COD rules like these fit within that: | Old payment Script rule | What the Function looks at | |---|---| | Hide COD above an order value | The cart total | | Hide COD for tagged customers | Customer tags | | Hide COD for some products | Product tags or collections | | Hide COD for some countries or areas | The delivery address or checkout country | | Rename COD | The rename operation (Arabic shoppers can get an Arabic name) | ## You're on Shopify Plus and used payment Scripts: what should you check now? Your Scripts are already off. If a Script hid COD for risky orders, COD has been showing to every shopper since June 30, 2026 unless you replaced it. 1. **Find out what your Scripts did.** Shopify generates a Scripts customizations report. From your Shopify admin, go to **Apps > Script Editor**, and in the banner select **Replace Shopify Scripts**. The report has a section for each type you used, including **Payment gateways**, and lists the Scripts that were active before June 30. You can export it as a CSV file. 2. **Decide which rules you still need.** Skip rules for products or campaigns you no longer run. 3. **Pick a replacement for each rule.** Shopify's options are an existing app built on Functions, or your own solution built with Functions. On Plus you can also use Shopify's Checkout Blocks app, whose payment rules include cart total, customer tag and shipping country. If you build your own, Shopify says custom Functions-based apps must be created in the Dev Dashboard and then connected to your store, not created in the Shopify admin. 4. **Check what's active.** Go to **Settings > Payments**. The **Payment customizations** section lists the customizations on your store. Keep an eye on the limit of 25. 5. **Test every rule at checkout.** Payment customizations run on the online checkout and on the checkout link of a draft order. They don't run in the Shopify admin or POS. See [how to test checkout payment rules with draft orders](/guides/test-payment-rules-draft-orders/). ## You're not on Shopify Plus: does this affect you? Not directly. Scripts were never available on your plan, so nothing on your store stopped working on June 30. The part that matters for you is Functions. Shopify says stores on any plan can use public apps from the Shopify App Store that contain Functions. So payment rules that needed Plus in the days of Scripts, such as hiding Cash on Delivery above a cart total, are possible on other plans with the right app. You only need Plus for a custom app that contains a Function, or for a few Plus-only features such as payment terms. Khaleeji COD is built this way for Cash on Delivery. It uses a single payment customization for all its COD rules. ## Where to go next - For every way to hide a payment method today, see [how to hide a payment method on Shopify](/guides/hide-payment-method-shopify/). - To rebuild a payment Script rule like the ones above, see [how to hide COD above a cart total](/guides/hide-cod-above-cart-total/) or [how to block COD for specific customers with tags](/guides/block-cod-for-customers/). Sources: - Shopify.dev changelog: Shopify Scripts will be deprecated on June 30, 2026: https://shopify.dev/changelog/shopify-scripts-will-be-deprecated-on-june-30-2026 - Shopify Help Center: Shopify Scripts and the Script Editor app: https://help.shopify.com/en/manual/checkout-settings/script-editor/shopify-scripts - Shopify Help Center: Transitioning from Shopify Scripts to Shopify Functions: https://help.shopify.com/en/manual/checkout-settings/script-editor/transitioning-to-functions - Shopify App Store: Script Editor (by Shopify): https://apps.shopify.com/script-editor - Shopify.dev: Payment customization Function API: https://shopify.dev/docs/api/functions/latest/payment-customization - Shopify.dev: About Shopify Functions: https://shopify.dev/docs/apps/build/functions - Shopify Help Center: Checkout Blocks payment method customizations: https://help.shopify.com/en/manual/checkout-settings/checkout-blocks/customizations/payment-methods --- # How to hide COD above a cart total URL: https://khaleejicod.com/guides/hide-cod-above-cart-total/ Updated: 2026-10-26 Short answer: Shopify's payment settings can't limit Cash on Delivery by cart total, so you need a payment customization that hides COD when the cart is above an amount you choose. Pick the amount from your own refused COD orders, and test it with a large draft order. To hide Cash on Delivery when the cart is above a set amount, you need a **payment customization**: a rule that runs at checkout and removes COD from the payment options when the total is too high. Shopify's own payment settings can't do this. Shoppers with smaller carts keep COD, and shoppers with large carts need to pay by card or another online method. ## Why are big COD carts riskier? Every refused COD order costs you shipping out and shipping back. A large order adds more on top: - **More stock is stuck in transit.** Expensive items can spend days on the road and in the courier's returns process instead of being available to sell. - **More can go wrong on the way back.** A returned parcel can come back damaged, and the more it's worth, the more that costs you. - **The shopper needs a lot of cash at the door.** A shopper who ordered on impulse may not have the full amount ready when the courier arrives. Big orders are still good business. The point is that the cost of a refusal grows with the value of the order. For the full picture, see [what one refused COD order really costs](/guides/cost-of-a-refused-cod-order/). ## Can Shopify do this without an app? No. Shopify's page on manual payment methods (which is how COD works on Shopify) has no setting to limit a method by cart total. Once COD is active, it shows on every checkout. Hiding a payment method above or below a cart value is one of the examples Shopify gives for its **Payment Customization Function API**, which apps use. Your options: - **A public app with a payment customization.** Shopify says stores on any plan can use public App Store apps that contain Functions. - **Shopify's Checkout Blocks app.** Its hiding rules include cart total and cart subtotal, but Shopify says payment customizations in Checkout Blocks are only for Shopify Plus stores. For a comparison of every route, see [how to hide a payment method on Shopify](/guides/hide-payment-method-shopify/). ## How do you choose the limit? Base the limit on your own orders. The aim is to find the order value above which COD refusals rise. 1. **Export your orders.** On the **Orders** page, select **Export** and choose a date range, for example the last six months. Exports by date are emailed to you. 2. **Keep the COD orders.** Open the file in a spreadsheet and filter the **Payment Method** column for your COD method. 3. **Mark the refused ones.** Use the **Canceled at** column, or however you record refusals (a tag or a cancellation reason). See [how to find cancelled COD orders in Shopify admin](/guides/find-cancelled-cod-orders/). 4. **Group the orders by the Total column** into a few value bands. 5. **Work out the refusal rate for each band:** refused COD orders ÷ all COD orders in that band × 100. > **Example:** These figures are examples only. Replace them with your own. > > - Under 500 AED: 400 COD orders, 32 refused, a refusal rate of 8%. > - 500 to 1,499 AED: 250 COD orders, 30 refused, a rate of 12%. > - 1,500 AED and above: 60 COD orders, 15 refused, a rate of 25%. > > In this store the rate jumps at 1,500 AED, so 1,500 AED is a sensible first limit. A few things to weigh before you pick: - **Keep your normal basket under the limit.** If most of your orders are around 300 AED, a limit of 400 AED would push many ordinary shoppers to pay by card, and some of them may leave instead. - **Small bands mislead.** If a band has only a handful of orders, one refusal changes its rate a lot. Use a longer date range, or wider bands. - **Check the Currency column.** Shopify describes it as your store's base currency at the time of the order. If you changed your store currency during your date range, don't compare totals from before and after the change. - **Review it later.** After a month or two, repeat the export and see whether refusals above and below the limit changed. Khaleeji COD's GCC preset starts with a limit of 1,500 in your shop's currency. Treat that as a starting point and change it to fit your own numbers. ## Which total does the rule check? Shopify gives a payment customization two cart amounts: the **total amount** (Shopify describes it as the total the customer pays at checkout) and the **subtotal** (before taxes and cart-level discounts). An app may compare either one. The two amounts can differ, so the same cart can be above your limit on one and below it on the other. Ask which one your app uses and set the limit with that in mind. ## What about shoppers paying in another currency? If you sell to several GCC countries, some shoppers may check out in their own currency. Shopify's documentation says Functions receive money amounts in the **currency the customer sees at checkout**, and provides an exchange rate between your store currency and that currency. That matters for your limit. If your store currency is AED and a shopper checks out in SAR, the cart total the rule sees is in SAR. A rule that compares it directly with "1,500" would be comparing two different currencies. A correct rule converts first. Khaleeji COD keeps your limit in your shop's currency and converts carts in other currencies before comparing. If you use another app, ask how it handles this. ## How do you test it? Use a draft order, because its checkout link runs payment customizations like a normal checkout. 1. In your Shopify admin, go to **Orders > Drafts** and select **Create order**. 2. Add products until the total is above your limit, and add a test customer. 3. Select **Share**, then **Copy link**. 4. Open the link in a private browser window and continue to the payment step. 5. Check that Cash on Delivery is missing and your other methods are still there. 6. Repeat with a second draft order below the limit. COD should appear. > **Note:** Payment customizations don't run inside the Shopify admin. If you collect payment for a > draft order from the admin instead of opening its checkout link, you'll still see COD. This is > expected behaviour. For more, see > [how to test checkout payment rules with draft orders](/guides/test-payment-rules-draft-orders/). ## What do shoppers see when COD is hidden? They see your other payment methods, with no message about COD. To avoid surprises, say it before checkout: a line on your shipping or FAQ page such as "Cash on Delivery is available for orders up to 1,500 AED" sets the expectation. A short COD policy page, linked from your footer, is a good place for it. Sources: - Shopify.dev: Payment customization Function API: https://shopify.dev/docs/api/functions/latest/payment-customization - Shopify.dev: Localization practices for Shopify Functions: https://shopify.dev/docs/apps/build/functions/localization-practices-shopify-functions - Shopify Help Center: Manual payment methods: https://help.shopify.com/en/manual/payments/manual-payments - Shopify Help Center: Checkout Blocks payment method customizations: https://help.shopify.com/en/manual/checkout-settings/checkout-blocks/customizations/payment-methods - Shopify Help Center: Exporting orders: https://help.shopify.com/en/manual/fulfillment/managing-orders/exporting-orders - Shopify Help Center: Sending draft order invoices: https://help.shopify.com/en/manual/fulfillment/managing-orders/create-orders/send-draft --- # How to turn off COD for certain products URL: https://khaleejicod.com/guides/disable-cod-for-products/ Updated: 2026-10-26 Short answer: Shopify has no per-product COD switch. The usual way is to tag those products (for example no-cod) and use a payment customization that hides COD when a tagged product is in the cart. You can tag many products at once from the Products page in your admin. Shopify doesn't have a setting on the product page to turn off Cash on Delivery. The usual method is to **tag** the products that shouldn't be sold with COD (for example with the tag `no-cod`) and use a **payment customization** that hides COD whenever a tagged product is in the cart. Shopify lets payment customizations read product tags, and you can tag many products at once from your admin. ## Which products should skip COD? Think about what happens when a COD parcel is refused: it travels back to you, and you can only recover your money by selling the item again. Products where that's hard are good candidates: - **Custom-made or personalised items**, such as engraved gifts, printed names or made-to-measure clothing. If the shopper refuses it, you usually can't sell it to anyone else. - **High-value items.** A refusal ties up expensive stock for days. You can also cover this with a cart total rule: see [how to hide COD above a cart total](/guides/hide-cod-above-cart-total/). - **Fragile items.** Every extra trip is another chance of breakage, and a refused parcel makes two trips. - **Perishable items**, such as fresh flowers, cakes or fresh food. A refused parcel may not be sellable by the time it's back. - **Made-to-order items with a long wait.** The longer the gap between order and delivery, the more time the shopper has to change their mind. You don't have to tag everything in these groups. Start with the products that have caused refusals in your own orders. ## Can Shopify do this without an app? No. Payment methods such as COD are switched on for the whole store, and Shopify has no field on a product to exclude it. The options are: - **A public app with a payment customization.** Shopify's Payment Customization Function API lets an app check the products in the cart, including their tags, collections, product type and vendor, and hide a payment method. Shopify says public App Store apps that contain Functions work on any plan. - **Shopify's Checkout Blocks app (Shopify Plus only).** Its product rules cover product collection, product type and vendor. Shopify's list of rules doesn't include product tags, so you would group the products into a collection instead. Khaleeji COD uses the tag `no-cod`: if any product in the cart has it, COD is hidden for that checkout. Other apps may use a different tag, so check the one your app expects. ## How do you tag one product? 1. From your Shopify admin, go to **Products** and open the product. 2. In the **Tags** section, type `no-cod` (or select it if it already exists). 3. Select **Save**. ## How do you tag many products at once? 1. From your Shopify admin, go to **Products**. 2. Narrow the list with **Search and filter**. Shopify's filters include **Vendors**, **Types**, **Collection** and **Tag**. For example, filter by the collection "Personalised gifts". 3. Select the products with the checkboxes. To select every product that matches your filter, select the checkbox at the top of the list, then **Select all results** if there are more than 50. 4. Open the bulk actions menu (the three dots) and choose **Add tags**. 5. Choose or type `no-cod`, then select **Save**. To undo, select the same products and choose **Remove tags** from the same menu. To check what's tagged later, filter the product list by **Tag** and choose `no-cod`. You can save that filter as a view, so the list is one click away. ## What should you know about tags before you start? - **A tag covers the whole product.** In Shopify, tags belong to products, not to single variants. If only one option of a product should skip COD (for example, the engraved version), list that option as its own product. - **Spell the tag exactly.** Shopify says tags aren't case-sensitive, but `no-cod`, `no cod` and `nocod` are three different tags. Use the exact tag your app expects. - **One tagged product affects the whole order.** A payment method applies to the whole checkout, not to single items. If the cart holds a tagged ring and an untagged phone case, COD is hidden for the whole checkout. - **Removing the tag brings COD back** on the next checkout that includes the product, unless another rule hides it. - **Tag new products as you add them.** A product added next month won't be covered until it has the tag. Tell shoppers early. A short line on the product page, such as "Card payment only for this item", avoids a surprise at checkout. If you also show it in Arabic, «الدفع بالبطاقة فقط لهذا المنتج» means the same thing. ## How do you test it? Test with draft orders, because a draft order's checkout link runs payment customizations like a normal checkout. Inside the Shopify admin they don't run. 1. In your Shopify admin, go to **Orders > Drafts** and select **Create order**. 2. Add a product tagged `no-cod` and a test customer. 3. Select **Share**, then **Copy link**, and open the link in a private browser window. 4. Go to the payment step. COD should be missing. 5. Repeat with a draft order that has only untagged products. COD should appear. 6. Repeat with a mix of tagged and untagged products. COD should be missing. For a full checklist, see [how to test checkout payment rules with draft orders](/guides/test-payment-rules-draft-orders/). To compare this with other ways of limiting COD, read [how to hide a payment method on Shopify](/guides/hide-payment-method-shopify/). Sources: - Shopify.dev: Payment customization Function API: https://shopify.dev/docs/api/functions/latest/payment-customization - Shopify Help Center: Checkout Blocks payment method customizations: https://help.shopify.com/en/manual/checkout-settings/checkout-blocks/customizations/payment-methods - Shopify Help Center: Creating and using tags: https://help.shopify.com/en/manual/shopify-admin/productivity-tools/using-tags - Shopify Help Center: Searching and filtering products: https://help.shopify.com/en/manual/products/searching-filtering - Shopify Help Center: Bulk actions: https://help.shopify.com/en/manual/shopify-admin/productivity-tools/bulk-actions - Shopify Help Center: Sending draft order invoices: https://help.shopify.com/en/manual/fulfillment/managing-orders/create-orders/send-draft --- # How to block COD for specific customers with tags URL: https://khaleejicod.com/guides/block-cod-for-customers/ Updated: 2026-10-26 Short answer: Add a tag such as cod-refused to the customer's profile in Shopify and use a payment rule that hides Cash on Delivery for tagged customers. The rule only sees the tag when Shopify knows who is checking out: a signed-in customer, or a draft order assigned to them. To stop one customer from choosing Cash on Delivery, add a tag such as `cod-refused` to their customer profile in Shopify, then use a payment rule that hides COD for customers with that tag. They can still buy from you and pay online. There is one limit to plan around: the rule can only read the tag when Shopify knows who is checking out. That means a signed-in customer, or a draft order you assigned to them. A shopper who checks out as a guest carries no tags, even if they have refused orders before. ## Why block COD for one customer? When a customer refuses COD deliveries again and again, each refusal costs you the trip out and the trip back. Blocking COD for that customer is gentler than blocking them from your store: they can still order with a card, Apple Pay or any other online method you offer. Before you tag anyone, check that the pattern is real. [How to spot repeat refusers in your Shopify orders](/guides/spot-repeat-cod-refusers/) explains what to look for. ## How do you add a tag to a customer in Shopify? For one customer: 1. From your Shopify admin, go to **Customers** and open the customer's profile. 2. In the **Tags** section, type `cod-refused`, or pick it from the list once you have used it. 3. Click **Save**. For several customers at once (on desktop): 1. From your Shopify admin, go to **Customers**. 2. Select the customers you want to tag. 3. Click the horizontal menu icon, then click **Add tags**. 4. Choose the tag and click **Save**. Shopify's help pages say a few things about tags that matter here: - Tags aren't case sensitive, so `COD-Refused` and `cod-refused` are the same tag. - Use only letters, numbers and hyphens. Other characters can make items drop out of search results. - A customer can have up to 250 tags, so a COD tag won't crowd out the ones you already use. ## Which tag should you use: cod-refused or cod-blocked? Using two tags lets you remember why a customer lost COD: | Tag | Use it when | |---|---| | `cod-refused` | The customer refused or didn't accept a COD delivery. | | `cod-blocked` | You blocked COD for another reason, for example a fake order. | Khaleeji COD hides COD for either tag, and its refuser scan suggests customers to tag `cod-refused` (nothing is tagged until you confirm). If you use another tool, check which tag names it reads before you start tagging. ## Why can't a tag rule catch guest checkouts? A payment rule runs while the shopper is on your checkout. At that moment it can only see a customer's tags if the checkout is linked to a customer record. That happens in two cases: - The shopper is signed in to their customer account. - You created a draft order, assigned it to the customer, and sent them its checkout link. In a guest checkout, no customer record is attached while the shopper chooses how to pay, so COD still shows. Don't count on the shopper typing the same email or phone number as a tagged customer to change that: test it on your own store before you rely on it. Shopify does create or update a customer profile once the order is placed, which is why you can tag a guest afterwards. The tag then helps only on a later checkout where that customer is identified. You can narrow this gap in two ways: - Pair the tag with rules that don't need to know who the customer is. A cart limit applies to everyone ([how to hide COD above a cart total](/guides/hide-cod-above-cart-total/)). A first-order rule that treats every guest as a new customer also covers a repeat refuser who checks out as a guest with a large cart ([how to hide COD on large first orders](/guides/hide-cod-first-orders/)). - Give regular customers a reason to sign in. Shopify fills in a signed-in customer's saved details at checkout, so they type less. ## How do you see everyone you have blocked? Shopify filters customers by tag through customer segments. Go to **Customers**, filter by **Tagged with**, enter `cod-refused`, and save the filter as a segment. Do the same for `cod-blocked`. You now have a list to review, without searching customer by customer. ## When should you remove the tag? One refused delivery doesn't always mean a bad customer. The courier may have called a wrong number, the address may have been incomplete, or the customer may have been travelling. Some habits that keep the list fair: - Add a note to the customer's profile saying why and when you added the tag. In Shopify, customer notes are visible to your staff only. - Wait for a pattern before tagging (for example, two refusals), unless the order was clearly fake. - Look through your tagged customers every few months. If someone has paid online without problems since, consider removing the tag. - Explain the rule in your COD policy, so a customer who asks why COD is missing gets a clear answer. To remove a tag, open the customer's profile, hover over the tag, click the **x**, and click **Save**. COD shows for them again at their next checkout, unless another rule hides it. ## How do you test a customer tag rule? 1. Create a test customer and tag them `cod-refused`. 2. Create a draft order for that customer and open its checkout link. 3. Go to the payment step. COD should be missing, and your online methods should still be there. 4. Remove the tag, open the link again in a fresh browser window, and check that COD is back. Test on the checkout link, not inside the admin. Shopify doesn't run payment customizations when you collect payment for a draft order in the admin, so what you see there doesn't reflect your rules. The full method is in [how to test checkout payment rules with draft orders](/guides/test-payment-rules-draft-orders/). Sources: - Shopify Help Center: Creating and using tags: https://help.shopify.com/en/manual/shopify-admin/productivity-tools/using-tags - Shopify Help Center: Managing customers: https://help.shopify.com/en/manual/customers/manage-customers - Shopify Help Center: Customer accounts: https://help.shopify.com/en/manual/customers/customer-accounts - Shopify.dev: Payment customization Function API: https://shopify.dev/docs/api/functions/latest/payment-customization --- # How to limit COD by emirate, region or city URL: https://khaleejicod.com/guides/limit-cod-by-emirate-or-city/ Updated: 2026-10-26 Short answer: In the GCC, Shopify's checkout asks for a region only in the UAE (emirate) and Kuwait (governorate), so region rules can work only there. For Saudi Arabia, Qatar, Bahrain and Oman, and for places smaller than a region, block city names in every English and Arabic spelling. You can limit COD by place in two ways. Where Shopify's checkout asks shoppers to pick a region, block region codes. In the GCC that means the UAE (emirates) and Kuwait (governorates). Everywhere else, and for places smaller than a region, block city names. Region codes are exact, because shoppers pick the region from a list. The city is a free-text field, so the same place can arrive spelled several ways, and you need to list each spelling, in English and in Arabic. ## Which GCC countries have regions in Shopify's address form? Shopify publishes the address data its checkout uses. For the six GCC countries it shows: | Country | Region field at checkout | What you can block | |---|---|---| | United Arab Emirates | Emirate | Region codes or cities | | Kuwait | Governorate | Region codes (test first, see below) or cities | | Saudi Arabia | None (city, optional postal code) | Cities | | Qatar | None (city) | Cities | | Bahrain | None (city, optional postal code) | Cities | | Oman | None (city, postal code) | Cities | If you sell to Saudi Arabia, Qatar, Bahrain or Oman, a region rule can't match, because those addresses have no region in them. Use cities there. ## What are the region codes for the UAE emirates? Shopify stores each emirate as a two-letter code. A payment rule reads that code, together with the country code, from the shipping address. Written with the country in front, which is the format Khaleeji COD uses, the codes look like this: | Emirate | Arabic name | Shopify code | Country-region code | |---|---|---|---| | Abu Dhabi | «أبو ظبي» | AZ | AE-AZ | | Ajman | «عجمان» | AJ | AE-AJ | | Dubai | «دبي» | DU | AE-DU | | Fujairah | «الفجيرة» | FU | AE-FU | | Ras Al Khaimah | «رأس الخيمة» | RK | AE-RK | | Sharjah | «الشارقة» | SH | AE-SH | | Umm Al Quwain | «أم القيوين» | UQ | AE-UQ | For more on COD in the UAE, see [cash on delivery in the UAE](/guides/cash-on-delivery-uae/). ## What are the region codes for Kuwait? | Governorate | Shopify code | |---|---| | Al Ahmadi | KW-AH | | Al Asimah (Capital) | KW-KU | | Al Farwaniyah | KW-FA | | Al Jahra | KW-JA | | Hawalli | KW-HA | | Mubarak Al-Kabeer | KW-MU | > **Note:** For Kuwait, Shopify's code already includes the country. Al Ahmadi is stored as > `KW-AH`, not `AH`. A tool that puts the country in front of Shopify's code, as in the UAE > format above, would look for `KW-KW-AH` and might never match. Don't rely on a Kuwait region > rule until you have tested it on a Kuwait checkout. Until then, block Kuwait city or area > names instead. ## How can you see which code Shopify saved on an order? Export a few orders (from **Orders**, click **Export**) and open the CSV: - **Shipping Province** holds the region code, and **Shipping Province Name** holds its name. - **Shipping City** shows the city exactly as it was saved on the order, so it gives you the spellings your shoppers really use. To see which regions your cancelled orders went to, filter **Orders** by **Order status** (**Canceled**) and **Destination** (a specific state or province). Your own history is a better guide than a hunch about a place. ## When should you use a city instead of a region? Use a region when the whole emirate or governorate is a problem for you, for example when your courier charges more to deliver there, or your cancelled orders show more refusals there. Use a city when the problem is one part of a region. An emirate can be large. Al Ain, for example, is in the Abu Dhabi emirate, so blocking `AE-AZ` would also block Abu Dhabi city. Blocking the city "Al Ain" keeps COD for the rest of the emirate. > **Example:** say your cancelled COD orders cluster in Fujairah and in Al Ain. You could block the > region `AE-FU` and the city "Al Ain", and keep COD everywhere else. The places here are only an > example; choose yours from your own orders. ## How do city names match? A city rule compares the city on the shipping address with your list. In Khaleeji COD, the match is exact but ignores capital letters, and you can list names in English or Arabic. So "al ain" matches the entry "Al Ain", but "Alain", "Al-Ain" and «العين» each need their own entry. ## Which spellings should you add? Start from the **Shipping City** column of your export, then add the variants you expect. Some examples to check against your own orders: | City | English spellings | Arabic spellings | |---|---|---| | Al Ain | Al Ain, Al-Ain, Alain | «العين» | | Abu Dhabi | Abu Dhabi, Abudhabi | «أبو ظبي», «أبوظبي» | | Ras Al Khaimah | Ras Al Khaimah, Ras al-Khaimah, RAK | «رأس الخيمة», «راس الخيمة» | | Jeddah | Jeddah, Jedda, Jiddah | «جدة», «جده» | Arabic spellings vary in small ways that an exact match will notice: - «أ» with a hamza or a plain «ا» at the start of a word: «أبو ظبي» or «ابو ظبي». - «ة» or «ه» at the end of a word: «جدة» or «جده». - A space or no space between words: «أبو ظبي» or «أبوظبي». - Extra words, such as «مدينة العين» ("Al Ain city"). A city list can also block more than you meant. If two places share a name, or shoppers often type a district instead of their city, look at a sample of real orders before you switch the rule on. ## How do you test a region or city rule? Create a draft order for a test customer whose shipping address is in the blocked emirate or city, open the draft's checkout link, and go to the payment step. COD should be gone. Change the address to a place you haven't blocked and COD should come back, unless another rule hides it. The steps are in [how to test checkout payment rules with draft orders](/guides/test-payment-rules-draft-orders/). If you sell to more than one GCC country, see [one Shopify store, six GCC countries](/guides/gcc-cod-rules-per-country/) for how region and city rules differ per market. Sources: - Shopify worldwide address data: United Arab Emirates (AE.yml): https://github.com/Shopify/worldwide/blob/main/data/regions/AE.yml - Shopify worldwide address data: Kuwait (KW.yml): https://github.com/Shopify/worldwide/blob/main/data/regions/KW.yml - Shopify worldwide address data: all regions: https://github.com/Shopify/worldwide/tree/main/data/regions - Shopify Help Center: Exporting orders: https://help.shopify.com/en/manual/fulfillment/managing-orders/exporting-orders - Shopify Help Center: Filtering orders: https://help.shopify.com/en/manual/fulfillment/managing-orders/viewing-orders/filtering-orders - Shopify.dev: Payment customization Function API: https://shopify.dev/docs/api/functions/latest/payment-customization --- # How to hide COD on large first orders URL: https://khaleejicod.com/guides/hide-cod-first-orders/ Updated: 2026-10-26 Short answer: Set a first-order amount: when a new customer's cart is above it, COD is hidden and they pay online; at or below it, COD stays. At checkout, "first order" means a guest or a signed-in customer with no previous orders, so returning customers who check out as guests also count as new. To hide COD on large first orders, set a first-order amount. When a new customer's cart is above that amount, COD is hidden and they pay online. When the cart is at or below it, COD stays, so new customers can still try your store with a small cash order. At checkout, "first order" means a guest checkout or a signed-in customer with no previous orders. Returning customers who check out as guests count as new, so choose the amount with that in mind. ## Why are first orders riskier with COD? A returning customer has already accepted and paid for a delivery from you. A first order comes with no such history. The shopper has never dealt with your store, may have ordered on impulse from an ad, and loses nothing by refusing at the door. A fake order placed under a made-up name has no history behind it either. New customers are still where your regulars come from. The goal is to cap how much you risk on someone you don't know yet, while keeping COD open for small first orders. ## What counts as a "first order"? A payment rule can only see a customer's order history when the checkout is linked to that customer. Shopify then gives the rule the total number of orders the customer has made at your store. A guest checkout has no customer attached, so there is no history to read, and the rule treats it as a first order. | Who is checking out | Counted as a first order? | |---|---| | Signed-in customer with no previous orders | Yes | | Signed-in customer with previous orders | No | | Guest, even one who has ordered before | Yes | | Draft order assigned to a customer with previous orders | No | This is how Khaleeji COD defines a first order. When the rule can't tell who the shopper is, it treats them as new. The guest row has a practical effect. If many of your regulars check out as guests, a first-order rule also applies to them when their cart is above the amount. You can set the amount higher, or encourage regulars to sign in: Shopify fills in a signed-in customer's saved details at checkout, which saves them typing. ## How is a first-order limit different from a cart limit? A cart limit hides COD above an amount for everyone. A first-order limit applies only to new customers, so it can be much lower. Used together, they work like this: | Order | COD shown? | |---|---| | First order below your first-order amount | Yes | | First order above your first-order amount | No | | Returning customer below your cart limit | Yes | | Any order above your cart limit | No | Khaleeji COD's GCC preset starts with 500 for first orders and 1,500 for any cart, in your store's currency (carts in other currencies are converted before comparing). Treat those numbers as a starting point and adjust them to your own orders. For the cart limit itself, see [how to hide COD above a cart total](/guides/hide-cod-above-cart-total/). ## How do you choose the amount? Use your own orders: 1. From your Shopify admin, go to **Orders** and filter by **Order status** (**Canceled**) with a **Date** range, such as the last 90 days. [How to find cancelled COD orders](/guides/find-cancelled-cod-orders/) shows how to keep only the COD ones. 2. Open each cancelled COD order. The order page's **Conversion summary** shows the customer's number of orders, for example "This is their 1st order". Shopify says these details can take up to 48 hours to appear. 3. Write down the total of each cancelled first order. Then look at the totals of first orders that were delivered and paid. 4. Pick an amount above most of your normal first orders and below the range where refused first orders start. > **Example:** your delivered first orders are mostly between AED 100 and AED 300, and most refused > first orders were above AED 400. A first-order amount of AED 350 keeps COD for typical first > orders and hides it for the larger ones. These figures are examples; replace them with your own. If you only have a few cancelled orders, start near your usual first-order total and look again after a month. A refusal usually costs you shipping both ways and more besides, so [what one refused COD order really costs](/guides/cost-of-a-refused-cod-order/) helps you judge how much risk a given amount carries. ## Why keep COD for small first orders? Hiding COD for every first order is simpler, but it asks every new shopper to pay by card before you have delivered anything. Some shoppers won't. A small cash order lets them try you, and after that first order they no longer count as new when they sign in at checkout. Tell shoppers about the limit before checkout, for example on your shipping or FAQ page: "Cash on Delivery is available on first orders up to AED 350." Then a shopper with a bigger cart isn't surprised when COD is missing. ## How do you test it? 1. Create a new test customer. A new customer has no orders. 2. Create a draft order for them with a total above your first-order amount, open its checkout link, and go to the payment step. COD should be hidden. 3. Lower the total below the amount and check again. COD should show, unless another rule hides it. 4. If you have a test customer with past orders, try the same large cart for them. COD should show as long as the cart is below your cart limit. Remember to use the checkout link: payment rules don't run when you collect payment for a draft order inside the admin. The full method is in [how to test checkout payment rules with draft orders](/guides/test-payment-rules-draft-orders/). Sources: - Shopify.dev: Payment customization Function API: https://shopify.dev/docs/api/functions/latest/payment-customization - Shopify Help Center: Customer accounts: https://help.shopify.com/en/manual/customers/customer-accounts - Shopify Help Center: Filtering orders: https://help.shopify.com/en/manual/fulfillment/managing-orders/viewing-orders/filtering-orders - Shopify Help Center: Viewing order conversion summary: https://help.shopify.com/en/manual/fulfillment/managing-orders/analytics/conversion-summary --- # How to find cancelled COD orders in Shopify admin URL: https://khaleejicod.com/guides/find-cancelled-cod-orders/ Updated: 2026-10-26 Short answer: In Orders, filter by Order status: Canceled and a date range, then save it as a view. Shopify's order filters don't include payment method, so export the list and filter the Payment Method column for your COD method's name, such as "Cash on Delivery (COD)". To find cancelled COD orders, go to **Orders** in your Shopify admin and filter by **Order status** (**Canceled**) and a date range. Shopify's order filters don't include payment method, so to keep only the COD orders, export the filtered list and filter the **Payment Method** column for your COD method's name. Save the filters as a view so you can open the same list again in one click. ## Step 1: Filter the order list 1. From your Shopify admin, go to **Orders**. 2. Add the **Order status** filter and choose **Canceled**. 3. Add the **Date** filter. You can pick a range such as the last 30 days, the last 90 days or the last 12 months, or set a **Custom** range. You can stack more filters on top. Two are useful for COD: - **Destination**, to see cancelled orders for one country, or one state or province such as a single emirate. - **App**, to tell online store orders apart from draft orders. ## Step 2: Save the filters as a view After you set the filters, click **Save** and give the view a name, for example "Cancelled orders". Next time, open the saved view instead of rebuilding the filters. ## Step 3: Keep only the COD orders The filter list covers order status, payment status, date, destination, tags and more, but not the payment method. Payment status doesn't help either: Shopify marks every order paid with a manual method as unpaid until you mark it as paid, so COD looks the same as any other manual method there. If you only have a handful of cancelled orders, open each one and check how it was paid. For more than a few, export them: 1. With your filters applied, click **Export**. 2. Choose which orders to export, for example the current page or orders by date. 3. Under **Export as**, choose a CSV format, then click **Export orders**. Shopify downloads small exports (up to 50 orders, or the current page) straight to your device. An export by date is emailed to you and the store owner. In the spreadsheet: - Filter the **Payment Method** column for your COD method's name. An order can have more than one payment method, so filter for cells that *contain* the name. - If you exported by date, you may get every order in that range, cancelled or not. Filter the **Canceled at** column to rows that have a date. ## What is COD called in your orders? The Payment Method column shows the name of the method the customer chose at checkout. Shopify reserves the name "Cash on Delivery (COD)" for its own COD option, and orders paid that way show that name. If you created your own manual method, your orders show that name instead, for example "Pay cash on delivery", or an Arabic name such as «الدفع عند الاستلام» ("payment on receipt"). Check a few recent COD orders to see the exact name. If you have changed the name over time, or offer more than one cash option, filter for every name. ## Which export columns help most? | Column | What it tells you | |---|---| | Name | The order number as it shows in your admin | | Email | The customer's email address | | Created at | When the customer placed the order | | Canceled at | When the order was cancelled | | Total | The order total | | Shipping City, Shipping Province | Where the order was going | | Payment Method | How the order was paid for | Sort by **Email** and repeat refusers stand out, because the same address appears on several cancelled COD orders. [How to spot repeat refusers](/guides/spot-repeat-cod-refusers/) covers what counts as a pattern, and [how to block COD for specific customers](/guides/block-cod-for-customers/) covers what to do next. Sorting by **Shipping City** or **Shipping Province** shows whether cancellations cluster in one place. ## Is every cancelled COD order a refusal? No. You may cancel an order because an item ran out, because the customer asked before it shipped, or because it looked fake. When you cancel an order, Shopify asks you to choose a **Reason for cancellation**. Choosing it with care, and adding a note to the order when the courier reports a refusal, makes your list easier to read later. [Fake, refused, failed](/guides/fake-refused-failed-cod-orders/) explains how to tell these apart. ## Why do apps only see the last 60 days? In your admin you can filter as far back as your store goes. Apps work under different rules. An app with Shopify's standard order permission (`read_orders`) can read orders created within the last 60 days. Older orders need an extra permission (`read_all_orders`), which apps built under a Shopify Partner organization have to request and get approved before they can use it. The 60 days count from when the order was placed, not when it was cancelled. An order placed 70 days ago and cancelled last week is outside that window. Khaleeji COD's refuser scan uses the standard permission. It looks at orders placed in the last 60 days that are now cancelled (up to 1,000 per scan), and counts an order as COD when its payment method name contains "cash on delivery" or «الدفع عند الاستلام», or is exactly "COD". Because the window moves, run the scan regularly. If your COD method has a different name, or you want history older than 60 days, use the export method above. Sources: - Shopify Help Center: Filtering orders: https://help.shopify.com/en/manual/fulfillment/managing-orders/viewing-orders/filtering-orders - Shopify Help Center: Exporting orders: https://help.shopify.com/en/manual/fulfillment/managing-orders/exporting-orders - Shopify Help Center: Canceling orders: https://help.shopify.com/en/manual/fulfillment/managing-orders/canceling-orders - Shopify Help Center: Manual payment methods: https://help.shopify.com/en/manual/payments/manual-payments - Shopify.dev: Shopify API access scopes: https://shopify.dev/docs/api/usage/access-scopes --- # How to test checkout payment rules with draft orders URL: https://khaleejicod.com/guides/test-payment-rules-draft-orders/ Updated: 2026-10-26 Short answer: Create a draft order with the cart, customer and address that should trigger your rule, copy its checkout link and open it in a private window. Payment customizations run on that checkout, but not when you collect payment for the draft inside the Shopify admin. The quickest way to test a payment rule is a draft order. Build a draft order with the cart, customer and shipping address that should trigger the rule, click **Share** > **Copy link**, open the link in a private browser window and go to the payment step. Payment customizations run on that checkout link. They don't run when you collect payment for the draft order inside the Shopify admin, so what you see on the admin's payment screen tells you nothing about your rules. ## Where do payment rules run? Shopify's documentation for payment customization Functions lists where they run. The parts that matter for testing: | Where | Do payment rules run? | |---|---| | Online store checkout | Yes | | Checkout link from a draft order | Yes | | Collecting payment for a draft order in the admin | No | | Shopify admin, POS, order editing | No | So a test only counts when you look at a real checkout page, as a shopper would. ## Why test with a draft order? A draft order lets you set up the exact situation a rule is about: - You choose the products, so you can build a cart just above or just below any amount. - You choose the customer, including one with a tag or with no previous orders, without signing in as them. - You set the shipping address, so you can test an emirate or a city. - Nothing becomes a real order unless you complete the checkout. ## How do you set up the test? 1. From your Shopify admin, go to **Orders > Drafts** and click **Create order**. 2. Add the products for your test. 3. In the **Customer** section, click **Search or create a customer**. Pick your test customer, or click **Create a new customer**, enter the details and click **Save customer**. Use a name you will recognise later, such as "COD Test", and a shipping address in the place you want to test. 4. Click **Save**. 5. Click **Share**, then **Copy link**. (You can also click **Send invoice**, which emails the checkout link. Send it only to an address you control.) 6. Open the link in a private or incognito window, so nothing saved in your normal browser affects the test. 7. Go through checkout to the payment step. Check whether COD is there, what it's called, and that your card and wallet options still show. Don't mark the draft order as paid while you test. Shopify warns that once a draft is marked as paid, the link in its invoice won't work. After each change (a tag, a product, the address), save the draft and open the link again in a new private window. ## What should you check for each rule? | Rule | Set up the draft order with | Expected result | |---|---|---| | Customer tag | A customer tagged `cod-refused` | COD hidden | | Cart total | A total above your limit, then below it | Hidden above, shown below | | First order | A new customer and a total above your first-order amount | COD hidden | | Product tag | A product tagged `no-cod` | COD hidden | | Region or city | A shipping address in a blocked emirate or city | COD hidden | | Rename | A cart that breaks no rule | COD shown with your new name | Test one rule at a time and keep everything else below its limit. A new test customer with a large cart, for example, can trip the first-order rule and the cart rule at once, and then you can't tell which one hid COD. ## How do you test the Arabic name? A payment rule can see the checkout language, which is how it shows an Arabic name to Arabic shoppers. Shopify shows the checkout in the customer's language once that language is published, so the simplest Arabic test is a normal checkout started from the Arabic version of your store: 1. Check that Arabic is published in **Settings > Languages**. 2. Open your store's Arabic address. Publishing a language adds a language code to your store's URLs, so the address looks something like `example.com/ar` (the exact form depends on how your markets and domains are set up). 3. Add a product to the cart and go to checkout. 4. At the payment step, check the Arabic COD name, for example «الدفع عند الاستلام». 5. Repeat from the English version of the store to check the English name. If the test also needs a known customer, for example for a tag rule, sign in with a test customer account before you check out. For setting up Arabic in the first place, see [how to offer an Arabic checkout on Shopify](/guides/arabic-checkout-shopify/). ## Why does my test look wrong? Check these first: - You checked inside the admin. Accepting payment for a draft order in the admin doesn't run payment rules. Use the checkout link. - The draft has no customer, or the wrong one. The tag rule needs the customer attached to the draft. Without a customer, the checkout counts as a guest, and the first-order rule treats a guest as a first order. - A different rule hid COD. Compare the cart total, the customer's order count and the address with every rule you have switched on. - The draft was marked as paid. Shopify says its invoice link won't work after that. - You reused an old tab. Open the link again in a fresh private window after each change. - Your COD method has an unusual name. A rule that looks for "Cash on Delivery" may not recognise a method you called something else. Khaleeji COD recognises common English and Arabic COD names. If yours is different, rename the method or email 9090mohammad123@gmail.com. ## What should you do after testing? Delete your test draft orders, or leave them: Shopify deletes draft orders created on or after April 1, 2025 after one year without activity. Try to stop at the payment step rather than placing the order. If you do complete a test checkout with COD and then cancel it, the order can show up as a cancelled COD order in your reports and refuser lists, so use a test customer you can recognise and leave out. For the rules you are testing, see [how to block COD for specific customers](/guides/block-cod-for-customers/) and [how to limit COD by emirate, region or city](/guides/limit-cod-by-emirate-or-city/). Sources: - Shopify.dev: Payment customization Function API: https://shopify.dev/docs/api/functions/latest/payment-customization - Shopify Help Center: Creating draft orders: https://help.shopify.com/en/manual/fulfillment/managing-orders/create-orders/create-draft - Shopify Help Center: Sending invoices for draft orders: https://help.shopify.com/en/manual/orders/create-orders/send-draft - Shopify Help Center: Draft orders and invoices: https://help.shopify.com/en/manual/fulfillment/managing-orders/create-orders - Shopify Help Center: Localization and translation: https://help.shopify.com/en/manual/international/localization-and-translation - Shopify Help Center: Managing your store's languages: https://help.shopify.com/en/manual/international/languages/manage-languages --- # How to offer an Arabic checkout on Shopify URL: https://khaleejicod.com/guides/arabic-checkout-shopify/ Updated: 2026-10-26 Short answer: Add Arabic in Settings > Languages, translate your content, then publish it. Shopify shows the checkout in the language the shopper browses in, but Arabic isn't on Shopify's list of languages with ready-made checkout translations, so check every checkout screen in Arabic before you publish. To offer an Arabic checkout, add Arabic as a language in **Settings > Languages**, translate your store, publish the language, and give shoppers a way to reach it. Shopify shows the checkout in the same language the shopper uses to browse your store, so an Arabic storefront leads to an Arabic checkout. One thing to plan for: Arabic is not on Shopify's list of languages that come with ready-made checkout translations. Check every checkout screen in Arabic and fill the gaps before you publish. ## What do shoppers see when your store has Arabic? Once Arabic is published and translated: - The storefront and checkout appear in Arabic for shoppers who choose it, or who are sent to it automatically by their location and browser language. - Order emails go out in the language the shopper ordered in, as long as you have translations for those emails. - Arabic pages get their own web addresses. If your domain is `example.com`, Shopify adds the language code, so Arabic pages sit under `example.com/ar`. Text you typed yourself, such as shipping rate names, and text that comes from apps are easy to miss. Check them in Arabic too. ## Step 1: Check that your theme supports Arabic and right-to-left text Arabic reads right to left, so the theme has to flip its layout. Shopify says the latest versions of its Horizon family of themes support right-to-left languages such as Arabic. For any other theme, ask the developer to confirm right-to-left support before you start. Shopify's Theme Store can be filtered by **Features > Right-to-left**. Your theme also needs a language selector so shoppers can switch. Most Shopify themes include one that you turn on in the theme settings. ## Step 2: Add Arabic as a store language 1. From your Shopify admin, go to **Settings > Languages**. 2. Click **Add language**. 3. Select Arabic from the menu, then click **Next**. 4. Turn on each domain where Arabic should be available, then click **Done**. Adding a language doesn't show it to shoppers yet. That happens when you publish it in Step 4. Stores on the Basic, Grow, Shopify and Advanced plans can have up to 20 languages, and Shopify Plus stores up to 30, so adding Arabic next to English won't hit a limit. ## Step 3: Translate your store, including the checkout Shopify's own app for this is **Translate & Adapt**. You can type translations yourself or use Shopify's automatic translations. Automatic translation into Arabic has been available in Translate & Adapt since March 27, 2024. You can also import translations from a CSV file or use a compatible translation app. Work through the content in this order, because the checkout and order emails are where a half-translated store hurts most: 1. **Checkout text.** Shopify's checkout has ready-made translations for 33 languages, and Arabic is not one of them. Shopify's help says that if the language you want isn't available, you can create the translations yourself, and points to a CSV import or a translation app for this. Whichever tool you use, find the checkout text in it and fill it in. 2. **Email notifications.** Go to **Settings > Notifications**, select a notification, click **Localize**, add the Arabic text and save. Start with the order confirmation. 3. **Products, collections, pages and policies.** Your product titles and descriptions, plus your shipping and return policies. 4. **Theme text and menus.** Buttons, the header and footer menus, and announcement bars. A few things can't be translated. Product tags stay in your default language, and the word "products" in product URLs stays as it is. > **Note:** Automatic translation is a fast first draft. Ask a native Arabic speaker to read the > checkout, the order confirmation email and your COD wording before you publish. A clumsy > button label at the payment step costs more than a clumsy line on an About page. If you later change the checkout wording in your default language (in **Settings > Checkout**, under **Checkout language**), update the Arabic translation at the same time. Shopify reminds you to keep translations in step with the default text. ## Step 4: Publish Arabic 1. From your Shopify admin, go to **Settings > Languages**. 2. In the languages table, click the **…** icon next to Arabic. 3. Click **Publish**. If Shopify asks you to confirm because there are no translations yet, stop and go back to Step 3. Shoppers who choose an untranslated language see your default text, which looks broken on a page that is supposed to be in Arabic. ## Step 5: Decide which markets get Arabic, and on which web address In Shopify, languages are assigned to domains, and each market uses a domain. A language assigned to a domain is available in every market that uses that domain. If you want different languages in different markets (for example Arabic and English for Saudi Arabia, English only for another market), you need international domains, which you set up for each market in **Markets**. | Option | Example | When it fits | |---|---|---| | Subfolder | `yourstore.com/ar` | One domain for everything. Simplest to run. | | Subdomain | `ar.yourstore.com` | You want a separate address on the same domain. | | Separate domain | `yourstore.sa` | You own a country domain for one market. | Shopify redirects shoppers to the domain and language that match their location, using their IP address and browser language. A shopper who picks a language in the selector keeps that choice on later visits. Shopify also adds hreflang tags and includes every published language in your sitemap, which helps search engines find the Arabic version of each page. If you sell to several GCC countries, read [different COD rules per GCC market](/guides/gcc-cod-rules-per-country/) as well, because the market setup you choose here also shapes your payment rules. ## Step 6: Test an Arabic checkout before your shoppers do Shopify's help pages say little about how the checkout handles right-to-left text, so check it yourself: 1. Switch the storefront to Arabic, add a product to the cart and go to checkout. Do it on a phone as well as a computer. 2. Look for English words left behind: field labels, buttons, shipping method names and payment method names. 3. Submit the form with a field empty to see the error messages. These are easy to miss. 4. Check that text, prices and the phone and address fields line up from the right. 5. Place a test order and read the Arabic order confirmation email. To test payment options for a particular customer, use the steps in [how to test checkout payment rules with draft orders](/guides/test-payment-rules-draft-orders/). ## What should Cash on Delivery be called on the Arabic checkout? Look closely at the payment step. If your cash on delivery option still shows an English name on the Arabic checkout, it stands out at the moment the shopper decides how to pay. A common Arabic wording is «الدفع عند الاستلام» ("payment on receipt"). See [what to call Cash on Delivery in Arabic](/guides/cash-on-delivery-in-arabic/) for the options. A single manual payment method has one name for every shopper. To show an Arabic name on the Arabic checkout and an English name everywhere else, you need a payment customization that renames the method by checkout language. Khaleeji COD does this: Arabic checkouts see «الدفع عند الاستلام» and everyone else sees "Cash on Delivery". For the other ways to change the name, read [how to rename Cash on Delivery at Shopify checkout](/guides/rename-cash-on-delivery-shopify/). Sources: - Shopify Help Center: Managing your store's languages: https://help.shopify.com/en/manual/international/languages/manage-languages - Shopify Help Center: Requirements and considerations for selling in multiple languages: https://help.shopify.com/en/manual/international/languages/requirements - Shopify Help Center: Checkout and notification translations: https://help.shopify.com/en/manual/international/languages/checkout-and-notifications - Shopify Help Center: Translating your checkout: https://help.shopify.com/en/manual/checkout-settings/checkout-language - Shopify Help Center: Domains and languages for markets: https://help.shopify.com/en/manual/markets/customizations/domains-and-languages - Shopify Changelog: Support for auto-translating Arabic and Hebrew in Translate & Adapt (March 27, 2024): https://changelog.shopify.com/posts/support-for-auto-translating-arabic-and-hebrew-in-translate-adapt - Shopify Help Center: Localization and translation: https://help.shopify.com/en/manual/international/languages --- # What to call Cash on Delivery in Arabic URL: https://khaleejicod.com/guides/cash-on-delivery-in-arabic/ Updated: 2026-10-26 Short answer: «الدفع عند الاستلام» ("payment on receipt") is the wording Shopify's own Arabic help pages use for COD. «الدفع عند التسليم» ("payment on handover") and «الدفع نقدًا عند الاستلام» ("payment in cash on receipt") are two alternatives. Pick one, use it everywhere, and have a native speaker check it. «الدفع عند الاستلام» ("payment on receipt") is a safe default for a GCC store. It's the wording Shopify's own Arabic help pages use for the built-in cash on delivery method, and it describes the moment from the shopper's side: you pay when you receive your order. «الدفع عند التسليم» and «الدفع نقدًا عند الاستلام» say much the same with a different focus. Whichever you pick, use the same words everywhere, and ask a native Arabic speaker who knows your customers to check it. ## What do the three wordings mean? All three use «الدفع» ("payment" or "paying") and «عند» ("at the time of" or "upon"). The difference is the last word or two. | Arabic | Literal meaning | What it stresses | |---|---|---| | «الدفع عند الاستلام» | Payment on receipt | The shopper receiving the order | | «الدفع عند التسليم» | Payment on handover | The seller or courier handing it over | | «الدفع نقدًا عند الاستلام» | Payment in cash on receipt | That the payment is in cash | In more detail: - **«الاستلام»** means receiving or taking delivery of something. It's the act the shopper does, so the phrase reads as "you pay when you get it". - **«التسليم»** means handing over or delivering. It's the act the courier does, so the phrase is closer to a word-for-word "pay on delivery" and looks at the moment from the seller's side. - **«نقدًا»** means "in cash". Adding it makes the name the closest match to the English "Cash on Delivery", and it tells the shopper exactly what to have ready. ## Which one should you choose? Start from what actually happens at the door: - **Your courier takes cash only:** «الدفع عند الاستلام» or «الدفع نقدًا عند الاستلام». The second is longer but leaves no doubt. - **Your courier also takes cards at the door:** avoid «نقدًا», because "in cash" would then be wrong. «الدفع عند الاستلام» covers both. If you want to say so, a longer label such as «الدفع نقدًا أو بالبطاقة عند الاستلام» ("pay in cash or by card on receipt") spells it out. - **Your brand already uses «الدفع عند التسليم»:** keep it. It's correct Arabic, and changing a name your shoppers already know can confuse them. Informal words such as «كاش» ("cash") turn up in ads and chats. On a checkout, we suggest standard Arabic, which Arabic speakers from any country can read. These notes explain the words. They don't replace a native speaker who knows your audience. A store selling mostly to Gulf nationals and one selling to Arabic-speaking residents from other countries may prefer different wording, so check your choice before you publish it. ## Why use one name everywhere? Shoppers meet the payment method several times: on product pages, in your FAQ or [COD policy page](/guides/cod-policy-template/), at checkout, in the order confirmation and when the courier calls. If each place uses different words, a shopper can wonder whether they're the same option. There's also a technical reason. A reader barely notices small spelling differences. To software, they're different text: - **Vowel marks.** «نقدًا» (written with the vowel mark called tanween) and «نقدا» (without it) are the same word to a reader but don't match in an exact text search. - **Hamza on the alif.** The standard spelling is «الاستلام», without a hamza. You'll also see «الإستلام», written with one, and to software that's a different word. - **Extra words.** «الدفع عند الاستلام» and «الدفع عند الاستلام (COD)» are different names. Order filters, exports and apps that find the COD method by its name all compare text. If you change the spelling of your COD method, check that your apps and saved order views still recognise it. ## Should you mix English and Arabic on the label? On an Arabic checkout, an English label like "Cash on Delivery (COD)" stands out as the one option the shopper has to read in another language. "COD" is jargon even in English. Shopify's Arabic help pages write the built-in method as «الدفع عند الاستلام (COD)», keeping the English abbreviation in brackets. On your own checkout, the Arabic words alone are enough. If you do keep Latin letters inside Arabic text, check the result on a phone. The W3C explains that punctuation such as a comma or exclamation mark, placed between right-to-left and left-to-right text, can end up in an unexpected place. Brackets around "COD" are worth checking for the same reason. The simple answer is one name per language: Arabic for shoppers on your Arabic checkout, English for everyone else. ## How do you show the Arabic name on a Shopify checkout? Shopify shows the checkout in the same language the shopper uses to browse your store. What the payment method is called depends on how you set it up: 1. **A custom manual payment method with an Arabic name.** In **Settings > Payments**, under **Manual payment methods**, select **Create custom payment method** and type the Arabic name. Shoppers see exactly the name you typed, whatever language they use. This suits a store whose checkout is only in Arabic. 2. **A payment customization that renames COD per language.** Shopify's payment customization Functions can rename a payment method during checkout, and they receive the checkout language. So an app can show the Arabic name only on the Arabic checkout and an English name on the English one. See [how to rename Cash on Delivery at Shopify checkout](/guides/rename-cash-on-delivery-shopify/) for both options step by step. Khaleeji COD uses the second approach. With the rename switched on, shoppers on an Arabic checkout see «الدفع عند الاستلام» and everyone else sees "Cash on Delivery", and you can edit both. It finds COD under any of the three wordings in this guide («نقدا» written without the vowel mark). It doesn't recognise other spellings or wordings, such as «نقدًا» with the vowel mark or «الإستلام» with a hamza, and it has no setting for extra names. If your method uses one, give the method one of the recognised names, or email 9090mohammad123@gmail.com. If you haven't added Arabic to your store yet, start with [how to offer an Arabic checkout on Shopify](/guides/arabic-checkout-shopify/). ## How do you check the name? 1. Create a draft order for a test customer and open its checkout link. See [how to test checkout payment rules with draft orders](/guides/test-payment-rules-draft-orders/). 2. Switch the store to Arabic and go to the payment step. Check the name on a phone as well as a computer. 3. Switch back to English and check that English shoppers see the English name. 4. Read the order confirmation in Arabic too. A payment customization changes the name shown during checkout, so later messages may still use the method's original name. If they do, adjust the wording of those messages to match. Sources: - Shopify Help Center (Arabic): Manual payment methods: https://help.shopify.com/ar/manual/payments/manual-payments - Shopify Help Center: Manual payment methods: https://help.shopify.com/en/manual/payments/manual-payments - Shopify Help Center: Translating checkout and email notifications: https://help.shopify.com/en/manual/international/languages/checkout-and-notifications - Shopify.dev: Payment customization Function API: https://shopify.dev/docs/api/functions/latest/payment-customization - W3C: Unicode Bidirectional Algorithm basics: https://www.w3.org/International/articles/inline-bidi-markup/uba-basics --- # A COD policy page template for GCC stores, in English and Arabic URL: https://khaleejicod.com/guides/cod-policy-template/ Updated: 2026-10-26 Short answer: A COD policy tells shoppers where cash on delivery is offered, when it isn't, how to pay the courier and what happens if an order is refused. Copy the English and Arabic template below, fill in your details, have a native Arabic speaker check it, and link it from your checkout footer and FAQ. A COD policy is a short page that answers four questions before the shopper orders: where can I pay cash on delivery, when is it not offered, how do I pay the courier, and what happens if I refuse the order. Below is a fill-in template in English and Arabic. Replace everything in [square brackets], delete the lines that don't apply to your store, and publish it where shoppers will see it. > **Note:** This template is a starting point for your own wording. It is not legal advice and > doesn't claim to meet the rules of any country. If you are unsure what you may say about > refusals, cancellations or refunds where you sell, ask a local lawyer. ## Why have a COD policy at all? - A shopper who knew the total, the delivery time and the confirmation step is less likely to be caught off guard when the courier calls. - Your team can send one link on WhatsApp instead of retyping the rules. - If you hide COD for big carts or first orders, the policy explains why, so a shopper who doesn't see it at checkout doesn't think something is broken. ## What should a COD policy cover? - Where COD is available: countries, emirates, regions or cities. - When it isn't: order amount limits, first orders, products you only sell prepaid. - How to pay the courier: cash only or card too, exact amount, any extra charge. - How you confirm the order, and what happens if you can't reach the shopper. - How long delivery takes. - How to change or cancel before the order ships. - What happens if an order is refused at the door. - Returns after payment, and how to contact you. ## The template in English **Cash on delivery (COD) policy** **Where we offer cash on delivery** You can pay cash on delivery for orders delivered to [countries, emirates or cities]. For other addresses, please pay online by [card / Apple Pay / other methods you accept]. **When cash on delivery is not available** Cash on delivery is not shown at checkout when: - your order total is above [amount and currency]; - it is your first order with us and the total is above [amount and currency]; - your order includes [custom-made / personalised / perishable] items; - a previous cash on delivery order on your account was refused at delivery. You can still place these orders and pay online. **How to pay the courier** Please have the exact amount ready in [currency]. [Our courier can also take card payments at the door.] The amount to pay is the order total in your confirmation message, including delivery. [There is no extra charge for paying cash on delivery.] **Order confirmation** We will [call you / send you a WhatsApp message / send you an SMS] on the phone number in your order to confirm it before we ship. If we can't reach you within [number] days, we may cancel the order. **Delivery time** We deliver within [number] working days to [area]. The courier will contact you before arriving. **Changing or cancelling your order** You can change or cancel a cash on delivery order free of charge before it ships. Contact us on [WhatsApp / phone / email]. **If you refuse the order at delivery** A refused cash on delivery order costs us delivery in both directions. If an order is refused without telling us first, we may offer only online payment on your future orders. If something is wrong with your order, please contact us before refusing it so we can help. **Returns after you pay** Once you have paid for and received your order, our [return policy] applies. **Contact us** [Phone / WhatsApp number] · [email] · [days and hours, with time zone] ## The template in Arabic > **Note:** The Arabic text is written in Modern Standard Arabic (الفصحى). Ask a native Arabic > speaker to review it for your audience before you publish, and keep the amounts and rules > identical to the English version. **سياسة الدفع عند الاستلام** **أين نوفّر الدفع عند الاستلام** يمكنك الدفع عند الاستلام للطلبات التي تُوصَّل إلى [الدول أو الإمارات أو المدن]. للعناوين الأخرى، يُرجى الدفع إلكترونيًا عبر [البطاقة / Apple Pay / طرق الدفع الأخرى المتاحة]. **متى لا يتوفر الدفع عند الاستلام** لا يظهر خيار الدفع عند الاستلام في صفحة إتمام الطلب في الحالات التالية: - إذا تجاوز إجمالي طلبك [المبلغ والعملة]؛ - إذا كان هذا طلبك الأول لدينا وتجاوز إجماليه [المبلغ والعملة]؛ - إذا احتوى طلبك على منتجات [مصنوعة حسب الطلب / مخصّصة / سريعة التلف]؛ - إذا كان في حسابك طلب سابق بالدفع عند الاستلام رُفض استلامه. يمكنك في هذه الحالات إتمام الطلب والدفع إلكترونيًا. **كيف تدفع لمندوب التوصيل** يُرجى تجهيز المبلغ المطلوب بالضبط بـ[العملة]. [يمكن لمندوب التوصيل أيضًا قبول الدفع بالبطاقة عند الباب.] المبلغ المطلوب هو إجمالي الطلب المذكور في رسالة تأكيد الطلب، شاملًا رسوم التوصيل. [لا توجد رسوم إضافية على الدفع عند الاستلام.] **تأكيد الطلب** سنتواصل معك [باتصال هاتفي / برسالة واتساب / برسالة نصية] على رقم الهاتف المسجّل في طلبك لتأكيده قبل الشحن. إذا لم نتمكن من التواصل معك خلال [عدد الأيام]، فقد نُلغي الطلب. **مدة التوصيل** نوصّل الطلبات خلال [عدد أيام العمل] إلى [المنطقة]. سيتواصل معك مندوب التوصيل قبل وصوله. **تعديل الطلب أو إلغاؤه** يمكنك تعديل طلب الدفع عند الاستلام أو إلغاؤه مجانًا قبل شحنه. تواصل معنا عبر [واتساب / الهاتف / البريد الإلكتروني]. **إذا رفضت استلام الطلب** رفض استلام طلب الدفع عند الاستلام يكلّفنا رسوم التوصيل ذهابًا وإيابًا. إذا رُفض طلب عند التسليم دون إبلاغنا مسبقًا، فقد نقصر طلباتك القادمة على الدفع الإلكتروني فقط. إذا كانت هناك مشكلة في طلبك، فيُرجى التواصل معنا قبل رفضه حتى نتمكن من مساعدتك. **الإرجاع بعد الدفع** بعد دفع قيمة طلبك واستلامه، تنطبق [سياسة الإرجاع] الخاصة بنا. **تواصل معنا** [رقم الهاتف / واتساب] · [البريد الإلكتروني] · [أيام وساعات العمل مع المنطقة الزمنية] ## Where should you publish the policy? Shopify gives you two places for it. You can use one or both. **Option 1: Add it to your shipping policy.** Go to **Settings > Policies** and paste the COD section into your shipping policy. Shopify automatically links your store policies in the footer of the checkout pages, so the text is one tap away at the moment the shopper chooses how to pay. In Shopify's free themes, product pages can also link to the shipping policy. **Option 2: Give it its own page.** Go to **Online Store > Pages**, click **Add page**, and paste the template. Then add the page to your footer menu (Shopify's help lists menus under **Content > Menus**) and link it from your FAQ. Then point to it from the places shoppers already look: - The COD payment method itself. In **Settings > Payments**, the manual payment method has an **Additional details** field, shown next to the method at checkout, and a **Payment instructions** field, shown on the order confirmation page. One line in each is enough, for example "Please have the exact amount ready. Our team will confirm your order by WhatsApp." - Your order confirmation message, whether that is an email, SMS or WhatsApp. - The saved replies your team uses on WhatsApp or Instagram. If your store is in Arabic and English, translate the policy or page with Shopify's Translate & Adapt app, which handles policies and pages. Put the Arabic text from this template into the Arabic translation, not on the same page as the English. ## Keep the policy in step with your checkout rules The policy only helps if it matches what the checkout does. For example, if your rules hide COD above AED 1,500, write AED 1,500 in the policy, and update both on the same day when you change one. If you sell in more than one currency, give the limit in each currency or write "or the same value in your currency". If your COD rules run in an app such as Khaleeji COD, copy the amounts straight from the app's rules. For how those limits work at checkout, see [how to hide COD above a cart total](/guides/hide-cod-above-cart-total/) and [how to block COD for specific customers with tags](/guides/block-cod-for-customers/). ## What to leave out - **Promises your courier can't keep,** such as a delivery hour or "open before you pay" if the courier won't allow it. - **Legal statements you haven't checked,** such as quoting a law or saying the policy "complies with" a regulation. - **Penalties you can't collect.** A refusal fee you have no way to collect only puts honest shoppers off. - **Long paragraphs.** Many shoppers will read this page on a phone. Short headings and one idea per line work better. Make the confirmation step match the method you use. [Confirming COD orders by phone, SMS or WhatsApp](/guides/confirm-cod-orders-phone-sms-whatsapp/) compares the options. For the Arabic name of the payment method itself, see [what to call Cash on Delivery in Arabic](/guides/cash-on-delivery-in-arabic/). Sources: - Shopify Help Center: Store policies: https://help.shopify.com/en/manual/checkout-settings/refund-privacy-tos - Shopify Help Center: Adding pages to your online store: https://help.shopify.com/en/manual/online-store/themes/theme-structure/pages/add-pages - Shopify Help Center: Manual payment methods: https://help.shopify.com/en/manual/payments/manual-payments - Shopify Help Center: Translate & Adapt: https://help.shopify.com/en/manual/international/languages/translate-adapt-app - Shopify Help Center: Editing menus: https://help.shopify.com/en/manual/online-store/menus-and-links/editing-menus --- # Confirming COD orders by phone, SMS or WhatsApp: costs and trade-offs URL: https://khaleejicod.com/guides/confirm-cod-orders-phone-sms-whatsapp/ Updated: 2026-10-26 Short answer: Phone calls cost staff time. SMS costs a per-message fee set by your provider. WhatsApp Business Platform messages are charged by Meta per delivered message, by category and country. Confirm only COD orders, and hide COD on the riskiest carts so fewer orders need checking at all. Confirming a COD order means contacting the shopper before you ship, to check that they placed the order, that the address is right and that they will be there with the money. The three usual ways cost money in different ways. Phone calls cost staff time. SMS costs a per-message fee set by your provider. WhatsApp Business Platform messages are charged by Meta for each delivered message, at a rate that depends on the message type and the shopper's country. Whichever you pick, combine it with checkout rules that hide COD on the riskiest carts, so fewer orders need a check. ## What should a confirmation check? Keep it short. A good confirmation asks the shopper to confirm: - that they placed the order (this catches pranks and orders placed by mistake); - the address, with a landmark or building name; - the total to pay, including delivery, so the amount at the door is no surprise; - the delivery day. Record the answer on the order, for example with an order tag or note, so the person packing knows it was confirmed. To make sure every COD order has a number to contact, set **Shipping address phone number** to **Required** in **Settings > Checkout**. Shopify can't require both an email and a phone as the contact method, so this setting is how you get a phone number on every order. ## Phone calls: you pay in staff time A person calls each COD order and talks to the shopper. **What it costs:** the minutes each call takes, including calls nobody answers, multiplied by what that staff time costs you, plus any call charges. > **Example:** These figures are examples. Replace them with your own. Say each COD order takes > 4 minutes of calling, including retries, and staff time costs you AED 40 an hour. That is about > AED 2.70 per order before call charges. At 100 COD orders a day, it is also close to 7 hours of > calling every day. **Where it works well:** you hear hesitation in the shopper's voice, you can fix a confusing address while you're on the line, and it works for shoppers who don't reply to messages. **Where it struggles:** it grows with your order count, shoppers miss calls from unknown numbers, calling hours are limited, and there is no written record unless your team writes one. ## SMS: you pay a per-message fee to a provider You send a text such as "Reply 1 to confirm order #1234 for AED 450" through an SMS provider or an SMS app for Shopify. **What it costs:** a price per message, set by your provider. It varies by provider and by the country you send to. Ask your provider how it counts message length, especially for Arabic text, and whether replies cost extra. Shopify's own SMS order confirmations don't solve this for GCC stores. Shopify sends them only when the store's business address is in one of a short list of countries (Australia, Brazil, Canada, France, Germany, Ireland, Italy, Japan, New Zealand, Spain, the UK and the US), and they can't be edited, so you can't add a question to them. You need a provider or an SMS app. **Where it works well:** it reaches any phone and costs little staff time once set up. **Where it struggles:** texts are easy to ignore, collecting replies depends on your provider, and business texts can look like spam. Ask your provider about sender name registration rules in each country you send to. ## WhatsApp: Meta charges per delivered message There are two ways to use WhatsApp for confirmations: - **By hand,** with your team chatting from the WhatsApp Business app on a phone. The main cost is staff time, as with calls. - **Automatically,** through the WhatsApp Business Platform, which apps and messaging providers connect to your store. This is where Meta's rate card applies. How Meta charges on the WhatsApp Business Platform, from Meta's pricing page as checked on October 26, 2026: - **Per delivered message.** Since July 1, 2025, Meta charges per message instead of per conversation, and only when the message is delivered. - **The rate depends on two things:** the message category (marketing, utility or authentication for templates, service for normal chat replies) and the shopper's country calling code. The UAE (971), Saudi Arabia (966), Qatar (974), Kuwait (965) and Oman (968) each have their own rates, while Bahrain (973) is priced in Meta's "Rest of Middle East" group. Qatar, Kuwait and Oman moved to their own rates during 2026. Meta publishes the rates in rate cards on that page. - **A confirmation request is a utility message,** as long as it stays non-promotional. Meta's examples of utility messages include confirming, updating and cancelling an order. If you add a discount code or an upsell, Meta treats the whole template as marketing. - **Shopper replies are free.** Meta doesn't charge for messages from a shopper to a business. - **A reply opens a 24-hour window.** While it's open, you can answer with normal chat messages, which Meta calls service messages. Each business phone number gets 1,000 free service messages a month. After that, service messages are charged (this changed on October 1, 2026). - **Utility messages inside that window are no longer free.** From July 1, 2025 they were free; since October 1, 2026 they are charged at the normal rate. - **High volume lowers the utility rate.** Meta has monthly volume tiers for utility messages in each market. Your messaging provider may add its own fee on top of Meta's, so check its pricing too. Meta has changed this pricing more than once since 2025, so check the pricing page before you budget. > **Example:** This shows the cost structure, not real prices. Each COD order gets one utility > template ("Please confirm order #1234 for AED 450, delivery Tuesday"). The shopper taps > "Confirm", which is free and opens the 24-hour window. Your chat reply in that window ("Thank > you, your order is confirmed", or an answer to a question) is a service message, free up to > 1,000 a month per number. So your cost is roughly one utility message per COD order, plus > service messages beyond the free 1,000, plus your provider's fee. **Where it works well:** shoppers can tap a button, send a location pin or ask a question in the same chat, and you get a written record. **Where it struggles:** you need a provider and approved message templates, Meta may move a template it considers promotional into the marketing category, and you still need a plan for shoppers who don't answer. ## Side by side | Method | What you pay for | Staff effort | Written record | |---|---|---|---| | Phone call | Staff time, call charges | High, every order | Only if staff note it | | SMS | Provider's per-message fee | Low once set up | Yes, if replies are collected | | WhatsApp by hand | Staff time | Medium | Yes, in the chat | | WhatsApp Business Platform | Meta's per-message rate, provider fee | Low once set up | Yes | You can also mix them: send an automatic WhatsApp or SMS message first, and call only the orders with no reply. ## What if the shopper doesn't answer? Decide this in advance and write it in your [COD policy](/guides/cod-policy-template/), so it isn't a surprise. For example: send the message, try once more the next day, then call. If there is still no answer after the time you set, hold or cancel the order. Shipping an unconfirmed COD order is an expensive way to find out nobody was home. See [what one refused COD order really costs](/guides/cost-of-a-refused-cod-order/) for the full sum. ## Combine confirmation with hiding COD on risky carts Confirmation catches problems after the order is placed. Hiding COD stops the riskiest COD orders from being placed at all. Used together: 1. **Hide COD where a refusal costs you most:** customers who refused before, large carts, large first orders, and products you can't resell. Those shoppers can still buy by paying online, and prepaid orders don't need a COD confirmation. 2. **Confirm the COD orders that remain.** There are fewer of them, so each method costs less. 3. **After a refusal, tag the customer** `cod-refused` so COD is hidden on their next order. See [how to block COD for specific customers with tags](/guides/block-cod-for-customers/). Khaleeji COD handles step 1 and step 3: it hides COD at checkout when a rule matches, and its refuser scan lists customers with recently cancelled COD orders for you to tag. Confirmation stays your team's job, with whichever method fits your order volume. Sources: - Meta for Developers: Pricing on the WhatsApp Business Platform (checked October 26, 2026): https://developers.facebook.com/documentation/business-messaging/whatsapp/pricing - Meta for Developers: WhatsApp template categorization: https://developers.facebook.com/documentation/business-messaging/whatsapp/templates/template-categorization - Shopify Help Center: SMS notifications: https://help.shopify.com/en/manual/fulfillment/setup/notifications/sms-notifications - Shopify Help Center: Checkout form options: https://help.shopify.com/en/manual/checkout-settings/checkout-form-options --- # Ways to cut COD refusals before the order is placed URL: https://khaleejicod.com/guides/reduce-cod-refusals/ Updated: 2026-10-26 Short answer: Cut COD refusals by fixing what happens before dispatch: show the full total early, promise a delivery time you can keep, collect an address the courier can find and a working phone number, confirm COD orders, send tracking updates, and limit COD on the riskiest carts. Most of what you can do about COD refusals happens before the parcel leaves you. Show the full total early, promise a delivery time you can keep, collect an address the courier can find and a phone number that works, confirm COD orders, keep the shopper updated, and limit COD on the carts where a refusal would cost you most. Use the checklist below and fix the items that are weakest in your store first. ## 1. Show the full total before checkout For example, a shopper who expected to pay AED 200 and is asked for AED 235 at the door has an easy reason to say no. Make the delivery charge visible before checkout: - State your delivery cost, or your free delivery threshold, on product pages and in the cart. - Say whether paying cash on delivery costs extra. If it doesn't, say that too. - Keep the amount in the order confirmation message the same as the amount the courier collects. Your shipping policy helps here. Shopify links store policies in the checkout footer, and in its free themes product pages can link to the shipping policy as well. ## 2. Promise a delivery time you can keep Every extra day between ordering and delivery is another day for the shopper to change their mind or buy the same thing somewhere else. Two things help: - **Write the delivery time in words.** Shopify's transit time feature, which shows a delivery time next to flat shipping rates at checkout, is only available for fulfillment locations in the United States, Canada, France, Germany, Italy, Spain, Australia and the United Kingdom. If you ship from the GCC, put the estimate in the name of your shipping rate, on product pages and in the order confirmation, for example "Delivery in 1 to 3 working days in Dubai". - **Ship COD orders quickly.** If you have a daily cut-off time, show it ("Order before 2 pm for dispatch today") and stick to it. ## 3. Collect an address the courier can find A street-and-number form doesn't always capture what a GCC courier needs, such as a building name or a landmark. In **Settings > Checkout** you can set **Address line 2** to **Optional** or **Required** and use it for the building, villa or nearest landmark. You can also change the wording of checkout fields in **Settings > Checkout**, under **Checkout language**, with **Edit checkout content**. A label such as "Building, villa or nearest landmark" tells the shopper exactly what you need. If your checkout is also in Arabic, update the Arabic wording to match. For country-specific advice, read [better UAE addresses with landmarks and Makani numbers](/guides/uae-addresses-makani/) and [Saudi National Address and fewer failed deliveries](/guides/saudi-national-address/). ## 4. Get a phone number that works The courier needs to reach the shopper, and so do you if you confirm orders. 1. In **Settings > Checkout**, set **Shipping address phone number** to **Required**. Shopify recommends Required when your shipping carrier needs a customer phone number. It is also how you make sure every order has one, because the contact method can be "Phone number or email" or "Email", and a shopper who picks email gives no phone number there. 2. Change the field's wording (with **Edit checkout content**, as above) to say why you need it, for example "Mobile number, for the courier". 3. Look through last month's orders for numbers with missing digits or a missing country code. If you see a pattern, add an example number to the field's wording. ## 5. Confirm COD orders before you ship A short confirmation catches orders placed by mistake, prank orders and wrong addresses before you pay for delivery. Shopify's own SMS order confirmations are only sent when the store's business address is in a short list of countries, none of them in the GCC, so GCC stores need another way: a WhatsApp message, an SMS app or a phone call. Each has a different cost. See [confirming COD orders by phone, SMS or WhatsApp](/guides/confirm-cod-orders-phone-sms-whatsapp/) for the trade-offs. Ask the shopper to confirm the order, the address and the total including delivery. A shopper who says "yes, AED 235 on Tuesday" before dispatch is less likely to be surprised on Tuesday. ## 6. Keep the shopper updated until delivery Updates remind the shopper that the parcel is coming and when to have the cash ready. Shopify sends customer notifications for: - **Shipping confirmation,** when you fulfill the order; - **Shipping update,** when tracking information changes; - **Out for delivery** and **Delivered,** when your carrier or fulfillment app sends a tracking event with that status. The last two depend on tracking events from your carrier or fulfillment app, so an order fulfilled without a tracking number usually won't get them. Shopify also doesn't send them for local delivery orders. Add the courier's tracking number when you fulfill, and translate the notifications if you sell in Arabic. ## 7. Make cancelling easy before dispatch A shopper who changes their mind and can cancel with one WhatsApp message costs you nothing. A shopper who can't find a way to cancel may simply refuse at the door, which costs you delivery both ways. Put your WhatsApp number or phone in the order confirmation and on your COD policy page, and say clearly that cancelling before dispatch is free. ## 8. Limit COD where the risk is highest Some orders carry more risk than others: customers who refused before, very large carts, large first orders from shoppers you don't know, and custom-made products you can't resell. For these, hide COD and let the shopper pay online. Everyone else keeps COD. Shopify lets apps hide a payment method at checkout with a payment customization. Khaleeji COD uses one to hide COD when any rule you switch on matches: a customer tagged `cod-refused`, a cart above an amount, a large first order, a `no-cod` product, or a blocked region or city. Start with [how to hide COD above a cart total](/guides/hide-cod-above-cart-total/) to choose a limit from your own orders. ## How do you know it's working? Measure your refusal rate before and after each change: > **Example:** Refusal rate = refused COD orders ÷ COD orders shipped, for the same month. If you > shipped 400 COD orders in a month and 52 were refused, your refusal rate was 13%. These figures > are examples. Use your own order history. Change one thing at a time where you can, and give it a few weeks, so you know which change made the difference. Sources: - Shopify Help Center: Checkout form options: https://help.shopify.com/en/manual/checkout-settings/checkout-form-options - Shopify Help Center: Translating your checkout (editing checkout wording): https://help.shopify.com/en/manual/checkout-settings/checkout-language - Shopify Help Center: Transit time for shipping rates: https://help.shopify.com/en/manual/fulfillment/setup/shipping-rates/transit-time - Shopify Help Center: Customer notifications: https://help.shopify.com/en/manual/fulfillment/setup/notifications/customer-notifications - Shopify Help Center: SMS notifications: https://help.shopify.com/en/manual/fulfillment/setup/notifications/sms-notifications - Shopify Help Center: Store policies: https://help.shopify.com/en/manual/checkout-settings/refund-privacy-tos --- # Better UAE addresses: landmarks, Makani numbers and delivery notes URL: https://khaleejicod.com/guides/uae-addresses-makani/ Updated: 2026-10-26 Short answer: Shopify's UAE checkout has no postcode, so couriers rely on what the shopper types. Ask for the building or villa number, flat number, street, area and a landmark. In Dubai and four other emirates, a 10-digit Makani number points to the building entrance. Confirm with a map pin. Shopify's UAE checkout has no postcode field, so the courier finds the door using only what the shopper typed. Ask for the building or villa number, the flat number, the street, the area and a nearby landmark. In Dubai, Ajman, Umm Al Quwain, Fujairah and Ras Al Khaimah, a 10-digit **Makani number** points to the building's entrance. For COD orders, confirm thin addresses with a map pin before you ship. ## Why do UAE addresses fail? For a UAE address, Shopify's checkout asks for the address, a second address line, the city, the emirate and, if you include it, the phone number. There is no postcode. The emirate comes from a dropdown, but everything else is typed, so the quality depends on the shopper. Look at your own failed or late COD deliveries for gaps like these: - a building name with no building number, or a tower name shared by two buildings - no flat or villa number - the area or community missing, or only the emirate given - "near the mall" or "behind the mosque" without saying which one - a phone number that is switched off or has a typing mistake Each gap costs a call or a second trip. With COD, every extra day also gives the shopper more time to change their mind about paying. ## What is a Makani number? Makani is the official geographic addressing system used in Dubai, Ajman, Umm Al Quwain, Fujairah and Ras Al Khaimah. Its app is published by Dubai Municipality. Each building entrance has a **10-digit Makani number**. You type the number into the free Makani app (in English or Arabic) and it shows the entrance on the map. Useful details for a store: - **Shoppers can find their number** on the Makani plate at their building, which has a QR code the app can scan. The app can also look up a Makani number from a land number or a traditional address. - **The app can share a location** through other apps, so a shopper can send you their entrance in a message. - **It points to the entrance, not the flat.** You still need the flat or villa number. Abu Dhabi and Sharjah aren't in Makani's list. Abu Dhabi has its own smart addressing system, **Onwani**, which gives streets in Abu Dhabi city unique numbers and uses location QR codes that people can scan and send to visitors. For Sharjah, and anywhere a shopper doesn't know their number, rely on a landmark and a map pin. ## What should you ask UAE shoppers for? Ask for these, in this order: 1. Building or villa number, and the building name. 2. Flat, office or villa number, if it's not in line 1. 3. Street and area (the community or district, such as "Al Barsha 1"). 4. A landmark the courier can see from the street. 5. A Makani number (in the five Makani emirates) or a map pin. 6. A phone number the courier can reach, ideally one with WhatsApp. > **Example:** "Flat 1204, Al Noor Tower, building 18, Street 5, Al Barsha 1, Dubai. Landmark: > opposite the petrol station. Makani: 1234567890." The building, landmark and Makani number > here are made up. Use it to show your team the level of detail that helps a courier. ## How should you set up Shopify's checkout fields for the UAE? In your Shopify admin, go to **Settings > Checkout** and find the customer information options. - **Address line 2 (apartment, unit, etc.):** set it to **Optional**. Shopify warns that Required or Don't include can stop some customers from buying, depending on their type of home. A villa has no flat number, and a flat needs one. - **Shipping address phone number:** Shopify suggests **Required** when your shipping carrier needs a phone number. If your courier calls before delivering, use Required. - **Company name:** choose **Don't include** unless you sell to businesses. It's one field fewer for the shopper. These settings only change fields Shopify already has. Adding a new field such as "Makani number" to the shipping step needs a checkout UI extension, and Shopify makes those available only to Shopify Plus stores. ## Where can shoppers add a landmark or delivery note? Many Shopify themes can show a **cart note** (Shopify also calls it an order note) on the cart page. Shopify describes order notes as a way to collect special instructions about how to prepare and deliver an order. To turn it on: 1. In your theme editor, choose **Cart** from the page menu at the top. 2. Click **Sections**, then **Subtotal** under the Template section. 3. Check **Enable cart note** and save. Change the note's label to ask for what you need, for example "Delivery notes: landmark, Makani number, a good time to call". Keep it optional so it doesn't block the order. The cart note has one limit: only shoppers who open the cart page see it. Anyone who goes straight to checkout misses it, so your confirmation message has to catch those orders. On Shopify Plus, a checkout UI extension can add a delivery instructions field in the shipping step itself. Shopify's developer tutorial shows how, and the answer is saved on the order. ## How do you confirm an address before you ship? For COD orders, check the address before the parcel leaves: - If the address has a building number, area and landmark, ship it. - If it's thin, send a short message asking for a map pin or Makani number. A reply also tells you the shopper is expecting the parcel. - If the shopper doesn't reply and the courier can't find the place from what you have, hold the order or ask them to pay online first. For message templates and the costs of calls, SMS and WhatsApp, see [confirming COD orders by phone, SMS or WhatsApp](/guides/confirm-cod-orders-phone-sms-whatsapp/). If some areas keep failing even with good addresses, you can stop offering COD there. Khaleeji COD can hide COD by emirate or by city name, in English or Arabic. Read more in [cash on delivery in the UAE](/guides/cash-on-delivery-uae/) and the wider checklist in [ways to cut COD refusals before the order is placed](/guides/reduce-cod-refusals/). Sources: - Shopify worldwide: United Arab Emirates address data (AE.yml): https://github.com/Shopify/worldwide/blob/main/data/regions/AE.yml - Apple App Store: Makani, published by Dubai Municipality: https://apps.apple.com/ae/app/makani/id731838002 - UAE Government portal (u.ae): Smart Abu Dhabi, the Onwani addressing system: https://u.ae/en/about-the-uae/digital-uae/digital-cities/smart-abu-dhabi - Shopify Help Center: Editing the checkout form options: https://help.shopify.com/en/manual/checkout-settings/checkout-form-options - Shopify Help Center: Add order notes on your cart page: https://help.shopify.com/en/manual/online-store/themes/customizing-themes/common-customizations/add-order-notes - Shopify.dev: Add a field to checkout (delivery instructions): https://shopify.dev/apps/checkout/delivery-instructions/add-delivery-instructions --- # Saudi National Address and fewer failed deliveries URL: https://khaleejicod.com/guides/saudi-national-address/ Updated: 2026-10-26 Short answer: The National Address is Saudi Post's official address format: building number, street, district, city, postal code and secondary number, plus a short address of 4 letters and 4 numbers. Saudi media report that since January 2026 couriers may not carry parcels without one. Collect it before you ship. The National Address is the official address format run by SPL (Saudi Post). It gives every registered place a building number, street, district, city, postal code and secondary number, and a **short address** of four letters and four numbers. Saudi newspapers report that, since January 2026, parcel companies in Saudi Arabia may not accept shipments that don't carry a National Address. Shopify's checkout has no field for it, so ask for it in your store and check it before a COD parcel leaves. ## What is the Saudi National Address? SPL describes the National Address as an official description of a place that follows international standards. It has six parts: | Part | What it is | |---|---| | Building number | 4 numbers that identify the building | | Street | The street where the building's main entrance is | | Secondary number | 4 numbers for the exact location, useful where there's no street or district name | | District | The district the building is in | | Postal code | 5 numbers | | City | The city the address is in | SPL says registering a National Address is free, and that every individual and organisation has a responsibility to register one. ## What is the short address? The short address is the National Address in a form that's easy to remember: **four letters followed by four numbers**, such as `ABCD1234` (a made-up example). It's the version a shopper can type into a form or send in a message with the least room for typing mistakes. According to SPL, people can find their short address through SPL Online, Absher, Tawakkalna and Sehhaty, and through SPL's virtual assistant, Maha. Name these apps when you ask, so shoppers know exactly where to look. ## Why do parcel companies need it now? The Saudi newspaper Al Eqtisadiah reported in April 2025 that Saudi Arabia's Transport General Authority (TGA) had decided that, from January 2026, parcel transport companies may not accept or carry any shipment without a National Address. The TGA's stated goals were a better customer experience, faster deliveries and fewer unnecessary calls between couriers and recipients. In early January 2026, the Saudi newspaper Okaz reported that the TGA had started enforcing the rule and was applying fines to companies that don't comply. For your store, the effect is simple: a COD order without a National Address may not be accepted by your courier. The time to collect it is before you book the shipment. ## How does it help with COD orders? A National Address helps in the cases where the shopper wants the parcel but the courier can't find them: - **The courier can find the building** from the building number, street and secondary number, instead of calling for directions. - **Fewer calls are needed.** A COD delivery that waits for a call-back can slip to another day, and the shopper has more time to change their mind. - **The data can be checked.** A short address has a fixed pattern, so your team can catch typing mistakes before shipping. ## What does Shopify's Saudi checkout collect? For a Saudi address, Shopify asks for the address, a second address line, the city and a postal code, which is five digits and optional. There is no field for the National Address or the short address, and no district field. Shoppers write the building number, street and district in the address lines, in whatever order and language they like. Shopify's own example Saudi address is written in Arabic. ## How can you ask for the National Address? Pick the methods that fit your store. Using two together catches more orders than one. | Method | Works on | Catches every order? | |---|---|---| | Tell shoppers before checkout (product pages, shipping policy, FAQ) | Any plan | No, but it prepares them | | A cart note asking for the short address | Any plan, if your theme has a cart note | No, only shoppers who open the cart see it | | A field in the checkout shipping step | Shopify Plus (checkout UI extension) | Yes, if the field is required | | Ask in your order confirmation message | Any plan | Yes, if the shopper replies | ### Use the cart note Shopify describes order notes as a way to collect special instructions about how to prepare and deliver an order. To turn on the cart note: 1. In your theme editor, choose **Cart** from the page menu at the top. 2. Click **Sections**, then **Subtotal** under the Template section. 3. Check **Enable cart note** and save. Change the label to something like "Your short address (4 letters and 4 numbers, from Absher or Tawakkalna)". Put the same request in Arabic if you sell in Arabic. ### Ask in the confirmation message For COD orders, a confirmation message is the one method that reaches every order on any plan. Ask for the short address in the same message where you confirm the order total. See [confirming COD orders by phone, SMS or WhatsApp](/guides/confirm-cod-orders-phone-sms-whatsapp/). ### On Shopify Plus A checkout UI extension can add a field to the shipping step. Shopify's developer tutorial builds a delivery instructions field this way and saves the answer on the order. A short address field works the same way. Checkout UI extensions in the shipping step need Shopify Plus. ## How do you check a National Address before shipping? Before you book the courier, check what the shopper sent: 1. **Short address:** exactly 8 characters, 4 letters then 4 numbers. 2. **Building number and secondary number:** 4 numbers each. 3. **Postal code:** 5 numbers. 4. **City:** does it match the city in the Shopify shipping address? If not, ask. Then add the National Address to the shipment in the format your courier asks for. If a COD shopper doesn't answer and you have no National Address, don't ship the order as COD. Ask them to pay online, or cancel. For a shopper who keeps ordering without completing delivery, see [how to block COD for specific customers with tags](/guides/block-cod-for-customers/). For the wider picture of COD in Saudi Arabia, read [cash on delivery in Saudi Arabia](/guides/cash-on-delivery-saudi-arabia/). Sources: - SPL (Saudi Post): National Address: https://splonline.com.sa/en/national-address-1/ - Al Eqtisadiah: National address on shipments a condition for parcel transport in Saudi Arabia from 2026 (Arabic, 17 April 2025): https://www.aleqt.com/2025/04/17/article_2759956.html - Okaz: Transport General Authority begins enforcing the National Address rule for parcels (Arabic, 2 January 2026): https://www.okaz.com.sa/local/na/2229337 - Shopify worldwide: Saudi Arabia address data (SA.yml): https://github.com/Shopify/worldwide/blob/main/data/regions/SA.yml - Shopify Help Center: Add order notes on your cart page: https://help.shopify.com/en/manual/online-store/themes/customizing-themes/common-customizations/add-order-notes - Shopify.dev: Add a field to checkout (delivery instructions): https://shopify.dev/apps/checkout/delivery-instructions/add-delivery-instructions --- # Nudging shoppers from cash to card without losing the sale URL: https://khaleejicod.com/guides/move-shoppers-from-cash-to-card/ Updated: 2026-10-26 Short answer: Make paying online the easy, obvious choice instead of taking cash on delivery away from everyone. List cards and wallets first, name each method clearly, show why paying online is safe, offer instalments if they suit your products, and hide COD only on the carts where refusals cost most. To get more prepaid orders without losing sales, make paying online the easiest and clearest choice at checkout, and keep cash on delivery for shoppers who need it. Put cards and wallets first, give every method a clear name, show why paying online is safe, offer instalments where they fit, and hide COD only on the carts where a refusal would cost you most. Removing COD for everyone is the blunt version of this, and it can lose you the shoppers who only buy when they can pay at the door. ## Why move shoppers to online payment at all? A prepaid order takes away the moment at the door when the shopper decides whether to hand over the money, which is where a COD refusal happens. You also stop waiting for your courier to pass the cash on, and you have less cash to reconcile. The aim is a better mix of prepaid and COD orders. Shoppers who would only buy with COD should still be able to. ## Put online payment first The first payment option is the first one the shopper reads. Shopify lets apps change the payment step with **payment customization Functions**, which can rename, reorder and hide payment methods at checkout. With an app that reorders methods, you can put card and wallet options above cash on delivery. A store can have up to 25 active payment customizations. If you use several payment apps, check that they don't work against each other, for example one moving COD down and another moving it back up. Payment customizations also don't run everywhere: Shopify's documentation lists places they don't support, including the cart and point of sale. They apply to the online checkout. ## Use names that say what happens A shopper choosing between "Credit card", "Cash on Delivery (COD)" and a gateway brand name they don't recognise may simply pick the one they understand. Make each name plain: - Say what the shopper pays with: "Card (Visa, Mastercard)" is clearer than a payment company's name. If your provider controls the name, a payment customization can rename it at checkout. - Keep the COD name plain too. «الدفع عند الاستلام» on the Arabic checkout and "Cash on Delivery" in English is enough. See [how to rename Cash on Delivery at Shopify checkout](/guides/rename-cash-on-delivery-shopify/). - Show the same names on your product pages, FAQ and policy pages, so nothing at checkout is new. ## Show why paying online is safe Some shoppers choose COD because they don't want to pay before the parcel arrives. You can answer that worry without pushing: - **Explain who handles the card details.** Shopify says it is "certified Level 1 PCI DSS compliant". PCI DSS is the card industry's security standard for handling card data. One line in your FAQ ("Card payments are processed securely through our checkout") is enough. - **Make the refund promise clear.** Say how prepaid orders are refunded if something goes wrong, and how long it takes. Shopify links your return policy in the checkout footer and on the order review page, so a clear return policy is visible at the moment of paying. - **Show you're reachable.** A WhatsApp number, a phone number and a physical address on your contact page reassure shoppers who have never bought from you. - **Show the logos of the methods you accept** in your footer or near the add to cart button. ## Offer the payment methods shoppers already use - **Cards and wallets.** Shopify Payments is available for stores in the United Arab Emirates. Shopify's list of supported countries doesn't include Saudi Arabia, Kuwait, Qatar, Bahrain or Oman, so stores based there use a third-party payment provider. Check which local cards and wallets your provider supports in each country you sell to. - **Buy now, pay later (BNPL).** Instalment options let a shopper split a larger purchase. Tabby has a Shopify app, "Tabby Pay Later", that lets shoppers split purchases in 4. Tamara describes its own Shopify payment app on its website. Each provider sets its own countries, currencies, order limits and fees, so check those with the provider before you add it. Instalments make the most difference on larger carts, which are also the carts where a COD refusal costs you most. That makes BNPL a useful option to have when you hide COD above a cart total. ## Should you offer an incentive for paying online? You don't have to. Clear names, a sensible order and trust signals cost you no margin, so start there. If you want to add an incentive, keep it small and simple: - Faster dispatch for prepaid orders ("Paid orders ship today"). - Free delivery on prepaid orders above an amount. - A small discount, if your margin allows it. Before you promise any incentive, test it in a real checkout with cash on delivery selected. The incentive must apply only to online payments, and some discount setups can't tell how the shopper paid. If yours can't, choose an incentive you handle after the order, such as dispatching paid orders first. If you're weighing a COD fee instead, read [hide COD, COD fee, partial COD or OTP: which fits your store](/guides/hide-cod-vs-fee-vs-partial-vs-otp/). A reward for paying online and a charge for paying cash can feel very different to the shopper, even when the money is the same. ## Hide COD only where the risk is highest Use the nudges above for every cart. For a few carts, it makes sense to offer online payment only: customers who refused a COD order before, very large carts, large first orders and products you can't resell. Everyone else keeps COD. Khaleeji COD hides COD for those carts and nothing else. It only touches the cash on delivery method (it can hide or rename it, but it doesn't reorder payment methods), so cards, Apple Pay, Tabby, Tamara and your other methods stay exactly as they are, and the shopper still has a way to pay. To pick a limit from your own orders, see [how to hide COD above a cart total](/guides/hide-cod-above-cart-total/). After any change, watch two numbers for a few weeks: the share of orders paid online and your checkout conversion rate. If prepaid orders rise and conversion holds, keep the change. If conversion drops, ease off. Sources: - Shopify.dev: Payment customization Function API: https://shopify.dev/docs/api/functions/latest/payment-customization - Shopify Help Center: Shopify Payments supported countries: https://help.shopify.com/en/manual/payments/shopify-payments/supported-countries - Shopify: Security: https://www.shopify.com/security - Shopify Help Center: Store policies: https://help.shopify.com/en/manual/checkout-settings/refund-privacy-tos - Shopify App Store: Tabby Pay Later: https://apps.shopify.com/tabby-payment-1 - Tamara: Tamara for Shopify: https://tamara.co/en-SA/shopify-extension --- # Hide COD, COD fee, partial COD or OTP: which fits your store URL: https://khaleejicod.com/guides/hide-cod-vs-fee-vs-partial-vs-otp/ Updated: 2026-10-26 Short answer: Hiding COD stops risky orders from using cash at all. A COD fee pays for delivered COD orders but not refused ones. A deposit (partial COD) makes a refusal cost the shopper something. OTP proves the phone number works but can't stop a change of mind. You can combine them. Each method fixes a different problem, so start from the problem you have: - Hide COD for the orders most likely to be refused, such as big carts, first orders or repeat refusers. Everyone else keeps COD. - Charge a COD fee if collecting cash costs you money on orders that arrive. It does little against refusals, because the fee is collected at the door with the rest. - Take a deposit (partial COD) when you won't ship without some money in hand. - Verify the phone number with a one-time code (OTP) when fake numbers and prank orders are the problem. It can't stop a real shopper who changes their mind. ## Hiding COD for risky orders **How it works on Shopify.** Apps change the payment step with a payment customization Function, which can hide, rename or reorder payment methods at checkout. Shopify says stores on any plan can use public App Store apps that contain Functions. Only custom apps with Functions need Shopify Plus. The app's rules decide which checkouts lose COD: carts above an amount, first orders, customers you've tagged, certain products or certain areas. **What the shopper sees.** Low-risk shoppers see COD as usual. A risky checkout shows only your online methods. There's no extra step. **What it costs.** The app's price, if any. The bigger cost is shoppers who wanted to pay cash and leave instead. You can't know that number in advance, so start with a narrow rule and watch your sales. - Pros: the risky order is never placed as COD, so no parcel goes out and comes back. Low-risk shoppers notice nothing. - Cons: some shoppers without a card or wallet will leave. A rule only catches what it describes, so a small order from a fake number still gets COD. Shopify doesn't run payment customizations in the admin, in POS, or on orders created through its order API. Khaleeji COD uses this method. It hides or renames COD by rule, and it doesn't charge fees, take deposits or send codes. See [how to hide COD above a cart total](/guides/hide-cod-above-cart-total/) and [how to block COD for specific customers with tags](/guides/block-cod-for-customers/). ## Charging a COD fee **How it works on Shopify.** Shoppers who choose COD pay an extra charge. Shopify has no setting for this. A manual payment method has a name, additional details and payment instructions, and Shopify's help page lists no fee option. Payment customization Functions can hide, reorder and rename methods, but adding a charge isn't one of their operations. So COD fees come from an app, a fee product added to the cart, or a charge built into a shipping rate. Test that the fee appears only when COD is chosen. **What the shopper sees.** A higher total for paying cash. Show it clearly before the order is placed: a surprise amount at the door is one more reason to refuse. **What it costs.** Nothing per order, because the shopper pays. But a refused parcel brings in nothing, fee included, and you still pay shipping both ways. > **Example:** If your courier charged AED 10 to collect cash, a AED 10 COD fee would cover that > on every delivered COD order. On a refused order you'd collect nothing and pay shipping out and > back. These figures are examples; use your own courier's rates. - Pros: delivered COD orders pay their own cash-handling cost. Some shoppers switch to paying online to avoid the fee. COD stays open to everyone. - Cons: it doesn't stop refusals, some shoppers will leave at checkout, and on Shopify it needs an app or a workaround. ## Partial COD: a deposit online, the rest in cash **How it works on Shopify.** The shopper pays part of the order online before you ship, for example the shipping cost or a share of the total, and the rest in cash at the door. Manual payment methods have no deposit option either, so partial COD needs an app or a manual process, such as a separate payment link for the deposit. Check how your tool records the order: the courier must know the right amount to collect, and the order in Shopify should show what's paid and what's still due. **What the shopper sees.** Two payments for one order. They need a card or wallet for the deposit, so a shopper who can't pay online at all is turned away, much as if COD were hidden. **What it costs.** The tool's price, plus the usual online payment fees on the deposit. If a parcel is refused, you keep the deposit or refund it, depending on your policy. Say which in your COD policy. - Pros: a refusal costs the shopper something, which puts off impulse and prank orders. It suits custom-made and high-value items. - Cons: it has the most friction of the four, adds work (two payments per order, refunds when you cancel), and shuts out shoppers with no online payment method. ## OTP or phone verification **How it works on Shopify.** The shopper gets a one-time code by SMS or WhatsApp and types it in before the order is placed. Adding your own step inside Shopify's information, shipping or payment pages uses checkout UI extensions, which Shopify makes available only to Plus stores. On other plans, OTP usually runs outside Shopify's checkout, in a COD order form on the product or cart page. If you also hide COD, check how the two fit together. Shopify lists orders created through its order API, and draft orders created in the admin, among the places payment customizations don't run. If a COD form creates orders that way, checkout rules such as hiding COD won't apply to them. **What the shopper sees.** One more step, and a short wait for the code. If the code doesn't arrive, the sale is lost. **What it costs.** You pay per message. SMS prices depend on your provider and the country. For WhatsApp, codes go out as template messages, and Meta charges per delivered template message, with rates that depend on the message category and the recipient's country (checked 26 October 2026). Verification codes fit the "authentication" category, which Meta describes as messages for identity verification. - Pros: it catches typos, fake numbers and prank orders before anything ships, and everyone who verifies keeps COD. - Cons: a verified shopper can still refuse, you pay for messages on orders that would have been fine, and below Plus it usually means using a form instead of Shopify's standard checkout. For confirmation after the order, read [confirming COD orders by phone, SMS or WhatsApp](/guides/confirm-cod-orders-phone-sms-whatsapp/). ## Which one fits your store? | Your main problem | Start with | |---|---| | Fake numbers and prank orders | OTP or a confirmation message | | Big orders get refused | Hide COD above a cart total | | The same customers keep refusing | Hide COD for customers you've tagged | | Collecting cash eats your margin on delivered orders | A COD fee | | Custom-made or high-value items get refused | A deposit, or hide COD for those products | Side by side: | Method | Protects you from a refused parcel? | Extra step for the shopper | Who pays | |---|---|---|---| | Hide COD | Yes, for the orders your rules catch | None | You, in some lost sales | | COD fee | No | None, but a higher total | The shopper | | Deposit | Partly: you can keep the deposit | A second payment | You, in tool and payment fees | | OTP | Only against fake or wrong numbers | Typing a code | You, per message | ## Can you combine them? Yes, because they cover different problems. For example, hide COD for big carts and repeat refusers and confirm phone numbers on the rest, or charge a fee and hide COD for customers who refused before. Whatever you choose, compare your refusal rate before and after. To put a money figure on each refusal, read [what one refused COD order really costs](/guides/cost-of-a-refused-cod-order/). Sources: - Shopify.dev: Payment customization Function API: https://shopify.dev/docs/api/functions/latest/payment-customization - Shopify.dev: About Shopify Functions: https://shopify.dev/docs/apps/build/functions - Shopify Help Center: Manual payment methods: https://help.shopify.com/en/manual/payments/manual-payments - Shopify.dev: Checkout UI extensions: https://shopify.dev/docs/api/checkout-ui-extensions - Meta for Developers: WhatsApp Business Platform pricing: https://developers.facebook.com/documentation/business-messaging/whatsapp/pricing --- # Quick start: set up Khaleeji COD in two minutes URL: https://khaleejicod.com/help/quick-start/ Updated: 2026-10-26 Short answer: Turn on Cash on Delivery in Shopify's payment settings, open Khaleeji COD, click "Use GCC preset" and then "Save rules". When the Status badge says Active, test a small cart and a big cart through a real checkout. To set up Khaleeji COD, turn on Cash on Delivery in Shopify, open the app, click **Use GCC preset**, then click **Save rules**. The Status badge changes to **Active** and your rules start working at checkout. Then run a test checkout to see COD shown for a small cart and hidden for a big one. ## Step 1: Turn on Cash on Delivery in Shopify Khaleeji COD doesn't add a payment method. It changes how your existing Cash on Delivery method appears at checkout, so COD has to be switched on first. 1. In your Shopify admin, go to **Settings > Payments**. 2. Select the **Cash on Delivery (COD)** manual payment method. 3. If you like, add a short line under **Additional details** and **Payment instructions**. 4. Activate the method. Shopify's help page on manual payment methods has the full steps, and so does our guide on [how to add Cash on Delivery to a Shopify store](/guides/add-cash-on-delivery-shopify/). > **Note:** Khaleeji COD finds COD by its name. Shopify's built-in "Cash on Delivery (COD)" works. If > you created your own manual method instead, keep the words "Cash on Delivery" in its name (or use > one of the other names listed in the [checkout rules reference](/help/rules-reference/)), or the > app won't treat it as COD. ## Step 2: Open Khaleeji COD and check the Status Open Khaleeji COD from the apps in your Shopify admin. The **Status** section at the top shows one of three badges: | Badge | Message in the app | What it means | |---|---|---| | Not set up | "Not set up yet. Pick your rules and press Save." | Nothing runs at checkout yet. | | Active | "Active: Khaleeji COD is running at checkout." | Your saved rules are live. | | Off | "Saved but switched off in Shopify settings. Save again to switch it on." | Your rules are saved, but the checkout rule was switched off in Shopify. | On a store that hasn't saved any rules, you'll see **Not set up**. ## Step 3: Click "Use GCC preset" If you haven't saved rules before, the **Checkout rules** form opens with the GCC preset already filled in. Click **Use GCC preset** anyway if you changed something and want to start again. The preset: - hides COD for customers tagged `cod-refused` (or `cod-blocked`) - hides COD when the cart is above 1,500 - hides COD on a first order above 500 - hides COD when the cart has a product tagged `no-cod` - shows COD as «الدفع عند الاستلام» to Arabic shoppers and "Cash on Delivery" to everyone else The amounts are in your shop's currency, and the box next to each amount shows the currency code. The preset uses the same numbers in every currency, so check that 1,500 and 500 suit your prices. [The GCC preset, rule by rule](/help/gcc-preset/) explains each setting and how to change it. Nothing changes at checkout until you save. ## Step 4: Click "Save rules" Click **Save rules**. The first time, the app creates its checkout rule in your store and shows "Khaleeji COD is now live at checkout." After that, saving shows "Rules saved." The Status badge should now say **Active**. On the Free plan you may see this message instead: "The free plan includes 1 rule plus the Arabic name. Switch off the extra rules or upgrade to Pro." The preset switches on four rules and Free allows one. The Arabic and English COD name doesn't count as a rule. You can untick all but one rule and save again, or move to Pro, which costs $7.99/month after a 14-day free trial. On a development store you can test Pro free. ## Step 5: Test with a real checkout Payment rules run at the online checkout. Shopify doesn't run them inside the Shopify admin, so if you collect payment for a draft order from the admin, you won't see any change. Test through your storefront, or open a draft order's checkout link. Run three checks: 1. Small cart: check out with a cart below 500. COD appears, named "Cash on Delivery", or «الدفع عند الاستلام» if the checkout is in Arabic. 2. Big cart: check out with a cart above 1,500. COD is gone and card payments are still there. 3. Tagged customer: tag a test customer `cod-refused`, then check out as that customer, for example with a draft order assigned to them. COD is hidden whatever the cart total. > **Note:** Keep the first test below 500. With the preset on, a guest checkout counts as a first > order, so a guest cart between 500 and 1,500 also hides COD. That's the first-order rule doing > its job. For the draft-order method step by step, see [how to test checkout payment rules with draft orders](/guides/test-payment-rules-draft-orders/). ## What should you do next? - Add the UAE emirates or the cities where you don't want COD. The [checkout rules reference](/help/rules-reference/) explains how to write them. - On Pro, run the refuser scan to tag customers whose COD orders from the last 60 days were cancelled. - If COD shows or hides when you don't expect it, work through the [troubleshooting checklist](/help/troubleshooting/). Sources: - Shopify Help Center: Manual payment methods: https://help.shopify.com/en/manual/payments/manual-payments - Shopify.dev: Payment customization Function API: https://shopify.dev/docs/api/functions/latest/payment-customization --- # The GCC preset, rule by rule URL: https://khaleejicod.com/help/gcc-preset/ Updated: 2026-10-26 Short answer: The GCC preset switches on four rules: tagged refusers, carts above 1,500, first orders above 500 and products tagged no-cod. It also turns on the Arabic and English COD name. Amounts are in your shop's currency. Region and city rules stay off until you fill them in. The **Use GCC preset** button fills the Checkout rules form with a starting setup for GCC stores: four rules on, two rules off, and the Arabic and English name for COD switched on. Nothing changes at checkout until you click **Save rules**. After that, COD is hidden whenever any switched-on rule matches. ## What does the preset switch on? | Setting in the app | Preset value | |---|---| | Hide COD for customers tagged cod-refused | On | | Hide COD when the cart is above | On, 1500 | | Hide COD on a first order above | On, 500 | | Hide COD when the cart has a product tagged no-cod | On | | Hide COD in these emirates or regions | Off, empty list | | Hide COD in these cities | Off, empty list | | Show a clear name at checkout | On: «الدفع عند الاستلام» for Arabic shoppers, "Cash on Delivery" for others | ## Rule 1: customers tagged cod-refused COD is hidden for any customer with the tag `cod-refused` or `cod-blocked`. The preset switches it on because it changes nothing until you tag someone, and after that it stops that customer choosing COD again. The rule can only see customers that Shopify has identified at checkout, for example a shopper logged in to their account, or a draft order assigned to a customer. A guest checkout has no customer record, so a tag can't match it. You can tag customers by hand in Shopify, or use the [refuser scan](/help/refuser-scan/) on the Pro plan. ## Rule 2: cart above 1,500 COD is hidden when the checkout total is more than 1,500 in your shop's currency. A total of exactly 1,500 still shows COD. When a big COD order is refused, more of your stock has been out on the road and more cash was due on delivery. Hiding COD above a limit keeps that risk for smaller orders only. Shoppers with a big cart still see your card and other online payment methods. The checkout total is the amount the shopper is about to pay, so shipping and tax count once they're added. If the shopper is paying in another currency, the app converts their total to your shop's currency before comparing. [How to hide COD above a cart total](/guides/hide-cod-above-cart-total/) explains how to choose a limit from your own orders. ## Rule 3: first order above 500 COD is hidden on a first order when the total is above 500. A first order means a guest checkout, or a customer whose order count in Shopify is 0. This amount is lower than the cart limit on purpose. A new shopper has no history with you, so they get a smaller COD limit, and small first orders under 500 still get COD. Customers who have ordered before are only checked against the 1,500 cart limit. Guests always count as first orders, even if the same person has bought from you before as a guest. The app only sees a shopper's order count when Shopify has identified them at checkout, for example when they're logged in. For more on this rule, see [how to hide COD on large first orders](/guides/hide-cod-first-orders/). > **Note:** Keep the first-order amount below the cart amount. If it's equal or higher, the cart > rule already hides COD for those totals and the first-order rule adds nothing. ## Rule 4: products tagged no-cod COD is hidden when any product in the cart has the product tag `no-cod`. One tagged product is enough. Like the refuser rule, it changes nothing until you tag a product, which is why the preset switches it on. Use it for items you don't want to send out unpaid, such as made-to-order or high-value products. ## Why are the region and city rules off? They need your own list. No single list of emirates, regions or cities fits every store, so the preset leaves both rules off and empty. When you know where your refusals come from, fill in UAE region codes (such as `AE-AZ` for Abu Dhabi) or city names (such as `Al Ain, العين`), tick the rule and save. Outside the UAE, use city names. See [how to limit COD by emirate, region or city](/guides/limit-cod-by-emirate-or-city/). ## Why 1,500 and 500? They're round starting numbers, and nobody worked them out from your store's orders. The app uses the same two numbers whatever your shop's currency, and the same number means very different money in dirhams, riyals, dinars or US dollars. Check them against your own prices before you save. To choose your own, look at your usual order value and at the totals of your cancelled COD orders. Pick a cart limit that keeps COD for everyday orders, and a first-order limit that keeps it for a new shopper's small trial order. > **Example:** A shop in AED has saved the preset. These figures are examples; use your own. > > - A guest checks out with AED 300: COD is shown (a first order, but not above 500). > - A guest checks out with AED 800: COD is hidden (a first order above 500). > - A logged-in customer with 4 past orders checks out with AED 800: COD is shown. > - Any shopper checks out with AED 1,600: COD is hidden (the cart is above 1,500). ## How do you change the preset? 1. Change an amount, untick a rule, or fill in regions and cities. 2. Edit the Arabic or English COD name if you want different wording. 3. Click **Save rules**. Your saved settings replace the preset. You don't need to click **Use GCC preset** again. > **Note:** Clicking **Use GCC preset** resets the whole form, including your amounts, your region > and city lists, and your COD names. If you click it by mistake, don't save. Reload the app page > and your last saved rules come back. ## Can you use the preset on the Free plan? The Free plan includes one checkout rule plus the Arabic and English COD name. The preset switches on four rules, so saving it on Free shows: "The free plan includes 1 rule plus the Arabic name. Switch off the extra rules or upgrade to Pro." Keep the rule that matters most to you and untick the rest, or move to Pro ($7.99/month after a 14-day free trial) to keep all four. Every rule is described in the [checkout rules reference](/help/rules-reference/). Sources: - Shopify.dev: Payment customization Function API: https://shopify.dev/docs/api/functions/latest/payment-customization --- # Checkout rules reference URL: https://khaleejicod.com/help/rules-reference/ Updated: 2026-10-26 Short answer: Khaleeji COD hides Cash on Delivery when any switched-on rule matches: a tagged customer, a cart above an amount, a large first order, a product tagged no-cod, a blocked region or a blocked city. Only COD is changed. If the settings are missing or broken, nothing is hidden. Khaleeji COD has six checkout rules and one rename setting. COD is hidden when **any** switched-on rule matches. If no rule matches, COD stays, shown with the name you set. Only Cash on Delivery is changed. Cards, Apple Pay, Tabby, Tamara and every other method are never hidden or renamed. On the Free plan you can switch on one rule. Pro ($7.99/month) lets you use all six. All your rules run as one payment customization in your store. Shopify allows 25 active payment customizations per store, so Khaleeji COD uses one of them. ## The rules at a glance | Rule, as written in the app | COD is hidden when | You fill in | |---|---|---| | Hide COD for customers tagged cod-refused | the customer has the tag `cod-refused` or `cod-blocked` | nothing | | Hide COD when the cart is above | the checkout total is above the amount | an amount | | Hide COD on a first order above | it's a first order and the total is above the amount | an amount | | Hide COD when the cart has a product tagged no-cod | any product in the cart has the tag `no-cod` | nothing | | Hide COD in these emirates or regions | the shipping address is in a listed region | region codes | | Hide COD in these cities | the shipping city is on your list | city names | ## How does the app know which method is COD? It reads the names of the payment methods at checkout. A method counts as COD when its name contains "Cash on Delivery", "Cash-on-Delivery", "Pay on Delivery", «الدفع عند الاستلام», «الدفع عند التسليم» or «الدفع نقدا عند الاستلام», or when the whole name is "COD", "(COD)" or "C.O.D". Capital letters don't matter. Shopify's built-in "Cash on Delivery (COD)" matches. A method with any other name is left alone. If you use a custom manual method with a different name, change its name in Shopify so it includes one of the names above, or contact 9090mohammad123@gmail.com. ## Customers tagged cod-refused COD is hidden when the customer at checkout has the tag `cod-refused` or `cod-blocked`. The label in the app only names `cod-refused`, but both tags work. The [refuser scan](/help/refuser-scan/) adds `cod-refused`. There's nothing to fill in. Type tags in lower case, exactly as shown. Edge cases: - A guest checkout has no customer record, so the tag can't match. The rule works when Shopify knows who is checking out: a shopper logged in to their account, or a draft order assigned to a customer. - Remove the tag from the customer in Shopify admin and COD comes back for them at their next checkout. More in [how to block COD for specific customers with tags](/guides/block-cod-for-customers/). ## Cart above an amount COD is hidden when the checkout total is more than your amount. Shopify describes this total as "the total amount for the customer to pay at checkout", so shipping and tax count once they're added. Type a plain number in your shop's currency. The field shows the currency code. Edge cases: - Exactly the amount doesn't count. With 1500, a total of 1,500.00 keeps COD and 1,500.01 hides it. - Other currencies are converted. If a shopper checks out in another currency, the app converts the total to your shop's currency, using the rate Shopify gives it for that checkout, then compares. - An empty amount, or 0, means the rule does nothing even when it's ticked. It still counts toward the Free plan's one-rule limit. ## First order above an amount COD is hidden when two things are true together: it's a first order, and the checkout total is above your amount. A first order means a guest checkout, or a customer whose order count in Shopify is 0. Edge cases: - Guests always count as first orders, even if the same person has bought before as a guest. The app only sees a shopper's order count when Shopify has identified them at checkout, for example when they're logged in. - Keep this amount below the cart amount. If it's equal or higher, the cart rule already hides COD for those totals. - "Above", currency conversion and empty amounts work as in the cart rule. ## Products tagged no-cod COD is hidden when any product in the cart has the product tag `no-cod`. One tagged product is enough. The tag goes on the product, so it covers all of that product's variants. More in [how to turn off COD for certain products](/guides/disable-cod-for-products/). ## Emirates or regions COD is hidden when the shipping address is in a region on your list. Write each region as the country code, a hyphen and the region code, for example `AE-AZ` (Abu Dhabi) or `AE-FU` (Fujairah). Separate them with commas. An English comma or an Arabic comma («،») both work, and capital letters don't matter. Edge cases: - The app builds the code from the country and region stored on the shipping address. Codes are confirmed to work for the UAE's seven emirates: `AE-AZ`, `AE-AJ`, `AE-DU`, `AE-FU`, `AE-RK`, `AE-SH` and `AE-UQ`. - Outside the UAE, use the city rule. Shopify's checkout doesn't ask for a region in Saudi Arabia, Qatar, Bahrain or Oman, so there's no region code to match. In Kuwait, Shopify's region codes already start with "KW-", so a code written in the format above doesn't match. - Write codes, not names: `AE-AZ` works, but "Abu Dhabi" or "AZ" on its own doesn't. For the codes and when to use regions or cities, see [how to limit COD by emirate, region or city](/guides/limit-cod-by-emirate-or-city/). ## Cities COD is hidden when the shipping city matches a name on your list. Write names in English, Arabic or both, separated by commas, for example `Al Ain, العين`. The app compares whole names and ignores capital letters and spaces at the start or end. Edge cases: - The whole name must match. "Al Ain" doesn't match "Al Ain City" or "Alain". Add every spelling you want to cover as its own entry. - The city is whatever is on the shipping address, so look at your recent orders to see the spellings your shoppers actually use. ## Rename Cash on Delivery With **Show a clear name at checkout** ticked, COD is shown with the **Name for Arabic shoppers** when the checkout language is Arabic, and with the **Name for other shoppers** in every other language. The defaults are «الدفع عند الاستلام» and "Cash on Delivery". You can edit both. - The rename isn't a rule. It doesn't count toward the Free plan's one-rule limit. - When a rule hides COD, there's nothing left to rename. - If you leave a name empty, shoppers in that language see the method's original name. ## What happens when settings are missing or broken? Nothing is hidden. If the saved settings are missing or can't be read, the payment step looks exactly as it would without the app. Khaleeji COD never changes anything other than COD, so it can't hide your other payment methods. ## Where don't the rules run? The rules run in Shopify's online checkout, including a checkout opened from a draft order's link. Shopify doesn't run payment customizations in the Shopify admin, in POS, when you collect payment for a draft order inside the admin, or when you edit an order. If COD shows or hides when you don't expect it, see [troubleshooting](/help/troubleshooting/). Sources: - Shopify.dev: Payment customization Function API: https://shopify.dev/docs/api/functions/latest/payment-customization --- # How the refuser scan works URL: https://khaleejicod.com/help/refuser-scan/ Updated: 2026-10-26 Short answer: The refuser scan reads orders placed in the last 60 days that are now cancelled, keeps the ones paid by Cash on Delivery, and counts the customers to tag cod-refused. Nothing is tagged until you click "Tag N customers". It needs Shopify's approval for the app to read customer data. The refuser scan looks at orders from the last 60 days that are now cancelled, keeps the ones paid by Cash on Delivery, and counts the customers behind them. When you click **Tag N customers**, the app adds the tag `cod-refused` to those customers. From then on, the rule "Hide COD for customers tagged cod-refused" hides COD for them at checkout. The scan is part of the Pro plan; on the Free plan the section shows a "Pro feature" badge. ## How do you run it? 1. Open Khaleeji COD and go to the **Find customers who refused COD** section. 2. Click **Scan orders**. The page shows "Scanning…" while it reads your orders. 3. Read the result, for example "3 cancelled COD orders found. 3 customers to tag." 4. Click **Tag 3 customers** (the number matches your result). When it finishes, you see "Tagged 3 customers cod-refused." If the scan finds nobody new to tag, the tag button doesn't appear. > **Note:** Tags only change the checkout if the rule "Hide COD for customers tagged cod-refused" is > ticked and saved. Check the **Checkout rules** section after you tag. ## Which orders does it look at? - Orders created in the last 60 days. By default, Shopify lets apps read orders from the last 60 days only. Older orders need an extra permission, and Khaleeji COD doesn't ask for it. - Cancelled orders only. Every other order is skipped. - Orders paid by Cash on Delivery. The scan keeps an order when its payment method name includes "Cash on Delivery" or «الدفع عند الاستلام», or is exactly "COD". Orders paid by card, wallet or buy now, pay later are ignored. - Up to 1,000 cancelled orders per scan, newest first. If your store has more than that in 60 days, the scan checks the newest 1,000. > **Note:** The scan recognises fewer COD names than the checkout rules do. If your COD method has > another name, such as "Pay on delivery", the checkout rules still find it, but the scan won't count > those orders. ## Why is the customer count lower than the order count? The result counts orders and customers separately. The customer number can be lower because: - one customer can have several cancelled COD orders, and is only tagged once - customers who already have the `cod-refused` tag are skipped, and the result adds a line such as "2 orders are from customers who are already tagged." - an order with no customer attached can't be tagged ## Does it tag anyone without asking? No. Scanning only reads your orders. Nothing is tagged until you click **Tag N customers**. The app then adds the `cod-refused` tag and nothing else. It doesn't remove or change other tags. The result shows numbers, not names, and the button tags every customer it counted. If you want to check each customer first, look at your cancelled COD orders in Shopify admin before you tag. If you tag someone by mistake, open that customer in Shopify admin and remove the tag. ## Is every cancelled COD order a refusal? Not always. The scan can't tell why an order was cancelled. Some are refusals at the door, but you may also have cancelled some orders yourself, for example because an item was out of stock or the customer asked before it shipped. If you click the button, those customers are tagged too. If that matters for your store, review your cancelled COD orders first ([how to find cancelled COD orders](/guides/find-cancelled-cod-orders/)), tag, then remove the tag from anyone who shouldn't have it. [How to spot repeat refusers](/guides/spot-repeat-cod-refusers/) covers what counts as a pattern and how to be fair to a customer who refused once. ## "Shopify hasn't approved this app to read customer data yet" The scan reads the customer on each cancelled order. Shopify treats customer information on orders as protected customer data, and an app needs Shopify's approval before it can read it. Until Khaleeji COD has that approval, the scan stops and shows: "Shopify hasn't approved this app to read customer data yet. The scan works once that access is granted." This approval is between the app's developer and Shopify. There's nothing to change in your store. A few more things to know: - From each order, the scan reads only the payment method, whether the order has a fulfillment, and the customer's ID and tags. It doesn't read names, emails, phone numbers or addresses. - The message only affects the scan. Your saved checkout rules stay as they are. - While you wait, you can tag customers by hand in Shopify admin. See [how to block COD for specific customers with tags](/guides/block-cod-for-customers/). ## What else should you know? - Results aren't saved. Run the scan again whenever you want a fresh count. - If tagging stops part way, you see "Tagging stopped:" followed by the reason. Customers tagged before the problem keep their tag. Run the scan again: they're now skipped, and the rest are counted. - The [money-lost report](/help/money-lost-report/) works from the cancelled COD orders this scan finds, but it only counts the ones that had shipped. Run a scan before you read it. Tagging still covers every cancelled COD order, shipped or not. Sources: - Shopify.dev: Access scopes (orders from the last 60 days): https://shopify.dev/docs/api/usage/access-scopes - Shopify.dev: Protected customer data: https://shopify.dev/docs/apps/launch/protected-customer-data --- # How the money-lost report is calculated URL: https://khaleejicod.com/help/money-lost-report/ Updated: 2026-10-26 Short answer: Money lost = cancelled COD orders from the last 60 days that had shipped × (shipping out + shipping back per order). The orders come from the refuser scan, and the two costs are the numbers you type in. Fees, packaging, ads and staff time are not included. The money-lost report multiplies the number of cancelled COD orders from the last 60 days that had shipped by the shipping you pay on each one: the trip out to the customer plus the trip back to you. The orders come from the refuser scan. The two shipping costs are numbers you type in. **Money lost = cancelled COD orders that had shipped × (shipping out + shipping back)** ## How do you use it? 1. In **Find customers who refused COD**, click **Scan orders**. Until you scan, the report says "Run a scan to see this." 2. In **Money lost to refused COD**, fill in **Shipping out, per order** and **Shipping back, per order**, in your shop's currency. 3. Read the result, for example "USD 150 lost on 3 refused COD orders that had shipped (last 60 days)." It updates as you type. If some cancelled COD orders never shipped, the result adds a line such as "2 more were cancelled before shipping, so they cost no shipping." If both costs are 0, you see the order counts only, for example "3 of 5 cancelled COD orders had shipped in the last 60 days. Enter your shipping costs to see the money." If none of them had shipped, you see a message such as "None of the 5 cancelled COD orders had shipped, so no shipping money was lost." The report is part of the Pro plan. ## Which orders does it count? It starts from the orders the [refuser scan](/help/refuser-scan/) finds: orders created in the last 60 days that are cancelled and were paid by Cash on Delivery. Of those, it counts only the ones that had shipped. Orders from customers who are already tagged, and orders with no customer attached, count too. An order counts as shipped only if Shopify has at least one fulfillment recorded on it, meaning it was marked as fulfilled by you, your staff or a shipping app. If you hand a parcel to your courier without fulfilling the order in Shopify, the report treats that order as never shipped. Why 60 days: by default, Shopify lets apps read orders from the last 60 days only, and Khaleeji COD doesn't ask for the extra permission that older orders need. ## What does the figure include? Only shipping, both ways, at one flat amount per order. The result is in your shop's currency, rounded to a whole number. It leaves out the other costs of a refused order, such as: - COD or handling fees your courier charges - packaging and inserts - the ad spend that brought the shopper to your store - staff time to pack, confirm and restock - stock that was away from your shelf, or came back damaged So for an order that really did go out and come back, the true cost is higher than the report shows. [What one refused COD order really costs](/guides/cost-of-a-refused-cod-order/) gives a fuller formula you can fill in yourself. ## When can the figure be off? The report treats every cancelled COD order with a fulfillment as a parcel that went out and came back. That isn't always true: - If you marked an order as fulfilled but cancelled it before the courier collected it, you paid no shipping, but it's still counted. The figure is too high. - If you send parcels without marking the orders as fulfilled in Shopify, those orders count as never shipped. The figure is too low. - A flat rate per order can be off if your courier charges more for some areas or for heavier parcels. Treat the figure as an estimate built from your own inputs. It's most useful as a comparison: run it again next month and see whether the number of refused orders that had shipped has gone down. ## Which shipping costs should you enter? Use your courier's real rates rather than a guess: 1. Shipping out: what your courier charges you to deliver one typical COD order. Check your contract or a recent invoice. 2. Shipping back: what you pay when a refused parcel comes back to you. Look for the return or RTO (return to origin) charge on your invoice. 3. If your rates change by emirate, city or weight, use an average from a recent invoice. > **Example:** These figures are examples; replace them with your own. A shop in AED runs the scan > and finds 12 cancelled COD orders in the last 60 days, 9 of which had shipped. Its courier charges > AED 20 to deliver and AED 15 to bring back a refused parcel. Money lost = 9 × (20 + 15) = AED 315. The costs you enter aren't saved. Both fields start at 0 each time you open the app, so keep your two numbers somewhere handy. ## What can you do with the number? - Tag the customers the scan found, so they can't choose COD again (with the tag rule switched on). - Use the cart and first-order rules to limit COD on the orders you'd least like to see refused. See the [checkout rules reference](/help/rules-reference/). - Track your refusal rate over time. [RTO (return to origin) explained](/guides/rto-explained/) shows how to work it out. Sources: - Shopify.dev: Access scopes (orders from the last 60 days): https://shopify.dev/docs/api/usage/access-scopes --- # Using Khaleeji COD in Arabic URL: https://khaleejicod.com/help/arabic-admin/ Updated: 2026-10-26 Short answer: The app page opens in the language you last picked with its العربية / English button. If you haven't picked one, it follows your Shopify admin language when that's Arabic or English, and uses English otherwise. Shoppers on an Arabic checkout see «الدفع عند الاستلام». The Khaleeji COD page in your Shopify admin works in Arabic and in English. It picks a language when it opens, you can switch with one button, and in Arabic the whole page runs right to left. The Cash on Delivery name your shoppers see is a separate setting: it follows each shopper's checkout language, not the language of your admin page. ## How does the page choose Arabic or English? Each time the page opens, it checks these in order and uses the first one that applies: 1. **Your saved choice.** If you used the العربية / English button before in this browser, the page opens in that language. 2. **Your Shopify admin language.** If your Shopify account is set to Arabic, the page opens in Arabic. If it's set to English, the page opens in English. Regional versions, such as Arabic for the UAE, count as Arabic. 3. **English.** For any other admin language, such as French or Urdu, the page opens in English. Your Shopify admin language is a setting on your own account. To change it, Shopify's steps are: from your Shopify admin, click your store name, click your profile, pick a language in the **Preferred language** section, and click **Save**. Shopify says this changes only the language you see in the admin. Your online store stays as it is. > **Note:** The saved choice is kept in your browser, not in your store. On another computer, > another browser or a private window, the page starts again from your Shopify admin language. > Each staff member sees the page in their own language. ## How do you switch between Arabic and English? Use the button at the top of the Khaleeji COD page. It reads «العربية» (Arabic) when the page is in English, and "English" when the page is in Arabic. One click changes every heading, rule, button and message on the page. Switching doesn't save your rules or change anything at checkout, and anything you've typed but not saved stays in the form. The next time you open the page in the same browser, it opens in the language you picked. ## What changes when the page is in Arabic? The layout runs right to left. Text lines up on the right, each checkbox sits at the right-hand start of its line, and the amount boxes move to the left. Some things stay in English letters in both languages. Type them exactly as shown: - Customer and product tags: `cod-refused`, `cod-blocked` and `no-cod`. - Region codes, such as `AE-AZ` (Abu Dhabi) and `AE-FU` (Fujairah). The currency code next to each amount box is your shop's currency, in either language. In the region and city boxes, separate entries with commas. The Arabic comma «،» works too. City names can be in Arabic or English. The rule compares the whole name, ignoring capital letters, so add each spelling your shoppers type, for example `Al Ain، العين`. For more on spellings, see [how to limit COD by emirate, region or city](/guides/limit-cod-by-emirate-or-city/). If you follow English instructions, such as these help pages, while the page is in Arabic, these are the labels you'll use most: | English label | Arabic label | |---|---| | Use GCC preset | «استخدام إعدادات الخليج» | | Save rules | «حفظ القواعد» | | Status: Active, Off, Not set up | «الحالة»: «مُفعّل»، «متوقف»، «غير مُعدّ» | | Rename Cash on Delivery | «إعادة تسمية الدفع عند الاستلام» | | Scan orders | «فحص الطلبات» | | Upgrade to Pro | «الترقية إلى Pro» | ## How do Arabic shoppers see Cash on Delivery? In the **Rename Cash on Delivery** part of the page, tick **Show a clear name at checkout** («عرض اسم واضح في صفحة الدفع»). Then: - Shoppers whose checkout language is Arabic see the name in **Name for Arabic shoppers**. The default is «الدفع عند الاستلام», which means "payment on receipt". - Every other shopper sees the name in **Name for other shoppers**. The default is "Cash on Delivery". You can edit both names, then press **Save rules**. The rename is included in the free plan. A few details decide which name a shopper sees: - Only the checkout language counts. A shopper in Riyadh who uses your English checkout sees the English name, and your own admin language makes no difference. - Your store needs an Arabic checkout. Shoppers get one only after Arabic is added and published in **Settings > Languages**. Shopify says that after you publish a language, checkout is shown in the customer's language. See [how to offer an Arabic checkout on Shopify](/guides/arabic-checkout-shopify/). - If you leave a name empty, shoppers in that language see the method's original name, such as Shopify's "Cash on Delivery (COD)". - When one of your rules hides COD, there is no name to show. The shopper sees only your other payment methods, in either language. - The app renames only the payment methods it recognises as Cash on Delivery. The list of names is in [what Khaleeji COD never changes](/help/what-never-changes/). To check both names, open a draft order's checkout link, go to the payment step, then switch the checkout to Arabic and look again. The steps are in [how to test checkout payment rules with draft orders](/guides/test-payment-rules-draft-orders/). For help choosing the Arabic wording, read [what to call Cash on Delivery in Arabic](/guides/cash-on-delivery-in-arabic/). Sources: - Shopify Help Center: Choosing your account language and region: https://help.shopify.com/en/manual/your-account/languages - Shopify Help Center: Managing languages: https://help.shopify.com/en/manual/markets/languages/manage-languages - Shopify Help Center: Localization and translation: https://help.shopify.com/en/manual/markets/languages --- # What Khaleeji COD never changes URL: https://khaleejicod.com/help/what-never-changes/ Updated: 2026-10-26 Short answer: Khaleeji COD only hides or renames payment methods it recognises as Cash on Delivery. It never changes cards, wallets, Tabby, Tamara or other methods. If its settings are missing or broken it changes nothing, and it keeps no customer data outside your store. Khaleeji COD changes one thing in your store: the Cash on Delivery option at checkout. It can hide COD for a risky checkout, or show it under a clearer name. It doesn't touch your other payment methods, your prices, your orders or your payment settings, and it keeps no customer data outside your store. ## Which payment methods can it change? Only Cash on Delivery. At every checkout, the rule first reads the name of each payment method and picks out the COD ones. A method counts as COD when its name: - contains "Cash on Delivery", "Cash-on-Delivery" or "Pay on Delivery", with any capital letters. Shopify's built-in "Cash on Delivery (COD)" method matches; - contains «الدفع عند الاستلام», «الدفع عند التسليم» or «الدفع نقدا عند الاستلام»; - or is exactly "COD", "(COD)" or "C.O.D". A method with any other name is left alone, even if shoppers pay cash at the door with it. The app has no setting for adding other names. If your COD method is called something else, see [troubleshooting](/help/troubleshooting/). ## What does it never change? - Card payments, Apple Pay and other wallets, buy now pay later methods such as Tabby and Tamara, bank transfer, and any other method whose name isn't on the list above. - The order of your payment methods. The app hides or renames COD and does nothing else. - Prices, shipping rates and totals. It adds no fee and no discount. - Your payment settings. The COD method stays active in **Settings > Payments**. The app only changes what the shopper sees in that one checkout. - Orders that already exist. It can't cancel or edit an order, or mark one as paid. - Your Shopify admin and POS. Shopify doesn't run payment customizations there, or when you create a draft order and collect payment inside the admin, so your staff see COD as normal. > **Note:** When a rule hides COD, the shopper still sees every other payment method you have > switched on. If COD is your only active payment method, a matching rule leaves that shopper > with no way to pay. Turn on at least one online method before you switch rules on. ## What happens if the settings are missing or broken? Nothing changes. When something is wrong with the settings, COD shows as usual: - If no settings have been saved yet, or the saved settings can't be read, the rule makes no changes. COD shows with its normal name. - If no payment method in the checkout is recognised as COD, the rule makes no changes. - A rule that's switched on with no amount, or an amount of 0, never matches. - A region or city rule that's switched on with an empty list never matches. The app never falls back to hiding everything. ## What data does it keep? Your settings are saved in your own Shopify store, on the app's checkout rule. There's no separate account or login. The app's privacy policy, linked at the bottom of the Khaleeji COD page, says: - At checkout, the rule looks at the cart total, the customer's tags and number of previous orders, the shipping country, region and city, product tags and the checkout language. Shopify processes this inside its own systems for that checkout only. It isn't sent to the developer and isn't stored. - The app doesn't request access to customer names, email addresses, phone numbers or postal addresses, and it never sees card details. - The [refuser scan](/help/refuser-scan/) runs only when you click **Scan orders**. It reads orders placed in the last 60 days that were later cancelled (up to 1,000): the order ID, payment method names, cancellation status, and the customer's ID and tags. - Scan results and the money-lost report are worked out in your browser and aren't saved. Your choice of Arabic or English is also kept only in your browser. - A small service on Cloudflare delivers the admin page, receives Shopify's required privacy webhooks and checks which plan you're on. It doesn't store merchant or customer data. Besides the fields listed above, the scan checks whether each cancelled order has a fulfillment, so the money-lost report can count only the orders that had shipped. ## What does it write to your store? Two things, and nothing else: 1. One payment customization named Khaleeji COD, which holds your rule settings. You can see it in **Settings > Payments**: click **Manage** in the **Payment customizations** section. 2. The `cod-refused` tag on customers, and only after you click **Tag N customers** following a scan. It never adds or removes product tags, and it never removes customer tags. You add `no-cod` and `cod-blocked` yourself, in Shopify. ## What happens when you uninstall? - The checkout rule is part of the app, so it stops when the app is removed. COD then shows to every shopper again, under its original name. - The app's privacy policy says Shopify removes the checkout rule together with the settings saved on it. If you reinstall later, check your rules and press **Save rules** before you rely on them. - If you're on Pro, uninstalling cancels the subscription. The terms of service say charges already billed aren't refunded, except where the law or Shopify's policies require it. - Some things stay in your store: the `cod-refused` tags the app added, any `cod-blocked` and `no-cod` tags you added, your COD payment method, and all your orders. These are ordinary Shopify data. To remove the tags, filter your customers by tag in **Customers**. For the bigger picture of how Shopify lets apps change the payment step, read [how to hide a payment method on Shopify](/guides/hide-payment-method-shopify/). Sources: - Khaleeji COD privacy policy: https://cod-shield.codshield.workers.dev/privacy - Shopify.dev: Payment customization Function API: https://shopify.dev/docs/api/functions/latest/payment-customization - Shopify Help Center: Customizing payment methods and delivery options at checkout: https://help.shopify.com/en/manual/checkout-settings/checkout-customization --- # Troubleshooting: COD still showing, or hidden by mistake URL: https://khaleejicod.com/help/troubleshooting/ Updated: 2026-10-26 Short answer: Test in a real checkout link, not the admin. Check that the Status badge says Active and that your COD method has a name the app recognises. Then check each rule: ticked, amount in your shop's currency, exact city spelling, and a logged-in customer for tag rules. Start with the first three checks below. They apply to every rule. Then go to the section that matches what you see at checkout. ## Are you testing in a real checkout? Khaleeji COD works through a Shopify payment customization, and Shopify runs those only in the online checkout, including a draft order's checkout link. They don't run in the Shopify admin, in POS, when you edit an order, or while you create a draft order and collect payment in the admin. If you look at payment options in those places, you'll see COD as normal. To test properly: 1. Create a draft order with the products you want to test. For a customer rule, assign the test customer. 2. Open the draft order's checkout link and go to the payment step. 3. After you change your rules, start a new checkout or reload the page. A checkout you opened before saving can still show the old result. The full steps are in [how to test checkout payment rules with draft orders](/guides/test-payment-rules-draft-orders/). ## Does the Status badge say Active? Look at **Status** at the top of the Khaleeji COD page: | Badge | What it means | What to do | |---|---|---| | Active | The rule is running at checkout. | Nothing. | | Off | "Saved but switched off in Shopify settings." Your rules are saved, but the app's payment customization is switched off in Shopify. | Press **Save rules**. The app switches it back on. | | Not set up | Nothing has been saved, so nothing runs. | Choose your rules and press **Save rules**. | **Use GCC preset** only fills in the form. Nothing changes at checkout until you press **Save rules**. ## Did your rules save? After **Save rules** you should see "Rules saved." The first time, it says the app "is now live at checkout". If you see something else: - "The free plan includes 1 rule plus the Arabic name" means nothing was saved. The free plan allows one checkout rule, and the GCC preset ticks four. Untick all but one, or upgrade to Pro. A rule counts as soon as its box is ticked, even if its amount or list is empty. - "Could not save" means Shopify refused the change. Reload the page and try again. If it keeps failing, email 9090mohammad123@gmail.com with the full message. ## COD still shows for everyone The app only acts on payment methods it recognises as Cash on Delivery by name. Shopify's built-in "Cash on Delivery (COD)" is recognised. So is any name that contains "Cash on Delivery", "Cash-on-Delivery", "Pay on Delivery", «الدفع عند الاستلام», «الدفع عند التسليم» or «الدفع نقدا عند الاستلام», plus the exact names "COD", "(COD)" and "C.O.D". A custom method called, say, "Pay at the door" isn't recognised, so it's never hidden or renamed. A quick sign: with **Show a clear name at checkout** ticked, an English checkout should show your **Name for other shoppers**. If it shows a different name, the app doesn't recognise the method. The Khaleeji COD page has no setting for extra COD names, so fix the name in Shopify: - Use Shopify's built-in Cash on Delivery (COD) method. Or, in **Settings > Payments**, create a custom manual payment method whose name contains "Cash on Delivery" (for example "Pay cash on delivery"), activate it, and deactivate the old one. - Arabic names must match letter for letter. «الدفع نقدًا عند الاستلام» with the tanween mark (ً) is different text from «الدفع نقدا عند الاستلام». Remove the mark, or use «الدفع عند الاستلام». A name with "Cash on Delivery" or «الدفع عند الاستلام» also suits the refuser scan, which looks for one of those two names, or exactly "COD", in each cancelled order's payment method. If your method must keep its current name, email 9090mohammad123@gmail.com. ## COD still shows for a tagged customer - The tag must be exactly `cod-refused` or `cod-blocked`. - **Hide COD for customers tagged cod-refused** must be ticked. It covers `cod-blocked` too. - The customer must be identified at checkout: logged in to their account, or on a draft order assigned to them. In a guest checkout, Shopify may not link the checkout to their customer record, and then the rule can't see the tag. - If the person has two customer records, for example with two email addresses, the tag must be on the one they check out with. More in [how to block COD for specific customers with tags](/guides/block-cod-for-customers/). ## COD still shows on a big cart - The rule must be ticked and have an amount. An empty amount or 0 never matches. - Amounts are in your shop's currency, shown next to the box. If your shop currency is USD and you typed 1500 meaning AED, the limit is USD 1,500. Carts in other currencies are converted to your shop's currency before the check. - "Above" means more than. With a limit of 1,500, a cart of exactly 1,500 keeps COD. - The rule uses the checkout total Shopify gives it, the amount the shopper is asked to pay, so a discount code can bring a cart back under your limit. - The first-order rule only applies to guests and to customers with 0 previous orders. ## COD still shows in a blocked emirate, region or city - Region codes are the country code, a hyphen and Shopify's region code: `AE-AZ` for Abu Dhabi, `AE-FU` for Fujairah. A name such as "Abu Dhabi" doesn't work in the region box. - Region codes are confirmed for UAE emirates only. Shopify's checkout asks for no region in Saudi Arabia, Qatar, Bahrain or Oman, and Kuwait's region codes don't fit the app's format, so use the city rule in those countries. - A city must match the whole name the shopper typed, ignoring capital letters and spaces at the ends. "Al Ain", "Al-Ain" and «العين» are three different names to the rule, so add each spelling your shoppers use, separated by commas. - Both rules read the shipping address. Until the shopper has entered one, there is nothing to match. See [how to limit COD by emirate, region or city](/guides/limit-cod-by-emirate-or-city/). ## COD is hidden when it shouldn't be COD is hidden when any ticked rule matches, so check each one: - Guests always count as first orders, because the rule can't see their order history. With the GCC preset, a guest cart above 500 loses COD, even for a loyal customer who didn't log in. - One product tagged `no-cod` hides COD for the whole cart. - The customer may have a `cod-refused` tag from an earlier scan. If that was a mistake, remove the tag in **Customers**. - An amount may be lower than you meant, or typed with a different currency in mind. - A region code covers the whole emirate or region, not one city in it. - Another app may be hiding payment methods too. In **Settings > Payments**, click **Manage** in the **Payment customizations** section and look for customizations from other apps. ## The Arabic name doesn't show - **Show a clear name at checkout** must be ticked, with a name in **Name for Arabic shoppers**. - The shopper's checkout must be in Arabic. The language of your admin page doesn't matter. - When a rule hides COD, there is no name to show. See [using Khaleeji COD in Arabic](/help/arabic-admin/). ## The money-lost report shows less than you expect - The report counts only cancelled COD orders that had shipped, meaning Shopify has a fulfillment recorded on the order. If you send parcels without marking orders as fulfilled, they count as never shipped. - The scan only covers orders placed in the last 60 days. - Both shipping costs start at 0 each time you open the app. Type them in again. See [how the money-lost report is calculated](/help/money-lost-report/). ## Still stuck? Email 9090mohammad123@gmail.com with what you expected, what you saw, the cart total and currency, whether the shopper was logged in, the shipping city, and a screenshot of your rules. Never send passwords. Sources: - Shopify.dev: Payment customization Function API: https://shopify.dev/docs/api/functions/latest/payment-customization - Shopify Help Center: Customizing payment methods and delivery options at checkout: https://help.shopify.com/en/manual/checkout-settings/checkout-customization - Shopify Help Center: Manual payment methods: https://help.shopify.com/en/manual/payments/manual-payments