Ads
Here is the belief worth taking apart: that a higher ROAS is a better outcome. It is not. It is a better ratio — and the ratio and the outcome come apart at exactly the point where it matters. Shopee's seller documentation reports ROAS as ad-attributed revenue divided by ad spend [1], and Shopee's own Help Center fee schedule then lists what comes out of that revenue before any of it reaches you: category commission, the transaction and payment fees, the seller-funded portion of every Shop Voucher, and the Free Shipping Program cost-share [2]. Put a product with a 15% margin after all of that behind a campaign running at a ROAS of 5, and each THB 1.00 of ad spend returns THB 0.75 of contribution. The dashboard calls that a 5× return. The bank account calls it a 25% loss on every baht spent.
The thesis of this post is not that platform ROAS is a broken metric. It is that platform ROAS is a correctly-built metric belonging to somebody else. It exists to price ad inventory and to give the auction a feedback signal, and at that job it is honest and precise. It was never built to protect a seller's margin, and it structurally cannot, because every cost that decides your margin sits outside its numerator. What would falsify this claim is simple and checkable: a marketplace that reports a ROAS with seller-funded promotion and cost of goods netted out. Shopee [1][2], Lazada [5], and TikTok Shop [3] all publish the gross version instead.
Platform ROAS is not a broken metric. It is a correctly-built metric belonging to the party selling you the ads.
What is ROAS?
ROAS stands for Return on Ad Spend — in plain terms, "the return you get back from your ad spend." Put simply: after you run an ad, how many baht of sales did you get back?
The ROAS formula
ROAS = sales ÷ ad spend
Example: spend THB 1 on ads and get THB 20 of sales back → ROAS = 20.What does a high ROAS mean?
Generally, ROAS is a metric that tells you how well your ads are working. The higher the ROAS, the more sales each baht of ad spend brings back.
For example, a ROAS of 20 means THB 1 of ad spend returns about THB 20 of sales. But a ROAS of 5 means THB 1 of ad spend returns about THB 5 of sales.
The same THB 1 of ad spend returns four times as much at a ROAS of 20 as at a ROAS of 5.
So ROAS is a number every seller should know when running ads — because if your ROAS is too low, it may mean the ads aren't generating enough sales to justify the money you are paying.
But a high ROAS doesn't always mean more sales
This is where many people get it wrong. A high ROAS means "a high return per THB 1 of ad spend" — but it does not always mean your total sales are the highest.
For example:
| Shop A | Shop B | |
|---|---|---|
| Ad spend | THB 100 | THB 10,000 |
| Sales | THB 5,000 | THB 200,000 |
| ROAS | 50 | 20 |
You can see that Shop A has the higher ROAS — but Shop B has far more total sales.
Shop A wins on ROAS (50 vs 20), but Shop B's total sales are 40× larger. ROAS measures efficiency per baht, not scale.
So ROAS isn't only about "are sales high?" — it is about "how worthwhile is each baht of ad spend at turning into sales?"
A high ROAS means a high return per ad baht — not the highest total sales.
So should you just raise your ad budget to sell more?
Not necessarily. The reflex is to see a healthy ROAS and pour in more budget. But ROAS is an average over the orders you have already bought, and the next tranche of budget does not buy more of those orders — it buys the next-best ones, at the next-highest price. Bain's e-Conomy SEA 2025 report describes retail-media spending across the region's marketplaces rising faster than the transaction volume underneath it [4]; the practical translation is that the marginal order costs more to acquire this quarter than it did last, and more again as you personally bid the auction up. Three things go wrong when budget rises without that in view.
ROAS is an average
When you scale up ad spend, the system usually has to expand to find new groups of customers — and those new groups may not buy as well as your original audience, which can drag your ROAS down [3][4].
The platform needs time to learn
Shopee, Lazada, and TikTok Shop don't adjust perfectly right away. If you suddenly raise your budget too aggressively, the system may spend the early period learning [1][3] — and if you don't control it well, you can burn money before you see real results.
The ROAS the platform shows is sales, not real profit
This is the one that costs real money. The figure on the dashboard is revenue, and it has not had your shop's costs taken out of it. Shopee's Seller Education Hub defines the campaign ROAS as attributed revenue over ad spend [1]; the Shopee Help Center fee schedule lists the commission, transaction and payment fees, seller-funded voucher share, and Free Shipping cost-share that are deducted from that same revenue on a completely separate ledger [2]. TikTok for Business documents its ROAS the same way — a revenue-based campaign metric, not a profit one [3], and Lazada's Sponsored Solutions portal reports Sponsored campaign returns on the same gross basis [5]. Three platforms, one convention. What is missing from all three:
- Cost of goods
- GP / platform fees
- Payment fees
- Coupons / discounts / promotions
- Shipping / packing costs
- Returns / damaged goods
- Ad cost
So the ROAS the platform shows may look good, but once you subtract all of these costs, the real profit left may be very small — and sometimes you may even be losing money.
What you should really watch is ROAS after costs
The useful question is not "is my ROAS high?" but "at this ROAS, is there anything left?" That converts in one multiplication. ROAS after costs — contribution recovered per baht of ad spend — is your ROAS multiplied by the margin left after every cost the platform figure ignores. Below is the same THB 1,000 product two sellers might both describe as "doing well at a ROAS of 5".
Product A — thin margin
Selling price THB 1,000
Cost of goods THB 600
Commission + transaction/payment fee THB 120
Seller-funded voucher THB 80
Packing, shipping, returns allowance THB 50
Margin before ads THB 150 (15%)
At ROAS 5: 5 x 0.15 = THB 0.75 back per THB 1.00 spent -> loses THB 0.25 per baht
Break-even ROAS = 1 / 0.15 = 6.67
Product B — fat margin
Selling price THB 1,000
Cost of goods THB 300
Commission + transaction/payment fee THB 120
Seller-funded voucher THB 40
Packing, shipping, returns allowance THB 50
Margin before ads THB 490 (49%)
At ROAS 5: 5 x 0.49 = THB 2.45 back per THB 1.00 spent -> clears THB 1.45 per baht
Break-even ROAS = 1 / 0.49 = 2.04
Same campaign setting. Same dashboard number. Opposite businesses.Fee inputs above follow the ranges Shopee publishes for category commission and the transaction and payment fees, plus the seller-funded voucher and Free Shipping cost-share mechanics documented in the same schedule [2]. The point of the two columns is that no single ROAS target can be right for both. A high-margin product tolerates a low ROAS; a thin-margin product needs a much higher one to stand still. The break-even line — 1 divided by your margin before ads — is the only number that travels with the product rather than with the campaign.
Where this argument breaks
- ROAS after costs is still built on attributed revenue. Every platform credits ads for some orders that would have arrived anyway, so contribution per ad baht computed this way is an upper bound on what the ads actually added, not a measurement of it. Treat it as a floor test, not proof of incrementality.
- Margin is not a constant. Fee mix, voucher tiers, and shipping cost-share all move during Pay Day, 9.9, 10.10 and 11.11 windows [2]. A break-even bar computed on last month's cost stack is stale inside a campaign window — recompute per window, not per quarter.
- A floor test is not an allocation rule. Clearing break-even tells you a campaign is not losing money on average; it does not tell you the next baht is better spent there than somewhere else. That is a marginal question, and averages cannot answer it.
- Returns and cancellations settle late. Orders reverse after the reporting window closes, so any ROAS read in the same week is provisional. On returns-prone categories the correction is large enough to flip the sign.
- Below a certain size the arithmetic is not worth the plumbing. Reconstructing fees, vouchers and COGS per order costs real operator time; on a small catalogue a fixed per-category margin assumption, refreshed quarterly, gets you most of the way for none of the effort.
Methodology
Every number in this post is arithmetic on publicly documented inputs. There is no internal dataset behind it and no claim about what any seller achieved. The ROAS definition and the learning-period behaviour of automated campaigns come from Shopee's Seller Education Hub [1] and, for the cross-platform claim, TikTok for Business's ads documentation [3] and Lazada's Sponsored Solutions portal [5]. The cost lines in the worked example — category commission, transaction and payment fees, seller-funded Shop Voucher share, Free Shipping Program cost-share — follow the Shopee Help Center fee schedule [2]; the specific baht amounts are an illustrative composite chosen to sit inside those published ranges, not the financials of any particular shop. The retail-media cost trajectory is Bain's e-Conomy SEA 2025 commentary [4]. The two break-even figures are 1 divided by the stated margin, computed directly.
In short
ROAS is a very important number when running ads — but ROAS is not the whole answer.
- A high ROAS = the ads are efficient relative to the money spent
- But it doesn't mean the highest total sales
- And it doesn't always mean the highest real profit
What sellers should really watch is this: sales have grown — but has real profit grown too?