A profit and loss statement for ecommerce is a financial report that tracks revenue, cost of goods sold, variable costs, and operating expenses over a period. For Shopify brands, the format that actually works is contribution margin: gross sales at the top, every variable cost stripped out next, then fixed OpEx below the line. This guide shows the exact P&L structure we use across 100+ Shopify stores.
What does a real Shopify P&L look like?
A real Shopify P&L separates revenue, variable costs, contribution margin, and fixed operating expenses into distinct sections. The standard accounting-software template (Sales, COGS, Expenses) is too blunt for DTC. It hides processor fees inside revenue, mixes 3PL costs with G&A, and makes blended CAC look like overhead instead of the variable acquisition cost it actually is.
Below is the contribution-margin template we deploy in QuickBooks Online and Xero for Shopify brands between $1M and $25M in revenue. The line items are concrete because vague P&Ls produce vague decisions.
| Section | Line item | Source |
|---|---|---|
| Revenue | Gross product sales | Shopify orders (gross, pre-discount) |
| Revenue | Discounts and promotions | Shopify discount codes |
| Revenue | Returns and refunds | Shopify refunds + reserve accrual |
| Revenue | Shipping income | Shopify shipping charged |
| Revenue | Net revenue | Calculated |
| COGS | Product cost | Inventory system (Cin7, Shopify, ERP) |
| COGS | Inbound freight + duties | Freight forwarder bills |
| Variable costs | Shopify Payments fees | Shopify payout report |
| Variable costs | Alt processor fees (PayPal, Shop Pay Installments, Affirm) | Processor statements |
| Variable costs | 3PL pick, pack, storage | ShipBob / 3PL invoices |
| Variable costs | Outbound shipping (carrier) | Carrier bill |
| Variable costs | Transaction-level apps (Recharge, Loop, Gorgias per ticket) | App invoices |
| = Contribution margin | Calculated | Net revenue − COGS − variable costs |
| Marketing | Meta ads | Ad platform |
| Marketing | Google ads | Ad platform |
| Marketing | TikTok / influencer / affiliate | Ad platform / Triple Whale |
| Marketing | Klaviyo + retention tools | SaaS bill |
| OpEx | Payroll + contractors | Gusto / Deel |
| OpEx | Software (SaaS stack) | Ramp / BILL |
| OpEx | Rent, insurance, professional fees | AP system |
| = Operating income | Calculated | Contribution margin − marketing − OpEx |
If your P&L doesn't show contribution margin on a single line, you can't answer the only question that matters: does each order make money before overhead?
Takeaway: rebuild the chart of accounts to mirror the structure above. Our chart of accounts examples for Shopify post has the full numbered list with COA codes.
How do you map Shopify payouts onto the P&L correctly?
Shopify payouts arrive in the bank as a single net deposit, but the P&L needs the gross sale, the fees, the refunds, and the taxes shown separately. The standard approach is a Shopify clearing account in QuickBooks or Xero that holds gross sales and gets emptied by fee, refund, and tax journal entries. This is the reconciliation pattern most ecommerce bookkeepers use.
According to the Shopify Help Center guide to payouts, a payout is the balance of sales minus refunds, chargebacks, and Shopify Payments fees over the payout period. The deposit in the bank is the net number. The P&L should not be.
A worked Shopify payout journal entry
Assume a Shopify store has the following activity for a single payout period: $50,000 gross sales, $2,500 in discounts, $1,800 in refunds, $1,450 in Shopify Payments fees, $3,200 in sales tax collected, and $200 in chargebacks. The net deposit is $40,850.
Sales tax collected is a liability, not revenue. Discounts and refunds are contra-revenue. Fees are variable costs. The journal entry that correctly maps all of this:
Most teams automate this with a sync tool. For Shopify stores using Xero or QuickBooks, we use Bookkeep across the 100+ stores Ottit closes books for. It posts a daily summary entry that breaks out the lines above so the bank feed reconciles in one click. The A2X documentation for Shopify accounting describes a similar payout-summary approach if a store already runs on it.
Takeaway: never let net deposits hit revenue. Use a clearing account and post the gross breakdown. Our bank reconciliation worked example for Shopify walks through the full month-end reconciliation.
Where do 3PL costs, shipping, and ad spend belong on the P&L?
3PL costs and outbound shipping belong in variable costs, above the contribution-margin line. Ad spend belongs in operating expenses, below the line, even though it scales with revenue. This split keeps gross product economics honest and prevents blended CAC from masquerading as cost of goods. The distinction matters when a brand starts looking at unit economics or selling the business.
Why ad spend doesn't go in COGS
We see this mistake on roughly one in three P&Ls we inherit. A founder buries Meta and Google spend inside COGS to make gross margin look like overhead, or worse, to dilute it across SKUs as a percentage. Under US GAAP, advertising is a period cost and does not capitalize into inventory. It is operating expense. Putting it in COGS inflates reported gross margin and breaks every benchmark a lender or acquirer will run.
How to allocate 3PL fees properly
ShipBob, Stord, and most 3PLs invoice in three buckets: pick-and-pack, storage, and outbound shipping. Pick-and-pack and outbound shipping are per-order variable costs that flow above the contribution-margin line. Storage is a fixed monthly fee that flows below the line in OpEx. Splitting the 3PL invoice into these three lines on the P&L gives a true variable cost per order.
- Pick-and-pack fee: variable, per order — above the line.
- Outbound carrier cost (passed through by 3PL): variable, per order — above the line.
- Monthly storage / pallet fees: fixed — below the line in OpEx.
- Receiving fees for inbound containers: capitalize into inventory (COGS when sold).
- Project fees (kitting, rework): variable if tied to specific orders, otherwise OpEx.
Takeaway: split the 3PL bill into at least three GL accounts before posting. A single 'Fulfillment' line collapses the answer to the most important DTC question — what does it actually cost to ship one order.
How do you handle pre-orders, subscriptions, and gift cards on the P&L?
Pre-orders, subscriptions billed in advance, and gift card sales create deferred revenue. The cash hits the bank, but the revenue does not belong on the P&L until the product ships or the gift card is redeemed. Under FASB ASC 606 (Revenue from Contracts with Customers), revenue is recognized when control of the goods transfers to the customer.
This is the trap that catches the most Shopify brands during diligence. A brand running a pre-order launch for a new SKU collects $200,000 in cash. The naive bookkeeping posts $200,000 to revenue in the month of the launch. When the product ships three months later, gross margin looks wild because COGS hits a different period than revenue. The correct treatment posts the cash to a deferred revenue liability and releases it to revenue when each order actually ships.
Recharge subscriptions follow the same logic. When the Recharge subscription platform documentation bills a customer on day one for a quarterly box, only the first month of product should hit revenue when that first box ships. The remaining two months sit in deferred revenue. Our deferred revenue playbook for Shopify brands goes deep on the journal entries for subscriptions, multi-month plans, and refund liability.
Gift cards behave similarly. The cash sale is a liability until redemption. Brands also need a breakage policy — the percentage of gift cards historically never redeemed — which gets recognized as revenue on an estimated basis. Most DTC brands assume 5% to 10% breakage based on their own data.
Takeaway: any Shopify store running pre-orders, subscriptions, or selling gift cards needs a deferred revenue account on the balance sheet and a monthly release journal entry. If the books don't have one today, the P&L is overstating revenue.
What about returns reserves and processor reserves?
A returns reserve accrues an estimate of future refunds on revenue already recognized. A processor reserve is cash a payment platform holds back as protection against chargebacks. Both are real, both affect the P&L, and both get missed on most early-stage Shopify books. They should be reflected as a contra-revenue accrual and a restricted-cash asset, respectively.
Returns reserve
If a Shopify store has a historical 12% return rate, then 12% of December revenue will likely be refunded in January and February. ASC 606 requires recognizing that expected return at the time of the original sale, not when the refund actually processes. A typical month-end entry estimates the reserve based on trailing return data.
Processor reserves
Some payment processors — PayPal, Klarna, Affirm, Shop Pay Installments under certain risk profiles — hold back a percentage of sales as a rolling reserve. That cash exists, the store owns it, but it's not in the operating account. On the balance sheet it belongs in a 'Restricted cash – processor reserve' account, not in revenue. The release back to the operating bank account weeks later is not income — it's a transfer between cash accounts.
The Shopify Shop Pay Installments help article describes how installment payments settle. A brand using BNPL needs to track the held-back portion separately so the P&L is not overstated by uncollected receivables.
Takeaway: book a monthly returns reserve true-up and carve out processor reserves into a restricted-cash account. The P&L should reflect economic reality, not the bank balance.
Which metrics matter most on a DTC profit and loss statement?
The metrics that matter on a DTC P&L are gross margin, contribution margin, MER (marketing efficiency ratio), and operating income. Revenue growth alone doesn't tell the story — a brand can double revenue while contribution margin goes negative. The benchmarks below reflect what we see across the Shopify brands we close books for and what shows up in industry research.
| Metric | Formula | Healthy DTC range |
|---|---|---|
| Gross margin | (Net revenue − COGS) / Net revenue | 55% – 75% |
| Contribution margin | (Net revenue − COGS − variable costs) / Net revenue | 25% – 45% |
| MER (blended) | Net revenue / total ad spend | 3.0x – 5.0x |
| nCAC payback | New customer CAC / first-order contribution | < 12 months |
| OpEx ratio | Fixed OpEx / Net revenue | 15% – 25% |
| Operating margin | Operating income / Net revenue | 5% – 15% |
According to the Shopify Plus blog for enterprise commerce research, the highest-performing DTC brands in 2026 focus on contribution margin per order rather than raw revenue, because rising acquisition costs and tariff pressure have squeezed gross margins industry-wide. Digital Commerce 360 industry research and Statista's US e-commerce market reports both track similar margin compression trends.
Attribution tools like Triple Whale and email/SMS revenue from Klaviyo feed the marketing side of these numbers, but they should never replace the GL. The P&L is the source of truth — dashboards are a lens.
Revenue growth that comes from buying customers at a loss is just expensive churn. Contribution margin tells you whether the growth is real.
Takeaway: track these six metrics monthly on a one-page financial summary alongside the P&L. Our monthly bookkeeping checklist for Shopify has the full close cadence.
What are the three P&L red flags before a brand hits $5M?
The three P&L red flags we surface for founders approaching $5M are blended CAC creeping into COGS, inventory write-downs hiding inside OpEx, and processor reserves treated as expense. Each one inflates one number on the P&L while hiding another, and each one becomes a diligence issue the moment an acquirer or lender looks at the books.
Red flag 1: blended CAC in COGS
The brand quotes a 65% gross margin. The acquirer pulls the trial balance and finds $400,000 of Meta spend coded to a 'Marketing COGS' account. True gross margin is 48%. The deal repricing is brutal. This pattern shows up in every other set of inherited books from brands trying to look gross-margin-efficient on paper.
Red flag 2: inventory write-downs hiding in OpEx
A founder writes off $80,000 of obsolete SKUs and codes it to 'Operating expenses – inventory adjustment' instead of COGS. Gross margin looks great. EBITDA looks bad. Both are wrong. Inventory write-downs are COGS by definition under GAAP. Hiding them in OpEx makes the gross margin story unreliable and obscures a real demand-planning problem.
Red flag 3: processor reserves treated as expense
When PayPal or Affirm holds back 10% of weekly sales as a reserve, the cash isn't in the operating account. Some bookkeepers code that holdback to 'Processor fees' as an expense. It's not an expense. It's a restricted-cash asset. The error overstates expenses, understates assets, and understates net income simultaneously.
Takeaway: pull a trial balance and search for these three patterns. They are the most common pre-$5M errors we find when onboarding a new Shopify brand. Reach out for a books review if any of this sounds familiar from your last close.
How often should the ecommerce P&L close?
Most Shopify brands above $1M in revenue close monthly within 10 to 15 business days. Brands above $10M run a tighter 5- to 10-day close with full accrual accounting, automated payout sync, and AP automation. Brands below $1M often close monthly but on a 20-day cycle. Closing weekly is rare and usually unnecessary outside high-burn or PE-owned environments.
The stack that lets a brand hit a 10-day close consistently:
- Accounting platform: QuickBooks Online or Xero. See our QuickBooks Shopify integration guide and Xero Shopify reconciliation architecture.
- Shopify payout sync: Bookkeep for revenue recognition and daily payout summaries across multiple sales channels.
- AP automation: BILL or Ramp for vendor invoices and approvals.
- Inventory / COGS: Cin7, DOSS, or NetSuite depending on SKU complexity.
- Sales tax: Bookkeep for filing and remittance across nexus states.
- Payroll: Gusto for US team, Deel for international contractors.
- Banking: Mercury or Brex with categorized transactions feeding the GL daily.
Sole-proprietor stores filing Schedule C follow the same P&L logic but report on a simpler form. IRS Schedule C (Profit or Loss from Business) instructions shows the line-by-line federal categories. Most LLCs and S-corps roll their internal P&L into Form 1120-S or 1065. The internal management P&L should always have more detail than what gets filed — that's the whole point of running a contribution-margin format.
Takeaway: pick a close cadence that matches the brand's stage and stick to it. A reliable 15-day close beats an aspirational 5-day close that slips to 30 days every other month.
Sources
- the Shopify Help Center guide to payouts
- the Shopify Shop Pay Installments help article
- the Shopify Plus blog for enterprise commerce research
- FASB ASC 606 (Revenue from Contracts with Customers)
- IRS Schedule C (Profit or Loss from Business) instructions
- the IRS Small Business and Self-Employed Tax Center
- Digital Commerce 360 industry research
- Statista's US e-commerce market reports
- the Recharge subscription platform documentation
- the A2X documentation for Shopify accounting
- Triple Whale
- Klaviyo
This guide is educational. It describes how the ecommerce accounting industry generally handles P&L structure for Shopify brands. It is not individualized tax, legal, or accounting advice. Brands should consult their own CPA or bookkeeper before making decisions about their specific books or filings.