A profit-and-loss statement (P&L, also called an income statement) is the single most-referenced financial document in any business. For a Shopify operator, it's the line-by-line answer to "where did the money actually go?" Most operators have looked at one — usually a tax-time PDF from their accountant — but very few read their P&L weekly or monthly the way operators of mature businesses do.
That's the gap this article closes. Every line, what it means, where the numbers come from, what each one tells you that the others don't, and the four most common ways an ecommerce P&L lies if you don't know what to look for.
Why Shopify's default reports aren't a real P&L
Open Shopify admin → Analytics → Reports. You'll find: Sales, Sessions, Conversion rate, Top products, Returning customer rate, Discount usage. All useful. None of it is a P&L. Shopify's reports show you revenue and a small handful of operational metrics — they don't connect revenue to costs, don't show contribution margin, don't reflect ad spend, and don't include any expenses you pay outside Shopify (which is most of them).
A real P&L for a Shopify business has a specific structure that flows top-to-bottom from gross revenue to net profit, with named subtotals at each layer. That structure exists for a reason — each subtotal answers a different operator question. Skip layers and you can't see where the money's leaking.
The structure: 9 lines, 4 subtotals
Here's the canonical structure, top to bottom. Anything else is a variant of this.
- Gross Revenue
- − Discounts
- − Refunds
- = Net Revenue
- − COGS (Cost of Goods Sold)
- = Gross Profit
- − Transaction fees
- − Ad spend
- = Contribution Margin
- − Operating expenses (apps, tools, content, team, agencies)
- − Business expenses (rent, salaries, professional services)
- = Net Profit
Four subtotals: Net Revenue, Gross Profit, Contribution Margin, Net Profit. Every operator decision maps to one of them. Let's walk each line.
Gross Revenue → Net Revenue: the line nobody knows about
Gross Revenue is the dollar value of orders BEFORE discounts and refunds. Most operators report this as "revenue" — and it's wrong, because you don't actually receive that much. A $100 order with a 20% discount and an eventual refund is gross $100, but your bank deposit is $0.
Net Revenue is what you actually keep from the customer side: gross minus discounts minus refunds. That's the number that matters for every margin calculation that follows.
Note
COGS: the line that's almost always wrong
COGS — Cost of Goods Sold — is the direct cost of the units you sold. For a physical-goods Shopify store, that's the manufacturing/sourcing cost per unit, plus inbound shipping, plus any per-unit handling fees. For a dropshipper, it's the supplier cost per order.
Three reasons COGS is the most-mis-stated line on a Shopify P&L:
- Most operators don't enter it product-by-product. They estimate a flat 30% COGS ratio across the catalog, which only matches reality if every SKU has identical economics. It doesn't.
- Tiered pricing isn't reflected.If your supplier charges $12/unit at <100 orders and $9/unit at 100+, your COGS varies with volume — but a flat-rate model averages them and lies both directions.
- Dropshipping volatility. AliExpress prices change daily; CJ Dropshipping invoices in different currencies; supplier shipping costs swing with fuel prices. A "set it and forget it" COGS estimate decays fast.
For the operator's guide on getting COGS right, see how to calculate COGS for Shopify properly.
Gross Profit: the gate to growth
Net Revenue − COGS = Gross Profit. This is the layer that funds every other cost in the business.
A healthy ecommerce gross margin sits in the 50-70% range for most categories. Apparel can drop to 40-50%, jewelry 60-75%, supplements 70%+, dropshipping 25-40% (the cost penalty for outsourcing inventory). If your gross margin is below 30%, no amount of marketing efficiency saves you — every unit sold is barely covering its own product cost.
| Common assumption | What's actually true | |
|---|---|---|
| Gross margin <30% | We just need more volume to dilute fixed costs. | More volume at this margin scales the loss. Either raise price, change suppliers, or change product mix before chasing scale. |
| Gross margin 30-50% | Acceptable for ecommerce. | Workable but tight. Ad spend will eat the margin fast. Watch contribution margin like a hawk. |
| Gross margin 50-70% | Probably fine. | Healthy zone. Most decisions will be about which channel to scale, not whether the unit economics work. |
| Gross margin >70% | Print money. | Either premium positioning, an exceptional category, or hidden costs not in COGS yet. Re-check the COGS calc. |
Contribution Margin: the most important number on the page
Gross Profit − Transaction fees − Ad spend = Contribution Margin. This is what's left to cover all your fixed costs and produce profit, after every variable cost of doing the next sale.
Why this matters: contribution margin is the layer that decides whether more revenue helps you or hurts you. If your contribution margin is positive, every additional sale is good (eventually it covers fixed costs and produces profit). If it's negative, every additional sale digs the hole deeper — you can't scale your way out.
The math also produces your break-even ROAS: 1 ÷ contribution margin %. A 25% CM means break-even ROAS is 4×; a 40% CM means break-even ROAS is 2.5×. This is the only ROAS benchmark that matters for your business — generic industry benchmarks are misleading.
Operating expenses vs business expenses: why the split matters
Below contribution margin, the costs split into two buckets. The split is structural, not vibes-based.
- Operating expenses are the recurring costs of running the store specifically — apps, tools, content, freelance creative, agency retainers, customer-service labor. Every store has these and they're directly proportional to running this kind of business.
- Business expenses are everything else — rent, salaries, professional services (accountant, lawyer), insurance, software unrelated to the store, founder draws.
The reason to split them: when you sell the business, the buyer cares about operating expenses (those come with the store) and discounts business expenses (those go away or change with new ownership). A P&L that lumps them together makes your actual sustainable margin invisible to anyone evaluating the business.
Tip
Net Profit: the final answer (mostly)
Net Profit is what's left after every cost. It's also the loneliest number on the P&L because most operators only check it once a quarter, when an emotional attachment to the wrong layer has already driven a bad decision.
Net Profit is the right number for: tax, investor reporting, M&A valuation. It's the wrong number for: weekly operating decisions. By the time net profit moves, the leak that caused it has been bleeding for weeks.
For weekly decisions, watch contribution margin %. It moves first.
The four ways an ecommerce P&L lies if you don't watch for them
- Discounts double-counted. Some tools subtract discounts from gross revenue AND treat them as a separate line item, understating net revenue by the discount amount. Check your tool's math against a known small example.
- Tax baked into revenue. EU/UK stores sell tax-inclusive ($100 with VAT included). Reporting that as $100 of revenue overstates by 17-20%. Use a "report ex-tax" toggle or pull tax_total out manually.
- Ad spend under-counted. If your dashboard pulls only Meta Ads (because that's the only platform you've connected), and you also run Google + TikTok, your contribution margin is wildly overstated. Connect every channel that takes money.
- Operating expenses missed entirely. The Klaviyo bill. The Shopify Plus monthly. The agency retainer. The freelance designer's invoice. None of these show up in Shopify's reports — they need to be entered into your P&L manually or via integrations.
How Ecom Forward handles this