BreakevenHQ
shopifygross margincontribution marginprofitabilityshopify reports

Why Your Shopify Gross Margin Is Lying to You (and What to Use Instead)

May 14, 2026 · By Ishant Sharma

Open your Shopify admin and click into Better Reports. Scroll to the "Gross margin" tile. You will see a number that looks healthy. Maybe 55 percent. Maybe 62 percent. Maybe 70 percent if you sell digital products or run a high margin brand.

That number is wrong for almost every decision you care about.

Not wrong in the sense that the math is broken. Shopify calculates the number correctly given its definition. Wrong in the sense that the definition leaves out three or four of the largest variable costs every order incurs. The gap between Shopify's gross margin and your actual contribution margin is often twelve to twenty percentage points. On a brand doing one million dollars a year in revenue, that gap is one hundred twenty thousand dollars in costs that the dashboard never told you about.

This is the most expensive accounting mistake in ecommerce, and it hides in plain sight inside the most trusted reporting interface in the entire Shopify ecosystem. After running paid acquisition for ecommerce brands for over a decade through Hustle Marketers, I have seen this exact gap take down brands that thought they were scaling profitably. They were not. The dashboard was lying. Polite, professional, well designed lying, but lying nonetheless.

This post explains exactly what Shopify gross margin includes, what it leaves out, why the omissions matter, and how to calculate the contribution margin number you should actually be using.

What Shopify gross margin actually shows

Shopify's gross margin calculation is straightforward. It takes Net Sales and subtracts Cost of Goods Sold. Net Sales equals Gross Sales minus discounts minus returns. COGS comes from the cost per item field on your product variants. The formula:

Gross Margin = (Net Sales minus COGS) divided by Net Sales

That is the textbook accounting definition of gross margin. There is nothing wrong with this number in a P&L statement. It serves a legitimate purpose. It tells you what percentage of revenue is left after paying for the product itself.

The problem is that paying for the product is not even close to the only cost of selling it. Shopify's gross margin treats every other variable cost as though it were a fixed cost, lumped into "operating expenses" at the bottom of the P&L. That accounting treatment is fine for financial reporting. It is catastrophic for ad targeting and unit economics.

What gross margin leaves out

Walk through what happens after a customer clicks the checkout button on your Shopify store. The order has been recorded. Shopify calculates gross margin based on the revenue and the COGS. But the order is not complete yet. Several more costs are about to come out of your bank account, none of which appear in the gross margin calculation.

Payment processing fees. Shopify Payments deducts 2.9 percent plus thirty cents on most plans. For an average order value of seventy five dollars, that is roughly two dollars and forty eight cents per order. On ten thousand orders a year that is twenty four thousand eight hundred dollars. Gross margin never subtracts this. Your bank account always does.

Shipping cost net of shipping revenue. Even if you charge the customer for shipping, you almost certainly subsidize part of the cost. Average per order shipping subsidy is four to seven dollars across categories like apparel and supplements. If you offer free shipping above a threshold, every order under the threshold is at full ship cost. Across the whole store the average is rarely zero. Gross margin treats shipping as though it does not exist.

Fulfillment cost. Pick, pack, label, materials, freight to the 3PL, software fees, returns processing. If you use a 3PL like ShipBob, your monthly invoice gives you a per order number. If you fulfill in house, you have to allocate warehouse rent and fulfillment labor. Either way, three to five dollars per order is normal. Gross margin ignores this entirely.

Refunds beyond what is captured in Net Sales. Shopify's Net Sales does subtract refunds. But the refunded order still cost you to process. You paid the payment processor (often not refunded), you paid for shipping in both directions if the customer returned the product, and you paid for fulfillment to ship it out. A refund is not a zero cost event. It is a negative margin event. Gross margin understates this.

Chargebacks and disputes. Roughly one in five hundred to one in two hundred orders becomes a chargeback. Each chargeback costs you the order value plus a processor fee, usually fifteen to twenty five dollars. This is statistically small but real. Gross margin does not subtract it.

Effective discount cost. Shopify's Net Sales subtracts the discount amount, so this one is partially captured. But many brands run discounts that are not coded as Shopify discounts. Influencer dollar off codes that get treated as a marketing expense in QuickBooks but show up as full revenue in Shopify. Bundles where the bundle discount is built into the SKU price. Effective discount can be five percentage points higher than what Shopify Net Sales suggests.

Add all of those together and you typically find that gross margin overstates your actual contribution by ten to twenty percentage points. The dashboard says 60 percent. Your bank account is living at 42 percent.

Why this matters for ad spend

The single biggest place this gap shows up is in paid acquisition decisions. Every ad campaign has an implied break-even ROAS, and that break-even is one divided by your margin. If you use Shopify gross margin (60 percent) you get a 1.67x break-even target. If you use real contribution margin (42 percent) you get a 2.38x break-even target.

That gap of 0.71x in break-even ROAS is the difference between profitable scaling and silently burning money. Every campaign currently running between 1.67x and 2.38x ROAS is making money on paper and losing money in reality. If those campaigns happen to be your highest spending ones, you are losing money faster the more you scale them. The growth chart goes up and to the right. The bank balance goes down and to the right. Welcome to the most common death spiral in ecommerce.

I have personally seen this exact pattern destroy three brands in the last two years. All three had reached eight figures in revenue. All three had targeted 2x ROAS for years. All three had real break-even closer to 2.7x. All three discovered the gap too late to save the business.

Worked example

Let us put numbers on this. Take a Shopify brand doing two hundred fifty thousand dollars in monthly revenue. Average order value of seventy dollars. Forty percent COGS. Five percent refund rate.

Shopify gross margin view:

  • Gross Sales: 270,000
  • Discounts: 20,000
  • Returns: 13,500
  • Net Sales: 236,500
  • COGS: 100,000
  • Gross Profit: 136,500
  • Gross Margin: 57.7 percent
  • Implied break-even ROAS: 1.73x

Real contribution margin view:

  • Net Sales: 236,500
  • COGS: 100,000
  • Payment processing (2.9% + 0.30 across ~3,750 orders): 7,985
  • Shipping cost net of revenue (4.00 per order): 15,000
  • Fulfillment (3.50 per order): 13,125
  • Refund processing cost (extra above refund itself, $2 per refund): 480
  • Contribution: 99,910
  • Contribution margin: 42.2 percent
  • Real break-even ROAS: 2.37x

The brand thinks their break-even is 1.73x. It is actually 2.37x. Every campaign they have scaled into the 2.0x to 2.37x range looks like a winner on the dashboard and is actually destroying value. If they are spending eighty thousand dollars a month on those zone campaigns, they are losing roughly fifteen thousand dollars a month silently.

Over a year, that hidden loss is one hundred eighty thousand dollars. Enough to bankrupt a small brand. Enough to wipe out a year of "profitable growth" at a bigger one.

What to use instead

The number you actually want is contribution margin, sometimes called "true margin" or "post variable margin". The formula is:

Contribution Margin = (Net Sales minus COGS minus Payment Fees minus Net Shipping Cost minus Fulfillment minus Refund Processing minus Adjustments) divided by Net Sales

That gives you a percentage. Plug it into one divided by the percentage to get your real break-even ROAS.

This is the foundation of every accurate unit economics decision in ecommerce. Pricing decisions. Promotional decisions. Channel mix decisions. Scaling decisions. Hire decisions. Inventory decisions. The downstream effects of getting contribution margin right are enormous.

Why Shopify does not just show this

A reasonable question to ask is why Shopify does not show contribution margin natively. The answer is partly historical, partly philosophical.

Historically, Shopify Better Reports was designed to mirror standard accounting language. Gross margin is the accounting term. The platform was not built for ad targeting. It was built for bookkeeping.

Philosophically, Shopify cannot calculate contribution margin for you because the inputs are not all in Shopify. Your fulfillment cost lives in your 3PL invoice, not in Shopify. Your shipping carrier costs live in your carrier account, not in Shopify. Your discount allocation across non Shopify-coded promotions lives in your accounting system, not in Shopify. Calculating contribution margin requires pulling data from multiple systems.

That is exactly the gap BreakevenHQ fills. Pull the order data from Shopify. Apply your fee assumptions, shipping cost defaults, fulfillment defaults, and refund haircuts. Show the gap. Update daily.

How to calculate this yourself

If you want to do this without a tool, the manual approach is:

First, export your orders for the last ninety days. Use the Shopify admin export or any analytics tool. Get gross revenue, COGS, refunds, shipping revenue, and discounts per order.

Second, pull your payment processor invoice for the same period. Sum up the actual fees you paid.

Third, get your 3PL invoice or calculate your in house fulfillment per order. Multiply by order count.

Fourth, get your shipping carrier invoices. Subtract shipping revenue from shipping cost. That is your net shipping cost.

Fifth, in a spreadsheet: revenue minus COGS minus the three cost categories above. Divide by revenue. That percentage is your contribution margin.

Sixth, recompute monthly. The number drifts every time you change product mix, change shipping rates, change 3PLs, or shift promo intensity.

The whole exercise takes an analyst three to four hours the first time, ninety minutes the next time. Most operators never get around to doing it. That is why the dashboard's gross margin number, the wrong number, is the one being used for every decision.

The Hustle Marketers angle

We do this calculation for every client at Hustle Marketers because the math underlies everything we do on the ad buying side. If we are running paid acquisition for a brand and we do not know their real contribution margin, we are flying blind. Our break-even targets are wrong. Our scaling decisions are wrong. The campaigns we call profitable in the weekly report are actually losing the client money.

After enough years of doing this manually in spreadsheets, we built BreakevenHQ to automate it. The math is the same. The inputs come from the same sources. The output is the same. The difference is that the dashboard updates every time a new order comes in, every time the merchant updates a cost per item in Shopify, every time a refund processes. The shift from a quarterly spreadsheet to a live dashboard changes how often you can act on the information.

If you want to see your real contribution margin and your real break-even ROAS without doing the spreadsheet work yourself, BreakevenHQ pulls it from Shopify automatically. Thirty day free trial. No credit card. The Shopify gross margin number sits right next to the real number so you can see the gap in real time.

The lie is comfortable. The truth is more profitable.


Written by Ishant Sharma, founder of Hustle Marketers, a Google Partner and Meta Business Partner performance marketing agency working with ecommerce brands across Shopify, BigCommerce, WooCommerce, and Magento.