Ads
Shopee's own Ads Help Center defines the metric in one line: ROAS is "advertising-attributed revenue divided by advertising expenditure." [1] Lazada and TikTok Shop report it the same way [3][4]. It is mathematically clean and operationally misleading — because every term in "advertising-attributed revenue" is gross, pre-cost, and counts orders that were later returned or cancelled. The number on your dashboard is a revenue ratio wearing a profit costume.
A ROAS of 5 does not mean you made five baht. It means five baht of sales were attributed before a single cost was subtracted.
This post argues that platform ROAS and true profit have come apart far enough that optimising to the dashboard number is how disciplined sellers lose money without noticing. True ROAS — attributed revenue net of marketplace fees, vouchers, the shipping cost-share, and COGS, and net of the returns and cancellations the platform already counted — is the only version that tells you whether an ad made money. What would falsify the argument: if platform ROAS and true ROAS tracked within a few percent, the distinction would be pedantic. In the accounts we model they routinely differ by 3–4×.
What the platform number leaves out
Read the definition again: revenue, attributed, gross. Four large variable costs never enter the numerator — the Sale Transaction Fee and the payment transaction fee (Shopee non-Mall 7.49–17.12%, Shopee Mall up to 19.26%, VAT-inclusive on the schedule effective 4 August 2026, plus 3.21% on payment) [2], the seller-funded voucher, the free-shipping cost-share, and the cost of the goods themselves. On TikTok Shop the affiliate commission — up to ~20% per Seller University — is a fifth line the dashboard ROAS ignores [4]. Subtract them and a campaign reporting 5.0 lands near 1.1 in true terms on the profile worked below — at break-even, and below it once returns are netted out. The August 2026 fee revision moved that number: on the schedule this post used to quote, the same campaign cleared 1.6. This is the inverse of a low ACoS reading well — both metrics flatter you because both are computed on gross sales, not on contribution margin.
There is a second, quieter distortion that even careful "calculate your true ROAS" guides miss. The attributed revenue in the numerator includes orders that were later returned or cancelled. Marketplaces attribute the sale at order time; the reversal lands days later and is not retroactively pulled out of the ROAS you already saw. So the dashboard credits your ad for revenue that never settled. On categories with high return rates — fashion, footwear, anything size-dependent — this alone can inflate reported ROAS by double digits before any cost is even considered.
Why this makes you spend on the wrong campaigns
The damage is not just that the number is too high; it is that the error is uneven across campaigns. A campaign selling a 50%-COGS, high-voucher, return-prone SKU overstates far more than one selling a 25%-COGS, no-voucher, low-return SKU. Rank your campaigns by platform ROAS and you are ranking them by how much each one lies, not by how much each one earns. The platform's automated Target ROAS bidding then pours budget toward the campaigns with the largest overstatement, and the ad waste compounds — because the optimisation target is the inflated number.
Platform ROAS = attributed sales / ad spend = THB 100,000 / THB 20,000 = 5.0 <- what the dashboard shows
Subtract the cost stack the numerator never sees:
- COGS (50%) -THB 50,000
- Sale Transaction Fee (16.05%) -THB 16,050
- payment transaction fee (3.21%) -THB 3,210
- seller-funded voucher (5%) -THB 5,000
- free-shipping share (~3%) -THB 3,000
Contribution before ads = THB 22,740
True ROAS = THB 22,740 / THB 20,000 = 1.14
Then: ~8% of the attributed orders were returned or cancelled - already counted in the 5.0.
Adjusted true ROAS ~= 1.05 <- what actually reached the bank
Fee rates: Shopee non-Mall Sale Transaction Fee for a general-merchandise
category, 16.05% VAT-inclusive, on the schedule effective 4 Aug 2026
(4 ส.ค. 2569), plus the 3.21% Payment Transaction Fee effective 7 Apr 2026.
On the superseded 1 Jun 2026 schedule those two lines came to 17.12% and
this same campaign cleared 1.6 instead of 1.14.| Line (as % of attributed sales) | Shopee | Lazada | TikTok Shop |
|---|---|---|---|
| COGS | 50% | 50% | 50% |
| Commission + transaction fee (published schedules) | 19.26% | 16.32% | 21.94% |
| Seller-funded voucher | ~5% | ~5% | ~5% |
| Free-shipping / program cost-share | ~3% | ~3% | ~3% |
| Affiliate commission | — | — | ~12% |
| Returns + cancellations (counted in numerator) | ~8% | ~8% | ~12% |
| Platform ROAS (dashboard) | 5.0 | 5.0 | 5.0 |
| True ROAS (after the above) | ~1.05 | ~1.2 | ~0.35 |
Cost shares on a representative campaign at a 5.0 reported ROAS. The fee row is not illustrative. Shopee is the 16.05% non-Mall Sale Transaction Fee effective 4 August 2026 plus the 3.21% payment transaction fee. Lazada is the Marketplace general-merchandise Service Fee effective 1 August 2026 at its cluster midpoint, grossed up for VAT because Lazada quotes it VAT-exclusive, plus its own 3.21% payment fee. TikTok Shop is the 10.7% Normal-Seller commission effective 5 July 2026 plus the 3.21% transaction fee and the 8.03% Commerce Growth Fee, which is capped at THB 199 per item and therefore bites less on high-ticket catalogues. On these rates the same dashboard number survives as barely 1.0 on Shopee, a little better on Lazada, and well under 1.0 on TikTok Shop. Every one of these figures fell during the 2026 fee revisions; the metric is identical across platforms, and what it hides is not.
How to read true ROAS instead
The fix is to compute, per SKU, attributed revenue minus the full variable cost stack minus the returns/cancellation reversal, divided by ad spend — and then compare it to that SKU's break-even ROAS rather than to a single account-wide target. The arithmetic is simple; the work is the data plumbing — reconstructing fees, vouchers, COGS, and settled-versus-reversed orders per line. Operationally, this is what DataGlass computes: every campaign ranked against its own SKU's break-even bar on true ROAS, with returns netted out, so the budget decision follows the profit instead of the costume. The companion methodology post — how to calculate true Shopee ROAS — works the per-SKU formula in full.
Ranking campaigns by platform ROAS ranks them by how much each one overstates — not by how much each one earns.
Where this argument breaks
- The 3–4× gap is not universal. Low-COGS, no-voucher, low-return SKUs show a small gap — for them platform ROAS is a decent proxy and the extra reconstruction does not pay.
- True ROAS needs settled-order data, not just attributed-order data. If your reporting cannot separate returned and cancelled orders from completed ones, the returns adjustment is an estimate, not a measurement.
- Below ~THB 200,000 monthly revenue, a conservative flat break-even target with a voucher cap usually beats per-SKU reconstruction on effort-adjusted terms.
Methodology
Public-data citations are the Shopee Ads Help Center (ROAS definition, Target ROAS bidding) [1], the Shopee general Help Center (commission, transaction fee, Shop Voucher, Free Shipping Program) [2], the Lazada Sponsored Solutions portal [3], the TikTok Shop Seller University affiliate-commission documentation [4], and Bain's e-Conomy SEA 2025 commentary on retail-media inflation [5]. The 5.0→1.3 illustrative pattern and the 3–4× gap reflect Thai Shopee, Lazada, and TikTok Shop accounts in the THB 200K–50M monthly revenue range that we model directly, with cost stacks reconstructed from order-line data; they are not a population claim about all sellers. Worked examples are illustrative composites, not any single store's finances.