A customer buys something for RM49. You see the order come in.
Good day.
Then commission comes off. Then the transaction fee. Then your share of the free shipping programme you opted into because every seller opts into it. Then the campaign fee from the flash sale it was part of. Then the ad that brought the buyer in.
Two weeks later, a few customers return the product.
By the time the payout lands, what was a RM49 sale becomes almost negligible, or even cost you money to sell.
Working out your true net profit after marketplace fees is the least glamorous job in e-Commerce. And it’s often the reason why even growing stores that sells a lot, are not profitable.
Key takeaways
- Rebuild one order end to end before you try to fix anything.
- Identify all the fees that are imposed for one purchase.
- Cancellations and returns eats into your margins.
Why revenue growth can mask profit
Revenue is the easiest number to see. But it doesn’t tell much.
Most marketplace platform dashboard reports revenue. Sellers tend to celebrate their revenue milestones.
But with the fees structure underneath it that constantly changes, it’s hard to find out how much you’re paying in fees and commissions until you spot them in your P&L, end of the month.
Here’s what typically happens.
You grow 30% year on year. Commission moves up a tier because your category rate changed. You join more campaigns because campaigns drive volume. You lean harder on free shipping because conversion drops without it. Ad costs rise because more sellers are bidding. Every one of those is individually reasonable. Together they can take five to ten points off your net margin while revenue climbs the whole way.
Nobody notices until cash gets tight, and by then you’ve been reinvesting into products that were never profitable.
The second problem is allocation. Without per-SKU truth, you’re funding decisions with an average. You promote the product with the best-looking revenue, you reorder the one with the highest unit sales, and both of those can be your thinnest earners.
Every fee between “Sold” and “Paid”
Here’s the full stack. Rates vary by category, seller tier, programme enrolment and platform changes, so treat the ranges as prompts to check your own statement rather than as fixed figures.
| Deduction | What it is | Where to find it |
|---|---|---|
| Commission | Percentage of item price, varies by category and seller tier | Shopee Seller Centre fee schedule, Lazada seller fee page |
| Transaction fee | Payment processing on the total paid, including shipping | Order income statement |
| Service or programme fees | Free Shipping Programme, Cashback, and similar opt-ins | Programme settings, deducted per order |
| Campaign fees | Charged for participation in certain campaigns and flash sales | Campaign terms at registration |
| Ad spend | Attributable to the product, not the account | Marketing Centre, per campaign |
| Shipping shortfall | The gap between what the buyer paid and actual courier cost | Order income statement |
| Reverse logistics | Return shipping, restocking, damaged units | Returns report |
| Voucher share | Your funded portion of seller vouchers | Voucher settings |
Cancellation and return tax nobody measures
This is the part most sellers leave out, which ends up costing the business the most.
When an order get cancelled after you’ve shipped, or comes back as a return, you don’t just lose the margin. You pay:
- Outbound shipping you’ve already spent
- Return shipping, depending on the reason and who bears it
- Packaging, consumed
- Handling time on both ends
- The unit itself, if it comes back damaged or opened and can’t be resold as new
- The knock-on effect on your seller metrics if cancellations were your fault
The way to price this correctly is as a percentage tax on every unit you sell, not as an occasional bad-luck event.
Return-adjusted profit per unit = net profit per unit × (1 − return rate) − (return cost per returned unit × return rate)
Example: A product nets RM18 a unit before returns, with a 9% return rate and RM14 of cost per returned unit:
(RM18 × 0.91) − (RM14 × 0.09) = RM16.38 − RM1.26 = RM15.12
That’s 16% off your net profit on that SKU, taken quietly, every single month. On a channel with a 20% return rate the same maths gets ugly very fast.
Rebuild one order, properly
Do this once by hand, with a real order.
Pick a product you consider a winner and pull one completed order for it. Then fill this in from your actual income statement, not from estimates:
| Line | Example |
|---|---|
| Item price paid by buyer | RM49.00 |
| Commission | −RM3.43 |
| Transaction fee | −RM1.03 |
| Free shipping programme share | −RM2.20 |
| Campaign fee | −RM0.98 |
| Voucher share (seller funded) | −RM2.00 |
| Net revenue received | RM39.36 |
| COGS (landed) | −RM24.00 |
| Packaging | −RM1.20 |
| Ad spend share for this SKU | −RM4.10 |
| Net profit before returns | RM10.06 |
| Return provision at 9% | −RM1.85 |
| True net profit | RM8.21 (16.8%) |
The RM49 sale is a RM8.21 sale.
Now run the same maths on the SKU you thought was your best performer, and specifically on one that sells mainly through campaigns and ads.
Sidenote. This is exactly what BRP was built to do, and it’s the core of the product rather than a feature on the side. True net profit per SKU after all fees, calculated across Shopee, Lazada, TikTok Shop and your own site, instead of a monthly manual reconciliation nobody has time to repeat. The Gross Sales → Net Revenue → Gross Profit → True Profit funnel on the dashboard shows the same deflation at store level, and the True Profit Calculator under Resources does a single SKU by hand if you want to check one product before trusting anything automated.
What to do with what you find
Sort your top 20 SKUs by true net margin percentage, not revenue. Then act by band.
- Negative or near-zero margin. Stop advertising them today. Ads on a losing SKU accelerate the loss. Then decide between repricing, resourcing at a better landed cost, or removing them.
- Under 10%. Reprice or restructure. Options in order of ease: raise price by 5% to 8% and watch conversion for two weeks, cut the seller-funded voucher share, reduce campaign participation, renegotiate landed cost at the next order, or lighten packaging.
- 10% to 20%. Fine, but watch them. These are the ones a single fee change or an ad cost increase pushes into trouble.
- Above 20%. These fund the business. Give them the ad budget, the promo slots and the reorder priority.
Two structural fixes worth considering alongside the per-SKU work:
- Free shipping thresholds. If your subsidy share is a major line, raising the free-shipping minimum lifts basket size and cuts the per-order subsidy at the same time.
- Campaign selectivity. Not every campaign is worth its fee. Check the true net profit of orders that came through campaigns against your baseline, and stop joining the ones that lose money for volume.
Turn this into a system
Monthly: reconcile one channel’s payouts against your expected fees. You’re looking for a gap between what you thought you’d be charged and what actually came off.
Quarterly: rebuild the full per-SKU true net margin table. Fee structures, ad costs and landed costs all move, and a table built on last quarter’s assumptions puts products in the wrong bands.
Every time a platform announces a fee or programme change: re-run your bottom ten SKUs specifically. Those are the ones that cross into negative first, and they’ll do it silently.
FAQs
What fees do Shopee and Lazada actually charge sellers?
The main ones are commission on the item price, a transaction fee on the total paid, and optional programme fees such as free shipping or cashback participation. On top of that sit campaign fees for certain promotions, your ad spend, seller-funded voucher shares and return costs. Rates vary by category, seller tier and current promotions, so always work from your own income statement rather than a published summary.
Why is my revenue growing but my profit falling?
Usually because fee load, campaign participation and ad spend have all crept upward while your prices stayed flat. Each change is small enough to ignore individually, and none of them appear in a revenue chart. Rebuilding one order end to end, then comparing today’s true net margin against the same product a year ago, generally shows exactly where the points went.
How do I calculate true net profit per SKU?
Start with the price the buyer paid, subtract every platform deduction on the income statement, then subtract landed COGS, packaging, the ad spend attributable to that SKU, and a return provision based on that product’s actual return rate. What remains is your true net profit. Doing it once by hand is worth it, since it shows you which fee lines matter most in your category.
Should I include ad spend in per-product profit?
Yes, otherwise you’ll conclude that heavily advertised products are your most profitable ones when they may be your least. Attribute ad spend to the specific SKU rather than spreading it evenly across the catalogue, since even allocation makes advertised products look better and unadvertised ones look worse than they are.
How much should I budget for returns and cancellations?
Use your own actual rate per product rather than a general figure, because return rates vary enormously between categories and channels within the same store. Apply it as a percentage tax on every unit rather than treating returns as occasional bad luck, and recalculate it per channel, since some channels return far more than others.
Final thoughts
There’s no clever trick in this one. It’s arithmetic that nobody enjoys doing, which is exactly why it stays undone and why it’s where the money is.
Rebuild one order today. Pick the product you’re proudest of, take every deduction off it honestly, and see what’s actually left. Then do your top five, and let that table decide what you promote, advertise and reorder next.
Find out how much cash is sitting in dead stock right now
Connect your Shopee, Lazada, and TikTok Shop stores to BRP and let slow-movers surface automatically, before they cost you a quarter's worth of markdowns.
Start Your Free 2-Week Trial →No credit card required · Takes under 5 minutes to connect
Leave A Comment