Should you offer cash on delivery on WooCommerce in Thailand?
Offer WooCommerce cash on delivery in Thailand if your buyers expect it, but put limits around it: enable it only for the shipping methods and areas where your courier collects cash, consider an order value ceiling, confirm orders before shipping, and give buyers a reason to choose PromptPay instead.
Plenty of Thai shoppers, especially first-time buyers from a store they have never heard of, want to see the parcel before they pay. Cash on delivery removes that doubt, so offering it can win orders that would otherwise go to a marketplace. The trade-off is that you carry the risk: you pay to ship, the courier holds your money for a while, and some buyers simply refuse the parcel at the door.
The sections below show how to do each of those in WooCommerce and in your daily routine.
We have not quoted a share of Thai orders paid by COD here, because published figures vary by study and year. Your own order data is the number that matters: check what share of your orders are COD and how many of those are refused.
How do you switch on COD in WooCommerce?
Cash on delivery ships with WooCommerce itself, so no extra plugin is needed to switch it on. The settings live under WooCommerce, then Settings, then Payments. The steps below follow the WooCommerce documentation linked in the sources.
- Step 1
Open the payment settings
Go to WooCommerce, Settings, Payments and find Cash on delivery.
- Step 2
Switch it on and name it
Use a clear title such as "Cash on delivery (pay the courier)" and a short description.
- Step 3
Write the instructions
Tell buyers to have the exact amount ready and that you may call to confirm the order.
- Step 4
Choose shipping methods
Under Enable for shipping methods, select only the methods where your courier collects COD.
- Step 5
Leave virtual orders off
Keep Accept for virtual orders unticked unless you have a real reason.
- Step 6
Place a test order
Check the checkout, the order email and the order status from start to finish.
Two settings matter more than they look. "Enable for shipping methods" lets you offer COD only with the methods whose courier actually collects cash, for example your Flash Express rate but not a self-pickup or international option. "Accept for virtual orders" should normally stay off, since there is no parcel to pay for. Write the instructions text in both Thai and English if your store is bilingual, because it appears on the thank-you page and in the order email.
Limiting COD by value, zone or product
Out of the box, WooCommerce only restricts COD by shipping method. Most stores want finer rules, which usually come from a conditional payments plugin or a small piece of custom code. Rules worth considering:
- A maximum order value. A refused parcel worth a few hundred baht is a nuisance; a refused parcel of electronics worth tens of thousands ties up stock and cash. Many stores offer COD only below a ceiling they set from their own margins.
- Shipping zones. If refusals cluster in certain provinces or your courier charges more for remote areas, set up shipping zones and offer COD only in the zones where it works for you.
- Products. Made-to-order, personalised or perishable items cannot be resold if refused. Exclude them from COD, or ask for a PromptPay deposit instead.
- New versus returning customers. Some stores offer COD only to buyers with a completed previous order. It needs custom logic and careful wording so it does not feel like an accusation.
Charging a COD fee
Couriers charge you for collecting cash, and a store can pass some or all of that on. WooCommerce does not add a payment fee by itself; a fee plugin can add a line at checkout when COD is selected. Show it clearly before the order is placed, call it what it is, for example "COD service fee", and keep it close to your real cost. A surprise fee on the order summary is a good way to lose the sale.
Courier COD services and remittance
The WooCommerce side only records that the buyer will pay cash. The courier collects the money and transfers it to you later, minus its COD fee. That gap between delivery and payout is working capital you do not have, and for a growing store it can add up quickly.
| Courier | Offers COD for sellers | Where to check fees and payout timing |
|---|---|---|
| Thailand Post | Yes, through its COD service | Thailand Post website or your local post office business counter |
| KEX Express (formerly Kerry Express) | Yes, for business accounts | KEX Express website or your account representative |
| Flash Express | Yes, for business accounts | Flash Express website or seller app |
| J&T Express | Yes, for business accounts | J&T Express Thailand website or your account representative |
The main Thai couriers all offer COD for business accounts, but fees, payout schedules and minimums change and often depend on your volume and contract. We do not quote them here. Check each courier's current business or COD page, listed in the sources, and ask your account representative for the terms in writing. Questions worth asking each one:
- What percentage or flat fee applies to COD collection?
- How many days after delivery is the money transferred, and to which bank accounts?
- What does a returned or refused parcel cost?
- Is there a report or file you can download to match payouts to orders?
Connecting courier accounts to WooCommerce for labels and tracking is a separate job, covered in our guide to shipping integrations for Thai stores.
Confirm orders before you ship
A quick confirmation before packing catches most of the problems that lead to refusals: a fake order, a wrong phone number, a buyer who changed their mind an hour later, or someone who ordered twice by mistake.
How to confirm
- A short call to the number on the order, checking the item, total and address. It is the most reliable check, and it also confirms the phone number the courier will use.
- A chat message, if the buyer contacted you through chat first. Many Thai buyers prefer LINE, so a brief confirmation there can work well; keep the wording consistent and record the reply on the order.
- An SMS or email with a link to confirm, for stores with higher volume.
Make it part of the order status
Add a custom order status such as "Awaiting confirmation" so COD orders do not go to packing until someone has confirmed them. Set a rule for unanswered orders, for example cancel after two attempts over two days, and say so in the COD instructions so buyers know to expect contact.
What do refused parcels cost, and how do you prevent them?
When a buyer refuses a COD parcel, you usually pay twice: the outbound shipping and a return charge, depending on your courier's terms. The stock is out of circulation for days, packaging is often damaged, and fragile or perishable items may not be sellable. Work out your real cost per refusal from your own courier invoices; it tells you where to set your COD order ceiling.
Ways to reduce refusals
- Confirm every COD order before shipping, as above.
- Show the full total, including shipping and any COD fee, clearly at checkout.
- Ship quickly. The longer the wait, the more likely a buyer has bought elsewhere.
- Send the tracking number so the buyer knows when the courier will arrive and has cash ready.
- Describe products accurately, with honest photos and sizes, so the parcel matches expectations.
Keeping a list of repeat refusers
Many stores want to block buyers who refuse repeatedly. A name and phone number are personal data under the PDPA, so handle such a list with care: keep only what you need, restrict who can see it, mention in your privacy notice that order history may affect payment options, and do not share the list with other businesses. Take advice if you are unsure about the lawful basis for keeping it. In WooCommerce this is usually handled by disabling COD for flagged customers rather than blocking them entirely.
Receipts and records for COD orders
COD makes bookkeeping slightly harder, because the sale, the delivery and the money arrive on different days and the payout arrives as one lump sum minus fees.
Reconcile payouts to orders
Download the courier's COD report for each payout and match every line to a WooCommerce order number. Mark orders as completed only once the cash is confirmed, not when the parcel leaves. Anything delivered but not paid out after the courier's stated period needs chasing. A simple spreadsheet works for a small store; busier stores may connect the courier report to their accounting software, as our guide to accounting software integration in Thailand explains.
Receipts and tax invoices
If your business is VAT-registered, buyers may ask for a full tax invoice with their company details, which is common for B2B orders. Add optional fields at checkout for company name, address and tax ID, so you have the details before shipping. Stores that issue e-Tax invoices can generate them from the order data once payment is confirmed. When exactly an invoice must be issued for a COD sale is a question for your accountant, since it depends on your setup.
Keep the courier's fee deductions as separate expense records rather than netting them against sales, so your revenue figures stay accurate.
Moving buyers toward PromptPay
Every order paid upfront removes the refusal risk and the wait for courier payouts. PromptPay QR is the natural alternative for Thai buyers, because paying by scanning a code in a banking app is an everyday habit for many of them. How to set it up is covered in our guide to PromptPay on WooCommerce; here is how to encourage it without forcing it.
- Show PromptPay first in the payment list and COD last.
- Offer a small benefit for prepaying, such as free shipping above a lower threshold or a small discount, costed against what refusals actually cost you.
- Keep the COD fee visible, so buyers can compare.
- For returning customers who paid by COD, mention PromptPay in the order confirmation for next time.
Card payments help too, particularly for tourists and expat buyers. Local gateways are covered in our guide with Omise, 2C2P and SCB compared, and our guide to whether Stripe is available in Thailand covers that option. If you sell products shipped by a supplier, refusals work differently; see Shopify dropshipping from Thailand.
We build stores with PromptPay, cards, COD and Thai couriers configured from the start. Our WooCommerce development service covers the setup, and the page on how much an e-commerce website costs explains our E-commerce package, from THB 50,000 as an indicative one-time price, with the final figure set in a written quote. A typical project takes about 15 days, and large catalogues can take longer.
More on payments and shipping
Sources
- WooCommerce: Cash on Delivery documentation
- Thailand Post
- KEX Express Thailand (formerly Kerry Express)
- Flash Express
- J&T Express Thailand
- Personal Data Protection Committee (PDPC)

