กำไร
A Shopee seller we worked with last year had a clear bestseller — a THB 290 beauty SKU that consistently led the account by units sold and by GMV. It carried the storefront banner. It anchored every campaign brief. The seller had built the operating cadence of the shop around it: priority placement on the listing carousel, the deepest voucher tier across every campaign window, the highest ad-budget allocation, the most-protected inventory in the warehouse. By every visible metric on the Shopee Seller Centre dashboard, this SKU was the product the entire shop was built around.
When we reconstructed contribution margin per SKU from the account's order-line data, the same product ranked 47th out of 120 SKUs in profit terms. After COGS (62% of selling price for the supplier on this category), platform commission and transaction fees (~10% effective), the seller-funded voucher tier the SKU carried through every campaign (~8%), and the seller-funded portion of the platform shipping subsidy (~4%), the SKU's contribution margin worked out to 16% — barely enough to cover ad cost at the SKU's actual ad-attributed share. Two other SKUs in the same catalog, with one-fifth the revenue, generated more total contribution profit. The "bestseller" was a margin trap, and the seller had been protecting it with the highest budget allocation in the catalog for nearly two years.
Half of every Shopee shop's bestsellers are not the most profitable products. The dashboard cannot distinguish between them.
This case is not unusual. Across ~400 Thai SEA-6 Shopee accounts we model directly, the top-10 SKUs ranked by revenue and the top-10 ranked by contribution profit overlap by roughly 50% — meaning half of every shop's bestsellers, on average, are not the most profitable products in the catalog. The pattern is consistent across categories, across account sizes within our sample, and across campaign-window vs. baseline windows. It is the operational fingerprint of an industry-wide failure mode in how Shopee accounts are managed: ranked by revenue, optimised by GMV, and budgeted on platform-reported ROAS — none of which surface the contribution-margin distribution that actually pays the seller.
This note documents the audit that surfaces the gap. The right operating view of a Shopee catalog is a 2×2 — revenue on one axis, contribution margin on the other — not a single ranked list. The dangerous cell is high revenue + low margin, where SKUs look like growth and behave like margin leakage. Identifying which SKUs sit there is mechanical once the inputs are clean. Acting on them — pricing change, voucher tier reduction, ad budget cut, supplier renegotiation, or retirement — is the operating discipline that recovers margin. With four recurring margin-trap patterns, the chart-level visualisation of the rank divergence, a worked example, sensitivity analysis on the cost-stack inputs, and the four-step audit that produces the per-SKU decision list at production cadence.
The rank divergence — visualised
The chart below compares the same Shopee account's top-10 SKU list under two ranking systems: ranked by revenue (the default seller-centre view) and ranked by contribution profit (what actually funds the business). The values are units of contribution profit normalised to the account's top-margin SKU as the index. SKUs marked in brand orange are the dangerous-quadrant cases — high revenue, low contribution profit — where the dashboard ranking and the bank-account ranking diverge by enough to flip the operating decision.
Both series indexed to the highest-margin SKU's contribution profit (= 100). Highlighted bars are SKUs that rank in the top half by revenue but bottom half by contribution profit — the dangerous-quadrant cases. The chart shows roughly half the top-10 by revenue diverging materially from the contribution-profit ranking, with margin traps clustered at SKUs B, D, F, H, and J.
Read the chart as the answer to a deceptively simple question — "which products in this Shopee catalog actually pay the rent?" The dashboard's answer (SKUs A through J, ranked by revenue) is not wrong, but it is not the operating answer. The operating answer ranks by contribution profit, and on this representative account the two answers disagree on five of the top-10 positions. SKU B in particular — the beauty hero — is the same pattern as the storefront-banner SKU in the opening anecdote, and it is the most expensive position to get wrong because budget allocation, inventory protection, and campaign featuring all flow from where the SKU sits in the ranking.
The 2×2 and the dangerous quadrant
A single ranked list compresses the catalog into one dimension. The operating decision benefits from two: revenue (the dimension the dashboard surfaces) and contribution margin (the dimension that funds the business). The 2×2 below is the working diagram. Each cell carries a different operating recommendation, and the dangerous cell — high revenue, low margin — is where almost every Shopee account hides its most expensive mistakes.
| Cell | Position | Recommended action | Why |
|---|---|---|---|
| Top-left | High revenue + high margin | Scale ad budget; protect inventory; feature in campaigns | These are the SKUs the platform recommender will amplify and that pay for the amplification — they earn higher placement and more inventory protection |
| Top-right (DANGER) | High revenue + low margin | Price up, reduce voucher tier, cut ads, bundle with high-margin SKUs, or renegotiate the supplier | Margin traps that look like growth and behave like leakage. Doing nothing is the most expensive choice; the dashboard rewards continued investment |
| Bottom-left | Low revenue + high margin | Increase ad budget; investigate why volume is low; consider featuring | Underfunded opportunities. Often these are SKUs the seller has not noticed because the dashboard ranking buries them |
| Bottom-right | Low revenue + low margin | Retire from active promotion; restrict to organic; consider catalog removal | No upside in either dimension. Active promotion of these SKUs is opportunity cost on every visit |
The 2×2 is the minimum operating model for a Shopee catalog above ~30 SKUs. Below that, sellers can usually hold the entire structure in working memory; past 30, the dashboard's single ranked list reliably misallocates budget across cells.
A natural question: how concentrated is the dangerous quadrant in a typical Shopee catalog? The chart below shows the SKU-count distribution across the four cells in our sample, broken out by account size. The dangerous quadrant captures roughly 22% of SKUs by count on a typical THB 1–10M monthly revenue account, but a much higher share of revenue (35–45%) and an even higher share of misallocated ad spend (40–55%) — because the platform recommender amplifies revenue-heavy SKUs regardless of margin, and the seller's own budget allocation tends to follow the dashboard.
Distribution is by SKU count in our ~400-account sample. The dangerous-quadrant share is smaller by count than the bottom-right (which contains a long tail of catalog-bloat SKUs), but the operating impact is concentrated there because revenue-heavy SKUs absorb the most ad budget. The misallocation is the entire case for the audit.
A worked example — the margin-trap arithmetic
The opening anecdote about the THB 290 beauty SKU, made explicit:
Selling price: THB 290
COGS (62% — supplier cost): THB 180
Platform commission + fees: THB 29
Seller-funded voucher (8%): THB 23
Free-shipping subsidy: THB 12
Packaging: THB 1
Contribution margin: THB 45 (15.5% of price)
Break-even ROAS: 1 / 0.155 = 6.5
Account-wide platform-ROAS target: 3.5
Actual platform ROAS observed: 4.2
True ROAS at platform-ROAS 4.2 ≈ 0.91 (loss-making)The campaign on this SKU reads platform-ROAS 4.2 — comfortably above the account's blanket 3.5 target. The dashboard ranks the campaign as a winner, the platform recommender amplifies the SKU's impressions accordingly, and the seller protects the SKU's inventory and budget. The break-even ROAS for the SKU's actual contribution margin (15.5%) is 6.5; the campaign sits well below it. Every additional unit sold through the ad path is a small loss, repeated across the campaign's scale, until the dashboard's GMV growth and the bank account's margin compression diverge by enough to be impossible to ignore. By the time the divergence becomes obvious — usually a quarter or two later, when cash flow tightens — the seller has already absorbed substantial loss on a SKU the dashboard has been ranking as a bestseller.
The four patterns the dangerous quadrant takes
Margin traps tend to cluster in four recurring patterns. The pattern matters operationally because it tells the seller which lever recovers the margin — the right action on a voucher-dependent SKU is different from the right action on a fee-heavy SKU, even though both sit in the same 2×2 cell.
1. Voucher-dependent SKUs.
The SKU only moves volume when seller-funded vouchers are stacked deep — typically 8–15% during major campaign windows. Pull the voucher and the SKU's velocity collapses; keep the voucher and the contribution margin compresses to single digits. The honest question is whether the SKU would still sell at a voucher level the category margin can absorb. If the answer is "yes, modestly less velocity at half the voucher tier," the fix is to cap the voucher tier and accept the smaller volume. If the answer is "no, the SKU does not sell without the deep voucher," the SKU is a price-floor problem and probably belongs in the bottom-right (retire) cell rather than the dangerous quadrant.
2. Ad-dependent SKUs.
The SKU loses velocity the moment ads pause — strong campaign performance, weak organic traction. The honest question is whether ad cost per order fits inside the SKU's contribution margin at break-even ROAS. Often it does not — the SKU's margin is too thin to absorb the ad CPC the platform charges to acquire orders, especially after auction inflation during major campaign windows. The fix is usually to reduce ad budget on the SKU until either organic conversion picks up enough to justify the SKU's shelf space or the SKU's contribution margin recovers via supplier renegotiation or pricing change. Many ad-dependent SKUs are also voucher-dependent, which compounds the problem.
3. Fee-heavy SKUs.
Low-AOV SKUs (typically THB 50–200 selling price) where Shopee's commission, transaction fee, and the seller-funded portion of the Free Shipping Program subsidy collectively eat a disproportionate share of revenue. A THB 89 SKU at 5% commission, 2% transaction fee, and a 4% effective free-shipping subsidy is paying ~10 THB in platform-side costs before any other variable expense — meaningful relative to the THB 89 selling price. The fix is usually a small price increase (often the SKU sells comparably at THB 109) and a deliberate exclusion from the deepest voucher tiers; the platform recommender penalises low-AOV SKUs less than sellers fear.
4. Promotion-trap SKUs.
Strong campaign-week performance, weak baseline. The SKU produces revenue during 11.11, Pay Day, or Mega Sale and disappears from the orders feed afterwards. The honest question is whether the campaign-window revenue is incremental profit (genuinely additional volume that absorbs the campaign's cost stack) or only incremental orders (volume the SKU would have produced at baseline anyway, now at a discounted price). The latter pattern is more common than sellers expect — the campaign mechanics produce visible GMV by pulling forward orders that would have happened anyway, at a deeper discount. The fix is to test campaign participation per-SKU rather than at the account level, and to decline campaign-window participation for SKUs whose pre-launch margin simulation does not survive the campaign's discount stack.
Sensitivity — at what margin level does the SKU flip cells?
The dangerous quadrant's boundary is not a fixed margin number; it depends on the account's break-even ROAS bar and the SKU's actual ad-attributed share. The table below shows how a typical SKU's 2×2 cell shifts under one-input changes — the kind of stress test that tells the seller whether a SKU sitting near the danger boundary is likely to flip into safety with a single operating change.
| Adjustment | New contribution margin | New break-even ROAS | 2×2 cell shift |
|---|---|---|---|
| Baseline (margin-trap example) | 15.5% | 6.5 | Top-right (danger) |
| Voucher tier 8% → 4% (cap deep tiers) | 19.5% | 5.1 | Still top-right; thinner buffer above 5.1 platform ROAS |
| Price 290 → 320 (10% lift) | 23.4% | 4.3 | Borderline → manageable above 4.3 platform ROAS |
| COGS 62% → 56% (supplier renegotiation) | 21.5% | 4.7 | Borderline → manageable above 4.7 |
| Combined: voucher 4% + price 320 | 27.4% | 3.6 | Top-left (safe at account-wide target) |
| Free-shipping opt-out (where allowed) | 19.6% | 5.1 | Marginal lift; placement weight cost may not offset |
| Bundle with 35%-margin attach SKU | ~24% blended | ~4.2 blended | Bundle-level: top-left; per-SKU varies |
Each row applies one adjustment relative to the margin-trap baseline. The combined-adjustment row (voucher cap + 10% price lift) is the move that reliably shifts the SKU out of the dangerous quadrant in our sample. Free-shipping opt-out is harder to pull cleanly because the platform Free Shipping Logo carries ranking weight; the trade is usually only positive on SKUs with strong organic conversion.
Two operational implications. First, most dangerous-quadrant SKUs are recoverable with one or two adjustments — the catalog is rarely structurally bad; it is most often misallocated. Second, the most-leverage adjustments are voucher tier and price, not COGS; supplier renegotiation matters but moves the needle less than sellers typically assume because the COGS share of price is mathematically smaller than the cumulative voucher + ads + free-shipping share at scale.
The four-step audit
The audit is short. The discipline is having clean inputs before the ranking is built — most sellers fail this exercise by ranking SKUs before COGS, fees, and voucher attribution are correctly reconstructed from order-line data. The audit produces a per-SKU decision list, not a single account-level number, and the decision list is the operating output that recovers margin.
1. Reconstruct fees and vouchers from order-line data, not the seller-centre summary.
The Shopee Seller Centre summary view is too aggregated for this analysis. Fee schedules vary by category, by program (Shopee Mall vs. non-Mall), and by campaign window. Voucher costs split between seller-funded and platform-funded portions in ways the summary does not surface. Reconstruct from the order line so each SKU's actual cost share is correct. The data is available via Shopee Open Platform if scale justifies it; for smaller catalogs, the order-line CSV export is sufficient.
2. Get COGS clean for the top-50 SKUs by revenue.
COGS is the input most accounts have least confidence in. The long tail of the catalog can be inferred from category-mean values to start; the top-50 by revenue cover the bulk of contribution profit (and contribution loss) and are the SKUs whose audit decisions will move the account meaningfully. Refresh COGS quarterly because supplier prices drift and a 5-percentage-point COGS shift is the difference between top-left and top-right cell on a borderline SKU.
3. Allocate ad spend to SKUs, even imperfectly.
A rough ad-spend allocation is better than leaving ad cost out of the SKU view. Direct attribution where Shopee's ad-attributed revenue data provides it; campaign-level pro-rata where it does not. The goal is order-of-magnitude correctness — a SKU absorbing 15% of ad budget vs. 4% changes the cell assignment regardless of which precise figure is right.
4. Rank by contribution profit and overlay against the revenue ranking.
Build a table that lists every SKU twice: rank by revenue, rank by contribution profit. Compute the divergence per SKU. The SKUs that rank in the top half by revenue but bottom half by contribution profit are the dangerous-quadrant list — these are the operating priorities. Each one gets a decision: price up, voucher tier down, ad cut, bundle with a high-margin SKU, supplier renegotiation, or retirement. Doing nothing is also a decision; in the dangerous quadrant it is reliably the wrong one because the platform recommender continues to amplify the SKU regardless of margin.
The right view of a Shopee catalog is not a ranked list. It is a 2×2.
Limitations and where this argument breaks
Five explicit limits on the analysis above.
- Account-size lower bound. The audit assumes operating capacity to reconstruct order-line economics and apply per-SKU decisions. Below ~THB 200K monthly revenue, the operational overhead exceeds the recovered margin; simpler heuristics outperform — pick the three highest-margin SKUs and concentrate ad spend on those.
- COGS data quality. The 2×2 ranking is only as good as the COGS input. Long-tail SKUs without clean COGS values default to category-mean inference, which is approximate and can mislead by 5–10 margin points on outlier SKUs. Refresh quarterly; flag inferred values as approximate.
- Attribution-window mismatch. The methodology treats the campaign as concluded at platform attribution (typically 7-day click + 1-day view); real net-of-returns reconciliation runs ~30 days later. Sellers comparing against bookkeeping should expect a small lag.
- Category dynamics. The four margin-trap patterns are descriptive, not exhaustive. Categories with structurally elevated returns (apparel, beauty in some markets) shift the patterns toward returns-driven margin compression. Categories with very high COGS heterogeneity within a single SKU (made-to-order, seasonal) need a different audit cadence.
- Platform-side counterfactuals. The argument assumes Shopee's recommendation system continues to amplify revenue-heavy SKUs regardless of seller margin — i.e. the platform optimises GMV. A regulatory or competitive shift that constrains GMV-driven amplification would change the audit's priority ordering. None of the public reporting suggests such a shift is imminent at the time of writing.
Methodology
Public-data citations are taken from the Shopee Help Center (commission, transaction-fee, voucher, and Free Shipping Program documentation), the Shopee Ads Help Center (ROAS definition and Target ROAS configuration), Sea Limited's investor disclosures, and the Bain e-Conomy SEA 2025 commentary on retail-media inflation in SEA marketplaces.
Internal-data claims — the 50% rank-overlap figure, the 2×2 cell-distribution percentages, the 12–18% ad-budget reallocation and 4–7 percentage-point margin-yield lift, the cost-input ranges in the worked example — are aggregated across the SEA-6 Thai Shopee accounts we model directly. The current Shopee subset is approximately 280 active accounts across the DataGlass research methodology sample frame (Jan 2024 – Apr 2026, 28-month observation window).
The methodology section exists to make every numerical claim above inspectable in principle. A reader who disagrees with any conclusion should be able to point to the input that is wrong (the public-data citation, the sample, the cost-input range, the attribution model) rather than to the conclusion itself.