A good gross profit margin for a Shopify DTC brand sits between 50% and 70% on a fully-loaded basis, with the specific target driven by category. Beauty brands aim for 65-75%, apparel 55-70%, supplements 45-60%, and home goods 35-50%. The textbook formula is the easy part. The hard part is what most Shopify P&Ls quietly leave out of COGS.
What Is Gross Profit Margin (And Why the Textbook Definition Misleads Shopify Brands)?
Gross profit margin is the percentage of revenue left after subtracting the cost of goods sold. The formula is (Revenue - COGS) / Revenue. That sounds clean. For a Shopify brand, the messy question is what actually belongs in COGS — because where that line gets drawn determines whether your gross margin is 72% or 58%.
The Shopify admin shows a gross margin number on every product. It uses the cost per item field you typed in months ago. That number ignores inbound freight, duties, 3PL fulfillment, payment processing, returns, and the credit you gave the customer with a stacked discount code. In our work with 100+ Shopify brands, the Shopify-reported GPM and the books-reported GPM are almost never within 5 points of each other.
That gap — 72% on the dashboard, 51% in the books — is the entire reason this article exists. A founder reading their Shopify admin walks away thinking they have plenty of room to spend on ads. Their actual unit economics tell a different story.
The Shopify admin GPM is a marketing number. The fully-loaded GPM is the operating number. Brands that confuse the two scale themselves into a cash hole.
Takeaway: Treat the Shopify admin gross margin as a sanity check only. The number that matters lives in your accounting system, with every variable cost of fulfilling an order loaded into COGS.
How Do You Calculate Gross Profit Margin for a Shopify Store?
The calculation is straightforward: subtract cost of goods sold from net revenue, divide by net revenue, multiply by 100. For Shopify brands, the work is in defining each line. Net revenue is gross sales minus discounts, refunds, and returns. COGS is the landed product cost plus the variable fulfillment costs tied to each unit shipped.
The formula, applied to a real Shopify month
On paper, this brand was running 75%+ in the Shopify admin. After the actual close, GPM lands at 58.9%. That number is still healthy for apparel, but it changes every paid acquisition decision.
For the bookkeeping mechanics of how this gets recorded each month, the Ottit playbook on the profit and loss statement for ecommerce walks through the full P&L structure we use across the stores we close books for.
Takeaway: Calculate GPM monthly using net revenue (after discounts and returns) and a fully-loaded COGS line that includes inbound freight, 3PL, and processing fees. Anything less is a vanity number.
What Is a Good Gross Profit Margin by Shopify Category?
A good gross profit margin depends on category, AOV, and channel mix. Beauty and skincare consistently land highest because raw material costs are low relative to perceived value. Home goods and consumables run lower because of weight, packaging, and shipping. Below are the GPM bands we see across the Shopify brands Ottit serves.
| Category | Typical GPM range (fully loaded) | Strong GPM target | What pulls it down |
|---|---|---|---|
| Beauty / skincare | 60-75% | 70%+ | Sampling, PR seeding, free gift-with-purchase |
| Apparel | 55-70% | 65%+ | Returns (15-25%), discount stacking, size exchanges |
| Supplements / wellness | 45-60% | 55%+ | Subscription churn, fulfillment frequency, Recharge fees |
| Food and beverage | 35-50% | 45%+ | Cold-chain shipping, spoilage, heavy DIM weight |
| Home goods / furniture | 35-50% | 45%+ | Freight, oversized shipping, white-glove delivery |
| Accessories / jewelry | 60-75% | 70%+ | Insured shipping, packaging, sampling |
| Electronics / gadgets | 30-45% | 40%+ | Warranty reserves, returns, RMA processing |
| Pet products | 45-60% | 55%+ | Heavy SKUs, subscription discount stacking |
These ranges assume the brand is past the seed stage and ordering at semi-real volumes. Pre-product-market-fit brands ordering 500 units at a time will run 10-15 points lower than these targets because they haven't hit MOQ pricing yet.
Takeaway: Benchmark your fully-loaded GPM against the category band, not against a generic 50% retail number. A 55% margin is a problem for a beauty brand and a win for a furniture brand.
What Hidden Costs Are Pulling Down Shopify Gross Profit Margins?
In real Shopify P&Ls, gross profit margin gets eroded by five recurring leaks: merchant processing fees, shipping recovery gaps, returns, discount stacking, and 3PL pick-pack creep. None of these show up in the Shopify admin's cost-per-item field. All of them belong in COGS if you want an honest gross margin.
1. Merchant processing fees (2-3 points of GPM)
Shopify Payments, PayPal, Shop Pay Installments, and Amazon Pay all clip a fee on every transaction. Per the Shopify Help Center guide to payouts, these fees are netted out of the payout before cash hits the bank. That means many bookkeepers miss them entirely — they record net deposits as revenue and the fees vanish.
Across the 100+ Shopify stores Ottit closes books for, we use Bookkeep to break out gross sales, processing fees, refunds, and payouts into separate journal lines so nothing gets buried. The journal entry for a typical daily Shopify payout looks like this:
2. Shipping recovery gaps (1-3 points of GPM)
Most Shopify brands charge shipping at checkout, but the amount they recover rarely covers what they pay to the 3PL or carrier. A brand charging a flat $5 shipping fee on a $50 order may be paying $9 to ShipBob and the carrier. The $4 gap shows up as a hit to GPM, not as a separate line item.
3. Returns and refunds (2-5 points of GPM)
Apparel brands routinely see return rates of 15-25%. A returned item carries the original outbound shipping cost, the return shipping label, restocking labor, and often the product becomes B-stock or destroyed inventory. Stores using Loop or Returnly for returns get cleaner data, but the cost still has to land somewhere — and it belongs in COGS.
4. Discount and promo stacking (2-4 points of GPM)
Welcome popup gives 15% off. Site-wide sale takes another 20%. A loyalty member uses their 10% off code on top. Klaviyo flow throws in free shipping. The product that was supposed to ship at a 70% margin ships at 48%. Triple Whale and similar attribution tools can show blended discount rate by channel, which is often the first place margin recovery hides.
5. 3PL pick-pack creeping into COGS (1-2 points of GPM)
3PL pricing has gotten more granular. Per-unit pick fees, packaging fees, special handling, dunnage, and storage are all separately charged by providers like ShipBob and ShipMonk. A brand quoted $3.50 per order often pays $5.20 after add-ons. Reconciling the 3PL invoice against fulfilled orders monthly is the only way to catch the creep.
Takeaway: Audit each of the five hidden cost categories monthly. Brands that close their books with all five loaded into COGS see a fully-loaded GPM that is 8-15 points below the Shopify admin number — and that gap is where most scaling decisions go wrong.
How Should Shopify Brands Treat Landed Cost in COGS?
Landed cost is the total cost to get a unit into the 3PL warehouse, ready to ship. It includes the supplier invoice, inbound freight, duties, tariffs, customs brokerage, and any inspection fees. For Shopify brands sourcing overseas, landed cost is often 15-30% higher than the supplier invoice alone. Loading only the invoice into the Shopify cost per item field is the single most common GPM mistake we see.
The full mechanics of allocating freight and duties across SKUs is its own subject — Ottit's landed cost playbook for Shopify brands walks through the methodology we use. The short version: every shipment gets a landed-cost worksheet, freight and duties get allocated by unit value or weight, and the per-unit landed cost replaces the supplier invoice as the COGS figure.
The difference between $6.40 and $8.15 per unit is 27% more cost. If the serum retails at $32, supplier-only COGS produces an 80% gross margin. Fully-loaded landed cost produces 74.5%. That 5.5-point swing is the difference between forecasting that scales and forecasting that breaks.
Takeaway: Build a landed cost worksheet for every inbound shipment. Update the Shopify cost per item field — or the COGS rate in QuickBooks/Xero — with the per-unit landed figure, not the supplier invoice.
Why Is Gross Profit Margin the Most Important Number for DTC Scaling?
Gross profit margin determines how much room a brand has to fund customer acquisition, fulfillment overhead, and operating expenses while still being profitable. A brand running at 65% GPM can absorb a 30% blended customer acquisition cost and still have 35% contribution margin to cover everything else. A brand at 45% GPM cannot.
Investor diligence on consumer brands typically anchors on fully-loaded gross margin. Most consumer-focused funds want to see 60%+ GPM before they'll engage. For beauty and skincare, the bar is closer to 70%. This is because paid acquisition costs on Meta and TikTok have continued climbing, and a low-margin brand can't out-spend competitors.
The contribution margin ladder
DTC operators increasingly track contribution margin in addition to gross margin. Contribution margin starts with gross profit and subtracts every variable cost not already in COGS — primarily paid acquisition. The ladder looks like this:
- Gross profit margin — revenue minus COGS (product, freight, duties, 3PL, processing, returns)
- Contribution margin 1 — gross profit minus paid media spend attributable to the order
- Contribution margin 2 — CM1 minus fixed marketing (influencer fees, agency retainers, content production)
- Operating margin — CM2 minus overhead (salaries, rent, software, professional services)
Triple Whale and Northbeam both surface contribution margin natively when configured with accurate COGS inputs. The accuracy of the GPM input drives the accuracy of every downstream metric.
Takeaway: Set a category-appropriate GPM target as the single most important leading indicator of brand health. Below your category band, every other metric — CAC, LTV, payback period — gets harder to make work.
How Can Shopify Brands Improve Their Gross Profit Margin?
Improving gross profit margin is a function of pulling specific operational levers, not generic cost-cutting. Across the Shopify brands Ottit serves, the highest-ROI levers fall into five buckets: COGS negotiation, AOV expansion, discount discipline, shipping recovery, and 3PL renegotiation. Most brands find 3-5 points of GPM hiding in these areas within one quarter.
- Renegotiate COGS at volume tiers. When monthly velocity doubles, the supplier MOQ pricing usually tiers down. Many brands forget to ask. A 10% supplier cost reduction is typically 3 points of GPM.
- Raise AOV through bundles and upsells. Apps like Rebuy and ReConvert add post-purchase upsells. Higher AOV spreads fixed per-order costs (pick-pack, processing minimums) across more revenue.
- Tighten discount stacking rules. Configure Shopify discount combinations so welcome codes don't stack with site-wide sales. The typical brand recovers 1-2 points of GPM in the first month.
- Recover more shipping at checkout. Move from flat-rate to dynamic carrier-calculated shipping for orders below a free-shipping threshold. Most brands undercharge by $2-4 per order.
- Renegotiate the 3PL contract annually. Pick-pack rates and storage fees are negotiable at volume. ShipBob, ShipMonk, and regional 3PLs all expect renewal conversations every 12 months.
- Audit return policies by SKU. High-return SKUs (often apparel and footwear) can be repriced, bundled, or removed. Returns aren't free even when restocked.
- Move payment processing to lower-fee rails where possible. Shop Pay and ACH options can shave 30-50 basis points on qualifying transactions.
Most brands chasing a 5-point GPM improvement find it in their own data within 90 days. The number isn't hiding in a new supplier — it's hiding in discount stacking and shipping recovery.
Takeaway: Run a quarterly GPM audit against the five levers. Pick the two with the largest gap to target and assign an owner. Generic cost-cutting rarely works; specific lever-pulling does.
How Should Gross Profit Margin Be Set Up in QuickBooks or Xero?
A properly structured chart of accounts is the foundation for an accurate gross profit margin. The COGS section needs separate accounts for product cost, inbound freight, 3PL fulfillment, merchant processing, and returns. Lumping everything into a single 'Cost of Goods Sold' line makes it impossible to see which lever is moving.
Ottit's chart of accounts examples for Shopify brands walks through the exact COA structure we use. The COGS section typically looks like this:
- 5000 — Cost of Goods Sold (parent)
- 5010 — Product Cost (landed inventory consumed)
- 5020 — Inbound Freight and Duties
- 5030 — 3PL Fulfillment (pick, pack, storage)
- 5040 — Outbound Shipping
- 5050 — Merchant Processing Fees
- 5060 — Returns and Restocking
- 5070 — Discounts and Promotions (contra-revenue or COGS depending on policy)
For the daily mechanics of getting Shopify data into this structure, Bookkeep is what we use across the stores Ottit closes books for monthly. It produces a daily summary journal entry that lands gross sales, discounts, refunds, fees, and gift cards in the right buckets without per-order noise. Alternatives like the Synder Shopify integration guide describe similar mechanics for transaction-level sync.
Takeaway: Split COGS into at least six sub-accounts in QuickBooks or Xero. The granularity is what lets you see which cost category is moving GPM month over month.