How to stop fake COD orders that get cancelled after shipping
An order comes in on cash on delivery, you pack it, the courier collects it, and a few hours later the buyer cancels or refuses the parcel. You paid for the packaging and the time, and you may have paid a return or failed delivery cost too. Do that ten times a week and it hurts. A Lazada seller asked this question in the Lazada Malaysia seller community.
The direct answer: you can’t fully stop it, and I would be wary of anyone who says they can. Lazada owns the checkout, the buyer accounts and the courier flow, so you can’t block a buyer at the door. What you can do is make fake orders more expensive for the buyer, catch the obvious ones before they ship, and keep clean evidence for the ones that slip through. That is what this tutorial covers.
This is for small and mid-size Lazada sellers in Singapore, Malaysia and the other SEA markets who take COD and are seeing cancellations after the ship-out. I assume you use Lazada Seller Center, not an API integration, though the ideas carry over to Shopee and TikTok Shop with different menus. The outcome is a repeatable routine that cuts down the losses and gives you a data trail. It won’t take them to zero.
what you need
- a Lazada seller account with access to orders, chat and the seller support ticket form. Menu names change between markets and over time, so check your own Seller Center rather than trusting my screenshots from memory
- a spreadsheet tool (Google Sheets or Excel) and, optionally, Python 3 if you want to run the scripts below
- a phone or webcam set up at your packing table to film each parcel being packed
- a kitchen scale or parcel scale, roughly S$15 to S$30 locally
- a written internal rule for who is allowed to cancel, return or mark orders, especially if you have staff
- about two hours to set up, then 10 to 15 minutes a day
No paid tools are required.
step by step
step 1: export your last 60 to 90 days of orders
Action: in Seller Center, open your orders list, filter by payment method COD and by status cancelled, failed delivery or returned, and use the export option to download a CSV. If your export doesn’t include cancellation reason or timing, copy those columns in manually for the worst offenders. What the export includes varies by market.
Expected output: one CSV with order ID, order date, SKU, quantity, order value, city or postcode, buyer name (masked or not), and final status.
If it breaks: if the export button is missing or the file is empty, check that your date range isn’t over the limit for a single export and try 30 day chunks. If it still fails, raise a ticket with Seller Support and export by hand from the order list in the meantime.
step 2: find the pattern in the data
Find out what your fake orders look like. Run a quick summary. Adjust the column names to match your file.
import pandas as pd
df = pd.read_csv("orders.csv")
cod = df[df["payment_method"].str.contains("COD", case=False, na=False)]
cod["bad"] = cod["status"].isin(["Cancelled", "Failed Delivery", "Returned"])
print(cod.groupby("sku")["bad"].mean().sort_values(ascending=False).head(10))
print(cod.groupby("postcode")["bad"].agg(["mean", "count"]).query("count >= 5").sort_values("mean", ascending=False).head(10))
print(cod.groupby(pd.cut(cod["order_value"], [0, 20, 50, 100, 300, 10000]))["bad"].mean())
Expected output: three small tables showing which SKUs, postcodes and price bands have the worst bad-order rate. In my experience a small number of SKUs and one or two price bands account for most of the trouble, but check your own data because yours may differ.
If it breaks: a KeyError means your column names differ from mine. Print df.columns and rename. If the counts per postcode are tiny, drop the postcode table and rely on SKU and price band.
step 3: confirm the order in Lazada chat before you pack
Action: for orders that match your risky pattern, send one short message through Lazada’s own chat asking the buyer to confirm the address and that they still want the item. Keep it on the platform. Moving buyers to WhatsApp or another channel to confirm is against platform rules and can put your shop at risk.
A message I use: “Hi, thanks for your order. Can you confirm the delivery address and that someone will be home to pay on delivery? We ship once you reply.”
Expected output: a real buyer usually replies within a few hours. A fake or spam order often stays silent or replies with nonsense.
If it breaks: if you can’t answer chat fast enough, your chat metrics will suffer. My chat response rate guide covers templates and shift setups so this doesn’t become a second problem.
step 4: hold risky orders, but stay inside your handling time
Action: use the hold window, not a refusal. Lazada expects you to ship within your set handling time. Within that window, park the risky, unconfirmed orders at the end of the queue and pack them last, so you give the buyer the full time to reply. Don’t blow through the deadline, because late shipment counts against you and feeds into the metrics described in the Lazada shop ranking guide.
Expected output: a short daily list of held orders with the time each one becomes due to ship.
If it breaks: if orders keep hitting the deadline unconfirmed, ship the low-value ones and keep holding only the higher-value ones. Losing a cheap parcel is better than a late shipment penalty.
step 5: check what COD options your account offers
Action: look in Seller Center for any setting that limits COD, and read the current seller policy pages for your market. I can’t confirm from here that every market offers a per-product or per-shop COD switch as of September 2026. If you find one, consider turning COD off for the worst SKU or price band from step 2. If you don’t, ask Seller Support directly whether it is available for your account.
Expected output: either a setting you can use, or a written answer from support. Save that answer.
If it breaks: if support gives a generic reply, ask one specific question: “can COD be disabled for SKU X, and if not, what is the process for repeated COD cancellations after shipping?” A specific question tends to get a specific answer.
step 6: film and weigh every parcel
Action: for every COD parcel, film a continuous clip: show the label, the item, the packing, the sealing, and put it on the scale so the weight is visible. Name the file with the order ID. Store it for at least the return window.
Expected output: one short clip per order, easy to find by ID.
If it breaks: if it slows you down at volume, film only the high-value orders and photograph the rest. The point is that you can prove what left your hands if a buyer claims something else, or if a dispute needs evidence.
step 7: raise cancellations with evidence, and set expectations
Action: for each cancellation after ship-out, open a ticket through Seller Support with the order ID, the courier tracking history, your chat log, and your packing clip. Ask what compensation or remedy applies to your case. Treat compensation as a bonus, not something to plan around.
Expected output: a ticket reference number per case, and over time, a picture of which cases Lazada resolves in your favour.
If it breaks: if tickets keep getting closed without action, keep a log anyway. A pile of dated, well documented cases is more useful when you escalate than a handful of angry messages.
step 8: keep a private repeat-offender list
Action: log repeat bad addresses and phone numbers in a private sheet. Store hashes rather than raw numbers where you can, so a leak of your sheet doesn’t expose buyers.
import hashlib, re
def norm(phone: str) -> str:
return re.sub(r"\D", "", phone)[-8:]
def h(phone: str) -> str:
return hashlib.sha256(norm(phone).encode()).hexdigest()[:16]
print(h("+65 9123 4567"))
Expected output: a short hash per number that you can match against new orders when the phone number is visible to you.
If it breaks: if Lazada masks buyer phone numbers on the order, you can’t match them. Use address fragments (block, unit, postcode) instead. Also keep in mind personal data rules: in Singapore the PDPC sets out obligations for how organisations collect, use and protect personal data. This is not legal advice, so read the PDPC guidance for your market or ask a qualified adviser before you keep buyer data long term.
step 9: lock down who can cancel and return
Action: some “fake orders” turn out to be staff errors, such as a returned parcel marked wrong or an order cancelled by mistake. Give staff only the Seller Center permissions they need. My guides on giving staff access in Lazada Seller Center and securing seller accounts and offboarding staff cover this in detail.
Expected output: only two or three named people can change order status, and every change is traceable.
If it breaks: if you can’t tell who changed what, check whether your sub-accounts are shared. Shared logins make an audit impossible, so give each person their own.
common pitfalls
- confirming over WhatsApp or SMS: it feels faster, but taking buyers off the platform breaks the rules and can cost you more than the parcel is worth
- refusing to ship at all: blanket cancelling of orders you suspect hurts your cancellation rate and your ranking. Hold, confirm, then ship or explain, inside your handling time
- guessing instead of measuring: sellers block whole regions on a hunch. Run step 2 first, because the bad orders are often concentrated in a SKU or price band, not a place
- no evidence trail: without the clip, chat log and tracking history, a ticket is your word against a system record
- treating every cancellation as fraud: some buyers genuinely change their mind or miss the courier. Judge by repeat behaviour and patterns, not one order
scaling this
At 10x, meaning a few dozen COD orders a day, you can do all of this by hand. One person runs the export weekly, checks the summary, chats to a handful of risky buyers and films parcels.
At 100x, say a few hundred a day, the manual bits break. Automate the export and the summary script on a schedule, and write down a risk score rule (for example, new buyer plus high value plus repeat SKU) so any packer can apply it the same way. Chat confirmation needs a rota, and this is where the chat response guide really pays off. Track cost per bad order weekly so you know if the routine is working.
At 1000x, you are past what a spreadsheet can safely hold. Move the offender data into a proper database with access control, pay closer attention to data protection duties, and ask your Lazada account manager (if you have one) about platform-level tools for your category. At this volume the answer is partly commercial: negotiate with the platform, and consider whether some products should simply not be sold on COD.
where to go next
- how to maintain and improve your Lazada shop ranking, since cancellations and late shipping both feed your shop metrics
- how to improve chat response rate across stores, to make the confirmation step in step 3 sustainable
- how to secure seller accounts and offboard staff, to keep order status changes traceable
- the full list of tutorials is on the blog index
I’m not affiliated with Lazada, Shopee or TikTok Shop, and their policies and Seller Center menus change. Check your own account and the current seller policy pages before relying on anything above.
Written by Xavier Fok
disclosure: this article may contain affiliate links. if you buy through them we may earn a commission at no extra cost to you. verdicts are independent of payouts. last reviewed by Xavier Fok on 2026-09-29.