Most DTC brands have a Shopify dashboard, an ad account, and a spreadsheet someone built two years ago that no longer matches reality. What they rarely have is a single view that shows whether the business is actually making money — after COGS, after returns, after shipping, after ad spend, after everything.
This post gives you the tracker structure to fix that. A monthly P&L template built around DTC cost layers, a per-channel contribution margin table, benchmark margins by product category, and the logic behind each line item. Build it in a spreadsheet or drop it into whatever reporting layer you already use.
Why Most DTC P&Ls Lie to You
The problem isn't that operators don't track numbers — it's that they track the wrong layer. Gross revenue looks healthy. Gross margin after COGS looks fine. The problem shows up three layers down, after fulfillment, returns, variable overhead, and blended ad spend are accounted for.
A brand doing $2M in revenue at 65% gross margin looks strong on paper. Run the full P&L and you often find contribution margin of 8–12%, which leaves almost nothing after fixed overhead and payroll. That's the structural issue: the blended view masks where money is made and where it leaks.
The DTC P&L structure below forces you to calculate three margin layers, each of which tells you something different:
- Gross Margin — revenue quality and product economics
- Contribution Margin 1 (CM1) — unit economics after all variable fulfillment costs
- Contribution Margin 2 (CM2) — channel profitability after attributed marketing spend
The Complete DTC Monthly P&L Template
Use this structure on a per-month basis. The "% of Rev" column is the most useful reference — it tells you whether each cost line is in range relative to your revenue size.
| Line Item | Formula / Notes | Target % of Rev |
|---|---|---|
| Gross Revenue | All sales before discounts | 100% |
| Discounts & Promotions | Coupon codes, site-wide sales, influencer codes | 3–8% |
| Returns & Refunds | Gross refunds issued in the period | 5–15% (category-dependent) |
| Net Revenue | Gross Rev − Discounts − Returns | 77–92% |
| COGS | Product cost, packaging, inbound freight | 25–50% |
| Gross Profit | Net Rev − COGS | 50–65% |
| Variable Fulfillment Costs | ||
| Outbound Shipping | Carrier costs per order; include dimensional weight | 6–12% |
| 3PL / Fulfillment Labor | Pick, pack, storage; per-unit or % of COGS | 3–7% |
| Return Processing Cost | Inbound return shipping + restocking labor | 1–4% |
| Payment Processing | Shopify Payments / Stripe: ~2.9% + $0.30/order | 2.5–3.5% |
| Platform & Transaction Fees | Shopify subscription, app stack, marketplace fees | 1.5–3% |
| Contribution Margin 1 (CM1) | Gross Profit − All Variable Fulfillment Costs | 30–45% |
| Variable Marketing Costs | ||
| Paid Social (Meta, TikTok) | Total ad spend attributed to the period | 8–18% |
| Paid Search (Google, Bing) | Total ad spend attributed to the period | 3–8% |
| Influencer / Creator Spend | Paid partnerships, gifting at cost | 2–5% |
| Email / SMS Platform Cost | Klaviyo, Postscript, etc. | 0.5–1.5% |
| Affiliate / Referral Payouts | Commission paid in period | 1–4% |
| Contribution Margin 2 (CM2) | CM1 − All Variable Marketing Costs | 15–30% |
| Fixed & Semi-Fixed Overhead | ||
| Payroll & Contractors | Ops, CS, marketing, leadership | 8–18% |
| Rent / Warehouse | Office + non-3PL storage if applicable | 0–3% |
| Software & Tools | Non-marketing SaaS, analytics, ERP | 1–2% |
| Interest / Debt Service | Inventory financing, revenue-based financing | 0–3% |
| Operating Profit (EBITDA) | CM2 − Fixed Overhead | 3–12% |
Note: Percentages are expressed as % of Net Revenue unless stated otherwise. COGS percentage is wide because it varies from digital products (near 0%) to physical consumables (55%+).
Per-Channel Contribution Margin Table
The blended P&L tells you the health of the business overall. The channel-level CM2 table tells you which channels are subsidizing which — and whether you should be spending more or less on each.
Build this table monthly. Every revenue channel should carry its own ad spend allocation, its own returns rate, and its own fulfillment cost if they differ (e.g., Amazon FBA vs. your own 3PL).
| Metric | Shopify DTC | Meta / Paid Social | Google / Paid Search | Email / SMS | Amazon FBA | Wholesale |
|---|---|---|---|---|---|---|
| Gross Revenue | $— | $— | $— | $— | $— | $— |
| Returns Rate | ~8% | ~10–12% | ~7–9% | ~5–7% | ~12–18% | ~2–5% |
| Net Revenue | $— | $— | $— | $— | $— | $— |
| COGS | $— | $— | $— | $— | $— | $— |
| Fulfillment Cost | Own 3PL | Own 3PL | Own 3PL | Own 3PL | FBA fees (~15–35%) | Varies |
| Payment / Platform Fees | ~3% | ~3% | ~3% | ~3% | Incl. in FBA | ~1% |
| CM1 | 35–45% | 32–42% | 35–44% | 40–55% | 20–35% | 30–40% |
| Attributed Ad Spend | Blended | High (15–25%) | Medium (8–15%) | Low (1–3%) | AMS spend | Trade spend |
| CM2 | 20–35% | 10–22% | 22–35% | 38–54% | 15–25% | 25–35% |
Ranges are indicative across DTC verticals. Your actuals will differ based on AOV, product margin, and channel maturity. Fill in real dollar amounts before computing percentages — percentages calculated from rounded estimates compound errors.
The key insight this table surfaces: Email and SMS consistently show the highest CM2 of any channel because the cost to reach an existing customer is orders of magnitude lower than acquiring a new one through paid. Meta often generates the worst CM2 despite high gross revenue contribution. The business needs both — but you need to know the ratio.
Benchmark Contribution Margins by DTC Category
These ranges reflect reported and aggregated data from DTC operators and public filings. Use them as diagnostic anchors, not hard targets — your specific brand economics depend on AOV, repeat purchase rate, and supply chain structure.
| Category | Typical Gross Margin | CM1 Target Range | CM2 Healthy Range | Net Profit (EBITDA) |
|---|---|---|---|---|
| Beauty & Skincare | 65–80% | 50–65% | 25–40% | 8–15% |
| Supplements & Wellness | 65–78% | 48–62% | 22–38% | 7–14% |
| Apparel & Footwear | 50–65% | 35–50% | 15–28% | 3–10% |
| Home & Lifestyle | 45–60% | 32–48% | 14–26% | 3–9% |
| Food & Beverage | 35–50% | 22–38% | 8–20% | 1–7% |
| Pet Products | 50–65% | 36–50% | 16–28% | 3–9% |
| Consumer Electronics | 30–45% | 18–32% | 8–18% | 1–6% |
| Subscription / Replenishment | 55–70% | 42–58% | 32–50% | 10–18% |
Subscription and replenishment models consistently show the best CM2 because CAC is paid once and contribution grows with each renewal cycle. One-time purchase categories with high return rates (apparel, electronics) show the most compressed margins at scale.
How to Populate Each Cost Line
COGS
COGS should include the landed cost of the product: manufacturing or purchase price, inbound freight, customs duties, and primary packaging. It should not include warehousing, fulfillment labor, or outbound shipping — those belong further down. If you're importing from overseas, use a 12-week rolling average landed cost to smooth out freight volatility rather than spot rates.
Returns and Refunds
Track gross returns separately from the revenue reversal. The revenue reversal hits your net revenue line. The cost of processing a return — inbound shipping, restocking labor ($8–15/unit), and write-off on unsellable units — belongs in the variable fulfillment section. A 10% return rate with a $15 processing cost on a $60 AOV costs you $1.50 per gross order shipped, which compounds fast at volume.
Fulfillment
If you're using a 3PL, pull the line-item invoice breakdown and map each charge: pick fee, pack fee, dunnage, storage, special handling. Resist the temptation to use "blended fulfillment cost" — the per-unit breakdown tells you whether a new SKU (heavier, odd dimensions) is profitable before you scale it.
Paid Ad Spend Attribution
Attribute ad spend to the period in which the spend occurs, not the period in which orders were delivered. For channel-level CM2, use last-click revenue attribution as a baseline and then apply a correction factor if you run multi-touch or incrementality testing. The goal is directional accuracy, not perfection — a 15% vs. 22% CM2 on Meta is a real and actionable difference even with imperfect attribution.
Platform and Payment Processing
Payment processing runs approximately 2.9% plus $0.30 per order for Shopify Payments or Stripe. At a $50 AOV, that's roughly 3.5% effective rate. At a $150 AOV, it drops to about 3.1%. Include Shopify subscription, relevant app fees (subscription management, reviews, loyalty), and any marketplace take rate if selling on Amazon or other channels.
Three Numbers to Review Every Month
You don't need to stare at the full P&L weekly. But three numbers should be reviewed on a fixed cadence because they move independently and can diverge quickly:
CM2 by channel. If Meta CM2 drops below 10%, either ROAS fell, CPMs rose, or returns spiked on paid traffic. Each has a different fix. If email CM2 is above 45%, you have headroom to invest more in list growth.
Returns rate by product and channel. Returns are a leading indicator of product-market fit problems, sizing issues, or channel-audience mismatch. A rising return rate on a single SKU usually means something changed — either in the product, the listing, or the customer segment being acquired.
Contribution margin 2 as a % of net revenue (blended). This is the single best measure of whether the business is structurally sound. Below 15% and you're in danger zone. Between 15–25% is viable but fragile. Above 25% is where you can invest in growth without burning cash.
Common Mistakes in DTC P&L Tracking
Mixing gross and net revenue
Some teams calculate margin percentages on gross revenue, others on net. Pick one and be consistent. Net revenue (after returns and discounts) is the more conservative and operationally accurate denominator. If your benchmarks are stated as % of gross, adjust before comparing.
Excluding discount cost from contribution margin
A 20% off sitewide sale doesn't just reduce revenue — it reduces contribution margin on every order placed during that window. Many brands track promotion performance only on revenue lift and miss that the CM2 on promoted orders was negative. Apply discount cost to the period the promotion ran.
Not separating new customer vs. returning customer economics
New customer orders are almost always less profitable than repeat orders because you paid CAC to acquire that customer. A rising blended CM2 in a month with high retention revenue can mask a deteriorating new customer economics picture. Split your CM2 table by new vs. returning when you have enough volume to do so cleanly.
Using ad platform ROAS as a proxy for CM2
Ad platform ROAS (reported within Meta, Google, etc.) counts revenue at the click, not after returns, not net of COGS, not net of fulfillment. A 3x ROAS on Meta does not mean 33% CM2. Net ROAS — calculated as Net Revenue ÷ Ad Spend — is a better leading indicator, but you still need to subtract COGS and fulfillment costs to get to true CM2.