Most DTC founders believe they know which SKUs are profitable. They're looking at the wrong cost. This framework walks through all 8 cost layers, from supplier invoice to customer doorstep, so you can calculate a contribution margin number you can actually act on.
Who this is for: $3-12M DTC founders, finance leads, and operators who suspect their 3PL invoice is hiding margin they can't find.
Last updated: May 2026
Target: True contribution margin ~35-45% after all 8 layers, per SKU, before overhead allocation.
Below ~35% true contribution margin per SKU, it's structurally hard to scale paid acquisition and still make money.
To calculate true profit per SKU in Shopify, subtract all 8 cost layers from each unit's revenue, not just COGS. In order, those layers are: (1) product cost, (2) inbound freight & duties, (3) 3PL receiving & storage, (4) pick, pack & fulfillment, (5) outbound shipping, (6) payment processing, (7) returns & restocking, and (8) platform fees. Shopify's native margin subtracts only Layer 1, which is why it overstates true per-SKU profit by 20-30 percentage points. The rest of this page defines each layer, walks a full worked example, and gives you the exact formula.
A DTC founder at a $10M consumables brand recently said: "My 3PL invoice has $40K of fees I can't reconcile. I don't know which SKUs are profitable and which are burning cash."
This is not a bookkeeping problem. It is a structural problem with how most DTC businesses think about cost.
Shopify's margin report subtracts COGS from revenue. That's Layer 1 of 8. Your Shopify dashboard has no idea what it cost to get that unit into the warehouse, how much the 3PL charged to pick and pack it, what UPS charged to deliver it, or how much of it came back as a return. None of that is in the number you're looking at.
So when you run a promotions analysis, a channel mix decision, or a SKU rationalization exercise using Shopify margins, you're not making a data-driven decision. You're making a guess dressed up in a spreadsheet.
The fix is not a better spreadsheet. The fix is a full cost-layer model: a single framework that maps every dollar of variable cost from supplier invoice to the customer's door, allocated to each SKU, so that contribution margin is a real number rather than an estimate.
These are the 8 layers every physical DTC brand incurs between sourcing a product and collecting the revenue from selling it. Some brands have fewer layers (e.g., Shopify Fulfillment instead of a 3PL). Most $3-12M brands have all 8.
This is what you pay the supplier per unit. This is the number most brands put into Shopify's "cost per item" field. In practice it usually covers only the product itself (not freight, 3PL, shipping, returns, or license royalties), so Shopify's margin is almost always a one-layer guess.
The cost of moving inventory from the supplier to your warehouse or 3PL. For brands importing from overseas, this includes ocean freight, air freight, customs broker fees, and import duties.
Your 3PL charges to receive each inbound shipment and to store your inventory in their facility. These costs are often billed monthly and are among the most commonly misallocated in DTC P&Ls.
The per-order cost your 3PL charges to pick units from shelves, pack them into a shipping box, insert any kitting components, and hand off to the carrier. This is the most variable layer and the core of the "3PL invoice parsing" problem.
The carrier cost to deliver the order to the customer. For most DTC brands, this is the second-largest variable cost after product cost itself.
The fee charged by your payment processor on each transaction. On Shopify Payments, this is typically 2.4-2.9% + $0.30. On third-party processors, add the Shopify transaction fee (0.5-2%).
The cost of processing and restocking returned merchandise. This is the most frequently omitted cost layer in DTC P&Ls, and the one most likely to make a high-return-rate SKU look profitable when it isn't.
The Shopify subscription and app fees attributable to revenue generation. These are often treated as fixed overhead, but for a $3-12M brand they are large enough to matter in per-SKU math.
Here's what all 8 layers look like for a single SKU (a 30-unit supplement bottle at $65 retail) at a $10M/year DTC brand.
| Cost Layer | Per Unit ($) | % of Revenue |
|---|---|---|
| Revenue | $65.00 | 100% |
| Layer 1: Product cost | - $14.00 | 21.5% |
| Layer 2: Inbound freight & duties | - $2.10 | 3.2% |
| Layer 3: 3PL receiving & storage | - $0.85 | 1.3% |
| Layer 4: Pick, pack & fulfillment | - $3.20 | 4.9% |
| Layer 5: Outbound shipping | - $8.40 | 12.9% |
| Layer 6: Payment processing | - $1.95 | 3.0% |
| Layer 7: Returns & restocking | - $1.30 | 2.0% |
| Layer 8: Platform fees | - $0.65 | 1.0% |
| True Contribution Margin | $32.55 | 50.1% |
| Shopify's reported margin (Layer 1 only): 78.5%, off by 28 percentage points | ||
The supplement brand's Shopify dashboard shows a 78.5% gross margin on this SKU. The full cost-layer model shows 50.1%. The difference is 28 percentage points, enough to completely change a channel mix decision, a pricing decision, or a scale/kill decision for that product.
If this SKU also carried a 15% royalty on net revenue, true contribution margin would drop from ~50% into the mid-30s, which is the difference between a scalable hero and a barely break-even product.
Now multiply this across a 30-SKU catalog. You will find that some products you thought were your best performers are actually your margin eroder SKUs, and some you were planning to phase out are quietly carrying the catalog. The cost-layer model is the only way to see this.
In this framework, "Revenue" means net revenue for that SKU: after discounts, coupons, and gift cards, excluding refunded revenue. If you run heavy discount or affiliate codes, start from the actual cash collected, not list price.
With all 8 layers defined, the per-SKU contribution margin formula is:
If you pay a % of revenue royalty or revenue-share on a SKU, treat it as a variable cost in this stack: either fold it into Layer 1 as part of unit cost, or break it out explicitly as "Royalties = royalty_rate × net revenue." The key is that it gets subtracted before you call the SKU profitable.
This number, and only this number, tells you which products in your catalog are generating real profit after every dollar it costs to get them to a customer.
Licensed stores and influencer/affiliate programs add extra variable costs that don't show up in Shopify at all: royalties, stacked discounts, and commission payouts. If you leave them out of the cost-layer model, you'll think high-volume SKUs and "successful" campaigns are winners when they're actually burning cash.
The 3PL invoice is the hardest layer to allocate because it arrives as a single PDF for all SKUs, all orders, and all activity types, often with line items that don't map cleanly to specific products.
Here's how to approach it systematically:
This process is tedious to do manually for more than a handful of SKUs. For catalogs of 15+ SKUs, it requires either a dedicated analyst running it monthly or software that connects directly to the 3PL API and order management system. The alternative is continuing to guess.
Manually running the full cost-layer model every month is a 2-4 hour exercise per SKU once you have the data sources connected. For a 30-SKU catalog, that's a part-time job. It's why most DTC brands never do it, and why most DTC founders are making million-dollar catalog and channel decisions on Shopify's one-layer margin numbers.
MarginOS ingests all 8 cost layers automatically from the data sources you already have:
Royalty rates, license percentages, and per-order affiliate or influencer commissions can be configured as overrides or rules inside MarginOS so they roll into the same per-SKU contribution margin waterfall automatically.
With all 8 layers connected, MarginOS produces a per-SKU contribution margin waterfall in real time, not a monthly spreadsheet exercise. You can see which SKUs are your real profit drivers, which are margin eroders masquerading as revenue drivers, and which are candidates for a price increase, a COGS negotiation, or a catalog exit. This live waterfall is the core of the MarginOS Profit & Inventory Command Center.
This is the foundation for every other profitability decision: channel mix, inventory depth, promotion strategy, and LTGP:CAC modeling all depend on having an accurate contribution margin as a starting point. And because every cost layer in MarginOS is tagged as ACTUAL or ESTIMATED, you always know which parts of the model you can act on today and which still need a data source connected. See Pillar D: Trust the Numbers for how that works.
The full cost-layer model is one of three core pieces of the MarginOS profit framework. It shows you true contribution margin per SKU after every cost layer. The LTGP:CAC model tells you how profitable your customer relationships are over time, and the Trust the Numbers model tells you whether each profit input is ACTUAL or ESTIMATED. Together they tell you which products make real money, how much you can afford to spend to acquire customers, and how hard you can bet on the data.
All 8 layers must be subtracted for a valid contribution margin.
See the cost-layer model in real time, not in spreadsheets.
Get your Profit & Inventory Command CenterOr email sales@marginos.com to see the cost-layer model on your own data.