Glossary/COGS
What is COGS?
COGS, or Cost of Goods Sold, is the cost a seller incurs to acquire or produce one unit of inventory, measured before marketplace fees, advertising, or outbound fulfillment are added. For a reseller it is the wholesale price plus inbound freight, import duty, and any inspection or repackaging needed to make the unit sellable. For a brand it is materials, manufacturing, primary packaging, and inbound logistics. COGS is the foundation every other profit number is built on: true ROAS, contribution margin, break-even ROAS, and low-margin SKU detection are all functions of it, so an error in COGS propagates into every decision a shop makes.
01/Formula
Formula
COGS per unit = supplier price + inbound freight + duty and import fees
+ inspection, repack, and labelling
+ inbound handling
Total COGS = COGS per unit × units soldExample
A seller imports earphones at ฿150 FOB, ฿12 freight per unit, ฿11 duty and clearance, ฿7 retail packaging and labelling. Landed COGS = ฿180 per unit. Listed at ฿499. Gross margin before fees and ads = 499 − 180 = ฿319, about 64%. Using the ฿150 supplier price instead overstates margin by 6 points and understates break-even ROAS by roughly 10%.
02/In detail
What belongs in COGS and what does not?
In: everything that scales with the unit and happens before the sale. Supplier price, inbound freight, customs duty, clearance fees, inspection, repackaging, and any per-unit assembly. Out: costs that scale with the sale rather than the unit — marketplace commission, payment fees, outbound courier, packing materials used at dispatch, and advertising — because those belong in contribution margin, not COGS, and mixing them in makes the two metrics incomparable. Also out: warehouse rent, salaries, and software, which are fixed and do not vary with the next unit sold. The test is simple: if you bought one more unit and never sold it, would you have paid this cost? If yes, it is COGS.
How should COGS be maintained over time?
As a dated series, not a single field. Supplier prices move, freight moves violently, and exchange rates move continuously, so the COGS that applied to an order in March is often not the COGS that applies in September. A shop that overwrites one COGS value per SKU loses the ability to compute historical margin correctly, and every retrospective profit figure silently uses today’s cost against last quarter’s sales. Keeping cost windows with effective dates costs a little more effort at entry and is the difference between a margin history that can be trusted and one that is directionally right at best.
What if you do not know COGS for every SKU?
Start with the SKUs that carry the spend. A catalogue of two thousand products in which fifty account for most of the revenue and most of the ad budget does not need two thousand accurate costs to make better decisions this month; it needs fifty. Fill the long tail with a category-level estimate and mark it as an estimate, so that any downstream number resting on it can be flagged rather than quietly trusted. A known-approximate COGS on a low-volume SKU is a manageable problem. An unknown-quality COGS applied silently across the whole catalogue is not.
03/Why it matters
The trap, in one paragraph.
Without COGS, profit cannot be calculated, only estimated — and the estimate is always optimistic, because the costs people forget are costs, never credits. Sellers who work from the wholesale price alone typically overstate contribution by five to ten points of price, which is enough to turn a break-even ROAS of 6.7 into an apparent 5.0 and to make a genuinely loss-making campaign look acceptable for months.
Common mistake
Using a single blended COGS across variants. Colour and size variants of the same listing frequently differ in supplier price, weight, and therefore freight, and a shop that averages them will systematically over-promote the expensive variants and under-promote the cheap ones — with the platform happily optimizing toward whichever sells easiest.
04/In DataGlass
How COGS is used in DataGlass.
DataGlass accepts COGS by CSV or XLSX upload with column auto-mapping, keeps it as dated cost windows so historical orders are priced with the cost that applied at the time, and supports per-variant values. Where a SKU has no cost, the system can propose a starting figure from category and order economics, flagged as inferred so the seller can correct it, and every downstream figure that depends on an inferred cost carries that provenance.
05/Sources
- [1] Shopee Thailand — seller commission and fee schedule
Delineates the platform-charged costs that sit outside COGS and belong in the contribution calculation instead.
Keep reading