The true margin: which costs can be missing from your D2C calculation.
If “revenue minus cost of goods” is your margin calculation, you are driving blindfolded. Here is what really counts, and how to calculate it cleanly.
Revenue is usually easy to find; the contribution margin of a single SKU, on the other hand, needs a clearly defined cost basis. This guide shows which items you should include and which data gaps you should mark.
This is a data structure problem: shop, ad platform, marketplace, payment provider and accounting each deliver a different excerpt. A reliable margin only emerges when period, sources and cost coverage fit together.
What “margin” actually means
A common shortcut says: margin = selling price minus cost of goods. That is a gross margin view, but not yet a complete profit calculation. In an illustrative example, further costs can reduce the reported margin considerably.
The true margin is the contribution margin per order, after all variable costs. Concretely that means:
- Gross revenue (selling price × quantity)
- – returns and discounts
- – cost of goods (COGS, incl. purchase, freight, customs)
- – packaging and handling
- – shipping costs (outbound + return label)
- – payment fees (Stripe, PayPal, Klarna)
- – platform fees (Shopify Payments, Amazon FBA, TikTok commission)
- – directly attributable advertising costs (Meta, Google, TikTok, per campaign)
- = contribution margin
- – fixed costs per month (staff, software, rent), prorated
- = operating result before taxes
Illustrative example: with €100 revenue, €40 COGS and €30 directly attributable advertising costs, €30 are left before shipping, fees and returns. Do not call this level gross margin; describe exactly which costs have already been deducted.
The three gaps that make you blind
1. Attribution: platform values cannot be added up.
Depending on the attribution window, the same order can be credited to several platforms. Compare platform values only within clearly defined rules, and deduplicate events when browser and server signals are sent together.
2. Returns. The silent margin killer.
Return rates differ widely by category, product and period. Use your own historical rate and separate expected costs from refunds already booked, so the presentation does not promise more certainty than the data allows.
3. FBA and platform fees. Per SKU, not per order.
Amazon calculates FBA fees by size, weight, storage type and seasonality. Two SKUs with an identical price can have different profitability. If you only track the order total, you never see which SKU actually costs you money.
The pragmatic fix: per order, per SKU, per channel
A P&L at order level can bring cost items together as far as data source and allocation are reliable. Here is how to structure the workflow:
- Connect the data sources available for your account. The actual import scope is shown directly in each connection.
- Store COGS per SKU manually, by CSV or from supported purchase receipts, and check the mapping.
- Connect only released ad accounts and document granularity, period and missing campaign allocations.
- Connect supported payment providers. Show per channel whether fees are exact, partial or only estimated.
- Build returns logic: every refund transaction reduces the margin retroactively, per SKU, with a date.
- Calculate weekly: contribution margin per channel / SKU / campaign. Not monthly. Weekly.
Set target values from your own cost structure, category, return rate and growth phase. An industry value without a source and an identical margin definition is not a reliable comparison.
What happens when you do this
A more complete cost view can make negative SKUs or cross-subsidies visible. Whether and where that happens for you can only be derived from your own order, cost and fee data.
Make price, assortment or channel decisions only once data coverage, period and cost logic are traceable. A single snapshot is not enough.
NorthProfit is built for profit reports at order and SKU level. How current and accurate they are depends on connected sources, sync status and cost coverage.