Shopify reconciliation, explained

Contribution margin for a Shopify store, from reports you already have

Published
Short answer

Contribution margin for a Shopify store is Net Sales minus the costs that rise with each order, taken in three layers: product cost, then fulfilment and payment fees, then ads. Every input is in reports you already have, and a cost you do not have yet is named as missing rather than counted as zero.

The three layers

Where each input lives

Sources: Shopify Help Center: Cost per item · Shopify Help Center: Profit reports · Shopify Help Center: Types of charges on your bill · Shopify Help Center: Viewing your payout fees

A worked example (SAMPLE NUMBERS)

LineAmount
Net Sales$150,000
Cost of goods sold-$57,000
CM1$93,000
Fulfilment-$14,500
Payment fees-$4,650
CM2$73,850
Ad spend-$31,000
CM3$42,850

SAMPLE NUMBERS, not a store's figures. CM3 is about 28.6 cents of every Net Sales dollar.

When a cost is missing, say so

Our reasoning: if some products have no cost per item, work out CM1 on the sales that do have one and state how much of Net Sales that covers. If fulfilment or ad spend is missing for the period, stop at the last layer you can fill and name the one you cannot. A margin with a named gap can be acted on; a margin with a silent zero in it cannot. How a missing cost changes Shopify's own profit report is on profit reports missing costs.

CM per order, and why the average hides the losers

Divide each layer by the period's orders and you get an average contribution per order. Our reasoning: the average is the sum of orders that make money and orders that lose it, so a healthy average can sit on top of a product, a discount or a shipping zone that loses money on every order. Work out CM2 order by order from an orders export joined to cost per item, labels and fees, and sort by it.

What contribution margin cannot tell you

How estimated and traced numbers differ is on margin reports vs profit dashboards, and how ProfitRoot builds each figure is on the methodology. To see the layers on a sample store, open the demo.

Common questions

What are CM1, CM2 and CM3?

Three layers of contribution margin. CM1 is Net Sales minus cost of goods sold. CM2 also takes off the costs of getting each order out: fulfilment, shipping labels and payment fees. CM3 also takes off marketing, usually ad spend. The names are a convention, not a Shopify field.

Where do I find cost of goods sold in Shopify?

From cost per item on each product or variant, which Shopify describes as how much the product or variant costs you. Shopify records cost at the time of sale, so a cost added today does not fill in earlier orders, and sales with no cost show in Net sales without cost recorded.

What if some products have no cost entered?

Work out CM1 on the costed sales only and say how much of Net Sales that covers. Our reasoning: a missing cost counted as zero makes margin look better than it is, and nobody can see that it happened.

How do I get contribution margin per order?

Divide each layer by the orders in the same period for an average, or work it out order by order from an orders export joined to costs. The order-by-order view is the one that shows which orders lose money; an average can hide them.

Is contribution margin the same as profit?

No. Contribution margin stops before the costs that do not move with orders, such as rent, salaries and software. A store can have a healthy CM3 and still lose money once those are paid.

What this does not tell you

Which costs belong in cost of goods sold (freight in, duties, packaging) is an accounting choice your accountant owns. Put each cost in one layer and keep it there, so one month compares with the next.

The layer split and the method on this page are our reasoning, not Shopify statements. The worked example uses SAMPLE NUMBERS, not a store's figures.

Want contribution margin for your Shopify store, with every missing cost named?

Install ProfitRoot and see these steps on your own orders.

Install free from the Shopify App Store

Orders synced from a connected Shopify store are transmitted to and stored on our servers so they can be recomputed on later visits.

Related
Shopify profit report missing cost per itemWhere to find your Shopify feesHow to make a Shopify number defensibleAll Shopify reconciliation guides

Sources last checked 2026-11-13.