Ads
Shopee's own Ads Help Center defines the metric in one line: ROAS is "advertising-attributed revenue divided by advertising expenditure." Lazada and TikTok Shop report it the same way. 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 commission and transaction fee (Shopee non-Mall 1–6%, Mall 3–12% per the Help Center), 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. Subtract them and a campaign reporting 5.0 frequently lands near 1.3 in true terms: barely above break-even, sometimes below. 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
- commission + fee (~10%) -THB 10,000
- seller-funded voucher (5%) -THB 5,000
- free-shipping share (~3%) -THB 3,000
Contribution before ads = THB 32,000
True ROAS = THB 32,000 / THB 20,000 = 1.6
Then: ~8% of the attributed orders were returned or cancelled - already counted in the 5.0.
Adjusted true ROAS ~= 1.3 <- what actually reached the bank| Line (as % of attributed sales) | Shopee | Lazada | TikTok Shop |
|---|---|---|---|
| COGS | 50% | 50% | 50% |
| Commission + transaction fee | ~10% | ~10% | ~8% |
| 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.4 | ~1.4 | ~0.9 |
Illustrative cost shares on a representative campaign at a 5.0 reported ROAS. The same dashboard number survives as ~1.4 on Shopee and Lazada but falls below 1.0 on TikTok Shop, because the affiliate commission and higher return rate eat the contribution the numerator pretended was profit. The metric is identical across platforms; 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), the Shopee general Help Center (commission, transaction fee, Shop Voucher, Free Shipping Program), the Lazada Sponsored Solutions portal, the TikTok Shop Seller University affiliate-commission documentation, and Bain's e-Conomy SEA 2025 commentary on retail-media inflation. 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.