← all articles

How to handle returns and refunds on Shopee and Lazada and protect margin

Returns are where a decent margin quietly disappears. You pay the outbound shipping, the platform may keep some fees, the buyer gets a refund, and the item comes back damaged or does not come back at all. One lost return on a S$30 item can wipe out the profit from several good orders. It is almost never one big event; it is a slow leak from small, unlogged cases.

This tutorial is for small and mid-size sellers on Shopee and Lazada, mainly in Singapore, with notes where Malaysia, the Philippines and other markets differ. The goal is a repeatable routine: respond inside the platform’s window, keep the right evidence, dispute only the cases worth disputing, and track the real cost of each return so you can price and source around it.

One honest caveat up front. Return windows, response deadlines, who pays return shipping and which fees are refunded all change, and they differ by market, category and programme. I have not re-verified the exact numbers in each seller centre for this draft (20 October 2026), so I do not quote day counts as fact. Where a number matters, I tell you where to read it and ask you to write it into your own sheet with the date.

What you need

  • active seller accounts: Shopee Seller Centre and Lazada Seller Center for your market, with notifications turned on in the seller app
  • the official policy pages, bookmarked: the Shopee Seller Education Hub and Lazada University for your country
  • a phone for photos and short videos, plus a well-lit packing bench
  • a scale and a tape measure, since weight and dimension disputes with couriers are common
  • a spreadsheet or small database for a returns log (free, Google Sheets is fine)
  • Python 3 if you want to run the margin script below (optional)

Not legal or tax advice, but if you are GST registered in Singapore, ask your accountant how refunds and credit notes affect your GST returns. I cover the basics in GST basics for Singapore marketplace sellers, and the primary source is IRAS.

Step by step

1. Read and record the current rules for your market

Action: open the return and refund policy pages for your market on the Shopee Seller Education Hub and Lazada University. Copy into a sheet, with today’s date: the buyer’s request window, your response deadline, who pays return shipping, which fees are refunded on a refunded order, what counts as a seller-fault return, and how the platform’s dispute step works.

Expected output: a one-page “rules as of month year” table for each platform and market. Mine has columns for platform, market, rule, value, source URL and date checked.

If it breaks: policy pages are sometimes in a different language or behind a login, and a help article may contradict the seller app. Trust the seller app screen for the live order, and screenshot it. If you cannot find a number, write “unverified” in the cell rather than guessing.

2. Capture evidence before the parcel leaves

Action: for every order above your threshold (I use anything over S$20 landed cost, and every serialised or fragile item), take a short video at packing: item out of stock, condition check, any serial number, item into the box, box sealed, label visible. Save it under the order number. Also photograph the sealed box on the scale.

Expected output: a folder per day, one file per order, named with the platform order ID.

If it breaks: if volume is too high for video on everything, do photos on everything and video on high-value or high-return SKUs. Phone storage fills quickly, so sync to cloud storage nightly and delete from the phone. Keep the evidence for at least as long as the longest dispute window you recorded in step 1.

3. Handle the incoming request inside the window

Action: check the seller app and seller centre twice a day for return and refund requests. For each one, note the buyer’s stated reason, their attached photos, and the deadline shown on screen. Then pick a response: accept the refund, accept a return, offer a partial refund, or dispute.

Expected output: every request has a decision logged in your sheet, before the deadline shown in the app.

If it breaks: platforms commonly treat silence as acceptance or escalate it automatically, which is the costliest outcome because it throws away your evidence window. If you are on leave, set a colleague up with a sub-account or a shared phone routine. I do not know the auto-action rule in every market, so confirm it in step 1.

4. Decide: refund only, return and refund, or dispute

Action: use a simple rule. Low-value item, credible complaint (wrong size, minor defect): refund without return and write it off, because return shipping plus handling plus time often exceeds item cost. Higher-value item, or reason does not match your evidence: ask for the return. Buyer claims “not received” while tracking shows delivered, or the claim is “item not as described” and your video shows otherwise: dispute with evidence.

Expected output: a decision per case tagged as write-off, return, or dispute.

If it breaks: do not dispute everything. Each dispute costs time and some platforms weigh your dispute history. Pick the cases where the evidence is clear. Also be straight with buyers. If you did ship the wrong item, say so and fix it. Singapore sellers should also know the Consumer Protection (Fair Trading) Act exists, so do not make claims in listings that you cannot back up.

5. Run the return shipment properly

Action: once you accept a return, make sure the buyer ships it through the platform’s arranged return courier, not by an ad hoc courier, so tracking is attached to the case. For J&T specifically, see how Shopee sellers handle J&T Express drop-off and delivery issues.

Expected output: a return tracking number linked to the case, and an expected arrival date in your log.

If it breaks: if the return is lost in transit, if the box arrives empty, or if it contains a different item, film the unboxing from the sealed state. Photograph the label and the weight. Raise the case in the app with that video before you confirm receipt. Confirming receipt first is a classic way to lose a dispute.

6. Inspect on arrival and resolve

Action: open the returned parcel on camera. Check against your packing record: right item, right quantity, serial number, accessories, hygiene seals. Then either confirm receipt and let the refund complete, or dispute with the video and photos if the item is wrong, damaged or used beyond what is acceptable for the category.

Expected output: each return closed in the platform as refunded, rejected, or disputed, with a restock decision (resell as new, resell as open box, scrap).

If it breaks: if the platform’s decision goes against you despite clear evidence, check whether there is an appeal step and what its window is. Record the outcome in your sheet.

7. Log the true cost of each return

Action: for every closed return, log sale price, item cost, outbound shipping you paid, return shipping you paid, fees the platform did not refund, and whether the item can be resold. To see where the cash actually lands, reconcile against your payout statements. On Lazada, how to find your Lazada payment and money report shows where the adjustments appear.

Here is the small script I use on a CSV export of my log:

import csv
from collections import defaultdict

# columns: order_id,platform,sku,sale_price,item_cost,ship_out,ship_back,fees_kept,resellable
loss_by_sku = defaultdict(float)
count_by_sku = defaultdict(int)

with open("returns_log.csv", newline="", encoding="utf-8") as f:
    for r in csv.DictReader(f):
        cost = float(r["item_cost"])
        resellable = r["resellable"].strip().lower() == "yes"
        # if resellable we recover item cost, otherwise we eat it
        item_loss = 0.0 if resellable else cost
        loss = item_loss + float(r["ship_out"]) + float(r["ship_back"]) + float(r["fees_kept"])
        loss_by_sku[r["sku"]] += loss
        count_by_sku[r["sku"]] += 1

for sku, total in sorted(loss_by_sku.items(), key=lambda x: -x[1]):
    n = count_by_sku[sku]
    print(f"{sku}: {n} returns, total loss {total:.2f}, avg {total/n:.2f}")

Expected output: a ranked list of SKUs by return loss. The top three are your problem products.

If it breaks: a KeyError means your CSV headers do not match the comment line. Fix the headers, not the script. If fee data is missing, leave fees_kept at 0 and note that your loss is understated.

8. Feed the numbers back into pricing, listings and sourcing

Action: for your top loss SKUs, pick one fix each. Common ones: better size charts and photos, a stronger packing method, a tougher supplier QC check, removing the SKU, or raising the price to absorb an expected return rate. Your expected rate is your own logged history, not an industry figure. Check whether free shipping programmes change your return shipping exposure. See how Lazada’s Free Shipping Max programme works for sellers for the funding side.

Expected output: a monthly review where one or two SKUs get changed and you note the effect in the next month’s log.

If it breaks: with fewer than a few dozen orders per SKU the return rate is noise. Wait for more data before dropping a product.

Common pitfalls

  • missing the response window: the most expensive mistake and the easiest to avoid. Set a daily check and put the deadline in your log.
  • confirming receipt before inspecting: once you confirm, your dispute position weakens. Film first, confirm second.
  • no packing evidence: without it, “item not as described” and “empty box” claims are your word against theirs.
  • treating the platform rules as the same everywhere: Shopee and Lazada differ from each other, and each differs by market. Philippine Lazada sellers should also check fee exceptions, see commission fee exceptions Philippine Lazada sellers should know.
  • opening extra shops to escape a bad return record: Shopee and Lazada generally do not allow one seller to run multiple shops to get around performance penalties. Check the seller terms for your market.
  • pushing buyers to cancel off-platform or change ratings: do not do this. It breaks platform rules and can end your account.

Scaling this

At 10x (roughly tens of returns a month): a spreadsheet and a phone are enough. The win is discipline: the packing video, the daily check, the monthly SKU ranking.

At 100x (a few hundred returns a month): you need a dedicated returns bench and one person responsible for it. Export order and return data from each platform’s seller centre or API on a schedule and load it into one database, so the script above runs on real volume. Think about fulfilment too. Platform-run fulfilment changes who handles returns and what you are charged, so compare options in fulfilment options on Shopee, Lazada and TikTok Shop explained.

At 1000x (thousands of returns a month): returns become an operations function. You will want barcode scanning at receiving, grading rules (A, B, scrap) with different resale channels, supplier chargebacks for defect-driven returns, and a reserve in cash flow for refunds in transit. If you are financing stock, read the terms carefully, and see business loans and cash advances from Shopee, Lazada and other marketplaces explained before leaning on repayment that is netted from payouts. I would not size any financing around an assumed return rate.

Where to go next

We are not affiliated with Shopee, Lazada or TikTok Shop. Always treat the live seller centre for your market as the source of truth over anything here.

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-10-20.

free download
Multi-store setup checklist for Shopee, Lazada and TikTok Shop

What each platform allows for running more than one shop, and what to set up per store, as of September 2026. Leave your email and we will also tell you when we publish a new guide, a few times a month at most.

from the team behind this site
A dedicated real phone for each store you run

cloudf.one hosts real Android phones in Singapore, each on its own persistent Singapore mobile IP, and you open them from the browser. Useful if you run Singapore stores and want one phone per store or brand instead of a drawer of handsets.

see how cloudf.one works →
read on
More from the desk

Store operations, platform rules, fees and pricing for Shopee, Lazada and TikTok Shop sellers, with dates on anything that can change.

browse all articles →