Ads
The standard ad-audit advice on Shopee is to find the "underperforming" campaigns and pause them. The advice is not wrong; it is incomplete. The campaigns most sellers identify as underperformers are the ones already flagged in the platform dashboard — low platform ROAS, weak click-through, soft attributed-revenue lines. Pausing them does recover some budget, and most third-party Shopee Ads guides stop there. The structural leak sits somewhere else entirely.
In our data across ~280 Thai SEA-6 Shopee accounts, the campaigns that quietly drain the most margin are not the visible underperformers. They are campaigns with strong-looking platform ROAS (5.0–8.0 in the dashboard), healthy click-through, real attributed-revenue volume, and unit economics that turn negative the moment commission, transaction fees, seller-funded vouchers, and the seller-funded portion of the Free Shipping Program are properly counted. Roughly 20–30% of ad spend on a typical account sits in this category — structurally loss-making campaigns that the platform dashboard ranks as winners. That share is the operating gap this note documents.
Most Shopee ad waste is not in campaigns that look broken. It is in campaigns that look healthy.
This note argues that reducing Shopee ad waste is structural, not surgical. Pausing visible underperformers is at best the third or fourth move in a useful audit; the first two are fixing the metric the audit is run against (replace platform ROAS with true ROAS per SKU) and resetting the default-on broad-match keyword expansion that drives the platform's relevance model into queries the seller did not author. With chart-level visualisation of where the waste concentrates, two worked examples (high-margin and low-margin SKUs at the same dashboard ROAS), sensitivity analysis on the cost-stack inputs that move the audit's output, the two-week audit procedure, and the operational moves that follow.
Where the waste actually concentrates — visualised
The chart below shows the share of ad spend that runs at a structural loss across four campaign cohorts on a representative Shopee account. The visible-underperformer cohort (low platform ROAS) is the one most audits target; the structural-loss cohort (high platform ROAS, low true ROAS) is where the budget reallocation actually lives. The chart is the case for replacing platform ROAS with true ROAS as the audit metric.
Distribution is by share of ad spend, not by campaign count. The hidden-waste cohort (high platform ROAS, low true ROAS) plus broad-match drift account for ~33% of total ad spend on the typical account. That is the budget the audit reallocates.
The dashboard ROAS problem
Shopee's in-platform ROAS, per the Shopee Ads Help Center, is ad-attributed revenue divided by ad spend. Target ROAS bidding optimises automatically toward a seller-defined ROAS target during the campaign learning window. Both definitions are mathematically clean and operationally misleading. The numerator (attributed revenue) is gross — it does not deduct platform commission (1–6% non-Mall, 3–12% Mall, plus the ~2% transaction fee), the seller-funded portion of Shop Vouchers (per the Help Center, "deducted from your sales as a marketing cost"), or the seller-funded portion of the Free Shipping Program subsidy. Optimising bidding toward this metric is, on a scaling campaign, structurally biased toward overspend — the platform's relevance model gets better at extracting marginal willingness-to-pay from the seller's ad budget over the learning window, but the seller's margin per ad-acquired sale is invisible to that optimisation.
Both campaigns: ad spend THB 1,000 · attributed revenue THB 8,000 · platform ROAS 8.0
High-margin SKU (40% gross):
COGS 4,800 + fees 900 + voucher 1,000 + ad 1,000 = 7,700
Net ad profit: +THB 300
True ROAS = (8,000 − 4,800 − 900 − 1,000) / 1,000 = 1.30
Low-margin SKU (28% gross):
COGS 5,800 + fees 900 + voucher 1,000 + ad 1,000 = 8,700
Net ad profit: −THB 1,700
True ROAS = (8,000 − 5,800 − 900 − 1,000) / 1,000 = 0.30
Spread: −82% in true ROAS at the same dashboard signal.Replacing platform ROAS with true ROAS — attributed revenue minus COGS, fees, vouchers, and shipping, divided by ad spend — gives the per-SKU economics directly. Combine that with a break-even ROAS computed from each SKU's own variable cost share, and the audit produces a list of campaigns whose ROAS is below their own break-even regardless of what the dashboard shows.
The broad-match expansion problem
Shopee's Keyword Ads default to broad-match expansion. Per the Shopee Ads Thailand Help Center, the platform automatically surfaces a campaign for related queries the seller did not explicitly bid on, using the platform's relevance model to determine which expansions to fund from the seller's budget. The seller's ad budget then funds impressions on queries chosen by the platform — not by the seller's targeting brief. In our data, broad-match expansion captures 25–40% of attributed-order volume on a typical campaign, often surfacing on informational queries (people researching, not buying), comparison-shopping queries (searches for substitute products and direct competitors), and adjacent category queries the platform considers semantically related. The attributed orders from broad-match expansion convert at a meaningfully lower rate and at a higher cost-per-acquired-sale than the exact-match keywords the seller deliberately chose.
The fix is not to disable broad-match — that is the structural overcorrection that "kills sales" because some broad-match traffic is genuinely incremental and high-quality, especially on high-margin SKUs whose margin can absorb the higher CPA. The fix is to treat broad-match as opt-in per campaign rather than opt-out, decided after a 14-day measurement window in which broad-match-attributed orders are tagged separately from exact-match orders and true ROAS is computed for each path independently.
In our data, exact-match converts at ~1.5–2× the true ROAS of broad-match expansion on the same keyword. The differential is largest on long-tail and branded variants, where broad-match drifts into informational and competitor queries that consume budget without converting to seller-margin sales.
A two-week audit, not a one-day pause list
The right ad audit on a Shopee account is a measurement window that collects the data needed to make durable decisions, not a one-day pause list. The structure below produces a per-campaign decision list with auditable reasoning, applied at production cadence rather than only at quarter close.
1. Export per-order economics for the trailing 30 days.
Use the Shopee Open Platform export or, for smaller catalogs, the order-line CSV from Seller Centre. The required columns: order ID, SKU, attributed campaign / keyword / match-type, ad-attributed revenue, commission, transaction fee, seller-funded voucher portion, free-shipping subsidy, fulfillment, returns flag.
2. Reconstruct true ROAS per campaign, per keyword, per match-type.
For every ad-attributed order line: contribution profit before ads = revenue − COGS − fees − voucher − shipping − returns provision. Sum to the campaign / keyword / match-type level. Divide by ad spend at the same level. The output is true ROAS at three resolutions; the campaign-level number is the audit input, the keyword-level number is the action lever, the match-type number tells you whether the broad-match opt-in pays.
3. Compute break-even ROAS per SKU.
Break-even ROAS = 1 / contribution margin rate. Apply per SKU, not per account. A SKU with 25% margin breaks even at ROAS 4.0; a SKU with 10% margin breaks even at ROAS 10.0. The break-even bar is the audit floor — every campaign on that SKU is judged against the SKU's own bar, not the account-wide target.
4. Flag and tag every campaign below break-even.
Tag the underlying cause: bid pressure (auction-inflated CPC), broad-match drift (high broad-match share, low exact-match share), voucher-tier escalation (campaign-window seller-funded voucher above category margin), low-margin SKU (the SKU's margin cannot support its current ad load at any reasonable scale), or weak conversion (impressions but few attributed orders). The flagged campaigns then get one of four actions: pause, lower bid, narrow match-type, or reassign budget to a higher-margin SKU.
Sensitivity — what changes the audit's output
The audit's precision depends on input quality. The table below shows how the share of ad spend flagged as loss-making shifts under common input-quality issues. The sensitivity is structurally important: a poor COGS or voucher-attribution input produces a noisy audit that misallocates pauses; a clean input produces a precise audit that recovers margin without losing revenue.
| Input-quality scenario | Share flagged as loss-making | Risk profile |
|---|---|---|
| Clean order-line data; COGS for top-50 SKUs; per-order voucher attribution | 20–30% | Reference — typical research-grade audit output |
| COGS missing on 30%+ of catalog (category-mean inferred) | 14–22% | Underestimates waste on outlier-COGS SKUs |
| Voucher attribution at campaign level only (not per order) | 24–34% | Overestimates waste on high-voucher campaigns |
| No returns reserve applied | 15–25% | Underestimates waste on returns-prone categories |
| Account-wide ROAS used as audit bar (not per-SKU break-even) | 10–18% | Misses the structural-leak cohort entirely |
| All input-quality issues compounded | 8–14% | Audit functionally indistinguishable from "pause low platform ROAS" |
The sensitivity confirms the structural argument: an audit run against the wrong inputs produces results indistinguishable from the standard pause-the-underperformers approach. Input quality, not audit complexity, is what separates the typical 20–30% flagged-waste figure from the misleading 8–14% under degraded inputs.
Limitations and where this argument breaks
Five explicit limits.
- Account-size lower bound. The two-week audit assumes operating capacity to reconstruct order-line economics across 30+ days of ad-attributed orders. Below ~THB 200K monthly revenue, the operational overhead exceeds the recovered margin; simpler heuristics outperform — concentrate ad spend on the top three highest-margin SKUs and watch cash flow.
- COGS data quality. The audit's precision is bounded by COGS input freshness. Long-tail SKUs without uploaded COGS default to category-mean inference, which is approximate and can mislead by 5–10 margin points on outlier SKUs. Refresh COGS quarterly; flag inferred values as approximate in the audit output.
- Attribution-window mismatch. Shopee's ad-attribution window (typically 7-day click + 1-day view) does not align with the seller's order-realisation window (returns and refunds resolve 7–30 days after the order). The audit treats the campaign as concluded at attribution; real net-of-returns reconciliation runs ~30 days later. Sellers comparing against bookkeeping should expect a small lag.
- Broad-match seasonal drift. The 1.5–2× exact-match-vs-broad-match true-ROAS differential is observed across rolling 30-day windows in our sample, but it varies by season — broad-match drift increases during major campaign windows (11.11, 12.12, Pay Day) when the platform's relevance model surfaces the campaign on more loosely-related queries. Re-run the audit after each major campaign window.
- Internal-data scope. The "in our data" claims (the 20–30% loss-making share, the broad-match differential, the cohort-distribution figures) are aggregated across the SEA-6 Thai Shopee accounts we model directly. They are not population claims about all Shopee Ads accounts; they explicitly exclude the bottom of the size distribution noted above.
Methodology
Public-data citations are taken from the Shopee Ads Thailand Help Center (ROAS definition page, Target ROAS setup documentation, Keyword Ads broad-match documentation), the Shopee general Help Center (commission, transaction-fee, voucher mechanics, Free Shipping Program), Sea Limited's 4Q25 / 1Q26 investor disclosures, and the Bain e-Conomy SEA 2025 commentary on retail-media inflation in SEA marketplaces.
Internal-data claims — the 20–30% structural-loss share, the cohort distribution chart, the broad-match-vs-exact-match true-ROAS differential, the 25–40% broad-match share of attributed-order volume — are aggregated across the Thai SEA-6 Shopee accounts we model directly. The Shopee Ads subset comprises approximately 280 active accounts across the DataGlass research methodology sample frame (Jan 2024 – Apr 2026, 28-month observation window).
Don't pause the visible underperformers first. Fix the metric the audit is run against, then pause from the audit.