Abstract glass blocks representing the alignment of stack, product page, and advertising systems

Why Shopify Contribution Margin Breaks When Stack, PDP, and Ads Don't Align

Why Shopify Contribution Margin Breaks When Stack, PDP, and Ads Don't Align

Sep 9, 2026

Octavian Contis 7 minutes

Share

Export last week’s paid orders from Shopify. Sit them next to the ad platform’s revenue number for the same dates. If finance cannot get from one file to the other without a side spreadsheet, you do not have a shared commercial number. You have two departments reporting success on different maths.

Contribution margin is the number that should sit in both files: what remains on an order after every cost that moves with volume. When marketing, ecommerce, and operations never put that number on the same page, each team can hit its own target while the business funds unprofitable growth.

This article is the operating model: a worksheet, a weekly review, and a rule for what to change. How ROAS is calculated already lives in Why Your Shopify Store Can Hit 4x ROAS and Still Lose Money.

Introduction

Shopify makes ad efficiency easy to screenshot and contribution hard to see. The platform will not join COGS, shipping, refunds, and fees to a campaign ID for you. Someone in the business has to own that join, or each team will keep optimising the metric they can export in one click.

Use this piece when the dashboards look fine and cash does not. Use The Real Cost of Running a Shopify Store for plan fees and app invoices. Use What Should I Do If My Shopify Revenue Is Plateauing? when revenue is flat and you need a constraint sequence. Here the job is narrower: one order-level number, three seats at the same table.

Bring last week’s ad export and last week’s Shopify order CSV to the first session. If those two files cannot be joined on date and order name without a third mystery sheet, start there. The worksheet is the join, written down, so both teams can point at the same row in the same week instead of arguing from two exports.

Stress-test the inputs in the Unit Economics Simulator once the worksheet exists. If you need help standing the review up, book a discovery call.

The number both teams can see

ROAS answers how much attributed revenue you bought per pound of media. Contribution margin answers how much of an order is left after variable costs. Both can be true on the same Tuesday.

ObjectWho already sees itWhat it cannot tell you
Campaign ROASMedia buyer, ad platformCOGS, shipping, refunds, fees on those orders
Store conversion rateEcommerce, Shopify analyticsWhether the order was discounted into a loss
Payout / P&LFinance, monthlyWhich campaign or SKU caused this week’s hole
Contribution per orderNobody, until you build itNothing useful if the inputs are guessed

The gap starts with incentives. Marketing is paid to hit ROAS. Ecommerce is paid to hit conversion. Ops is paid to ship. Finance sees the remainder a month later. Without a shared worksheet, the only person who notices the collision is the person who does the VAT return.

Weekly contribution review

Order worksheetSame 30 minutesMedia: keep, cut, orreshapeOffer: discount anddefault priceCost to serve: ship, fees,appsWeekly contribution review
Weekly contribution review

Build one order worksheet

Do this on real orders, not a model of an ideal customer.

Pick one paid order and one organic order from the same week, same product if you can. For each row, fill:

  1. Gross the customer paid (after shop discounts, before refunds).
  2. COGS for the units on that order.
  3. Discount value if a code or automatic discount applied.
  4. Shipping cost you paid, minus shipping the customer paid.
  5. Payment fees on that tender.
  6. Returns provision for that channel (use your trailing return rate, not a hope).
  7. Packaging if you track it.
  8. Attributed ad cost for the paid order only (campaign spend allocated by your current rule).
  9. App or labour cost per order only if you already measure it. The Hidden Cost of Running a Shopify Store When 12 Apps Quietly Eat Your Margins is the place to get that line honest. Leave it blank rather than invent a figure.

The remainder is contribution for that order. Two orders are a sample, enough to see whether paid and organic live in different businesses.

Write the allocation rule next to the ad-cost line: last click, data-driven, or a simple spend divided by paid orders. Changing the rule later is fine. Hiding the rule is how two teams “disagree” while using different files.

Repeat across a handful of SKUs and one more channel if you run more than one. You are looking for the largest leak, not a perfect cost-accounting system.

If you have no COGS in Shopify, pull it from the same sheet finance already uses for stock. Guessing a margin percentage to make the worksheet finish is how the meeting becomes theatre. A missing COGS cell is an honest blocker. Fill it from purchasing, then continue.

Attributed ad cost is the other cell people fake. Until you have a proper model, pick one boring rule and write it on the sheet: last week’s campaign spend divided by paid orders in that campaign, or last-click from your current ads export. The point is that marketing and finance use the same rule this week. You can replace it later. You cannot compare two weeks that used different silent rules.

A weekly review that includes ops

A monthly board pack cannot steer a campaign. Put 30 minutes on the calendar with three seats: media, ecommerce, and whoever owns fulfilment or the app list. Same worksheet. Same date range.

Agenda, in order:

  1. Paid versus organic contribution for last week.
  2. The largest line that moved (discount rate, refunds, shipping, CAC).
  3. One change for the coming week, owned by one seat.
  4. What will be true on the worksheet if that change worked.

If ops is absent, shipping and app overhead stay “someone else’s problem” and marketing will keep buying volume. If ecommerce is absent, discount experiments stay invisible to the P&L. If media is absent, the meeting becomes a finance lecture with no lever.

The output is a decision: keep spend, cut a cohort, change the offer, or change cost to serve. Skip a new dashboard until that decision exists.

Keep a running note of the decision and the expected worksheet change. Next week starts by checking that note. If the discount code came off and paid contribution stayed flat, look at the next largest line on the sheet. Run one hypothesis at a time, on the same rows.

What to change when the gap is discount, CAC, or overhead

Once two weeks of worksheets exist, the largest leak usually names the next action. Resist the urge to “align everything.”

Largest leak on the worksheetOwner this weekMove
Ad cost per order vs organicMediaCut the cohort with high refunds or one-and-done buyers; do not raise budget
Discount value on paid ordersEcommerceRemove the default sitewide code; measure conversion at a thinner offer
Shipping subsidyEcommerce + opsRaise threshold or stop free shipping on the SKUs that already lose money
Returns on paid vs organicMedia + ecommerceStop buying the audience; fix PDP honesty if the ad oversold the product
App / labour per orderOpsCut duplicate tools; do not treat this article as an integration rebuild

If paid contribution sits under your floor and the leak is audience quality, more creative tests will not save it. If the leak is a 20 percent code on every paid session, the media team cannot “find better ROAS” until the offer changes. If the leak is cost to serve, buying cheaper clicks adds more unprofitable parcels.

Set the floor in pounds per order, not as a ROAS slogan. Example shape, using your numbers: “Paid orders must clear £X contribution after the worksheet lines above before we increase daily spend.” Fill X from the two-order exercise, then tighten it as you sample more weeks.

Keep X visible in the same sheet as the orders. When someone asks to raise budget in Slack, the answer is whether last week’s paid rows cleared X, which saves you from negotiating from a screenshot of ROAS.

Conclusion

Contribution margin breaks when each team reports a metric the others cannot use. The fix is a worksheet on real orders and a weekly meeting that is allowed to change spend, offer, or cost to serve.

Build the two-order sheet. Name the allocation rule. Put three seats in the same 30 minutes. Change the largest leak first.

Model the same inputs in the Unit Economics Simulator. If the numbers are clear and the review still does not exist, book a discovery call and we will help you stand up the operating model before you scale.

Frequently Asked Questions

Contribution margin is revenue minus the variable costs of that order: cost of goods, discounts, shipping you actually pay, payment fees, a returns provision, packaging, and attributed ad spend. What remains has to cover rent, salaries, apps, and profit. ROAS never includes those lines. For the accounting contrast, see why 4x ROAS can still lose money.

They usually measure different objects. The ad platform reports attributed revenue over ad spend, while finance sees payouts after COGS, shipping, fees, and refunds. Both can be correct and still describe different businesses. Alignment means one order worksheet both teams update, with the same SKU, channel, and date range, reviewed in the same meeting.

Take one paid order from last week and start with the amount the customer paid. Subtract COGS, discount value, shipping cost net of what the customer paid, card fees, a returns provision for that channel, packaging, and the ad cost you attribute to that order. The remainder is contribution for that order. Repeat for a paid order and an organic order so you can see the gap between channels.

Pause or reshape a campaign when incremental orders are at or below zero contribution after variable costs, unless you have measured repeat purchase that recovers the first order on a timeline you can fund. A ROAS target alone is the wrong stop rule. Use the worksheet, then decide whether the leak is audience quality, discount depth, or fulfilment cost.

Weekly is enough to catch a bad cohort before it becomes a quarter. Marketing, ecommerce, and whoever owns fulfilment or apps should sit in the same 30 minutes with the same worksheet. Monthly P&L review is too late for campaign decisions. The meeting exists to approve or reject changes that move discount rate, CAC, or cost per order.

COGS, promotions, shipping subsidies, payment processing, returns, packaging, and the labour or app time that scales with orders. Platform dashboards are built to sell more media, not to run a P&L. The real cost of running a Shopify store lists the recurring platform and app lines. Put the per-order subset on the contribution worksheet.

Fill the worksheet for current paid and organic orders. Set a floor: the contribution you need after variable costs. If paid orders sit under the floor, change audience, offer, or cost to serve before you raise budget. The Unit Economics Simulator is useful once you have those inputs. A discovery call is the path when the numbers exist and the operating model does not.

Related Articles