Contribution margin is what a sale leaves after the costs that rise and fall with that sale. CM1 is net revenue minus landed COGS (cost of goods sold). CM2 also subtracts fulfillment, shipping, payment and marketplace fees. CM3 also subtracts advertising. Calculate it separately for Amazon and Shopify, because the same product carries different fees on each. One blended margin gives the wrong break-even ROAS (sales divided by ad spend).
Contribution margin is the money a sale leaves behind after you pay every cost that exists only because that sale happened. For a brand on Amazon and Shopify, calculate it per channel in three steps. CM1 subtracts landed product cost. CM2 subtracts fulfillment and fees. CM3 subtracts advertising.
It answers a narrower question than profit: if we sell one more unit on this channel, how much cash does it add toward rent, salaries and the rest?
Most guides to contribution margin for ecommerce assume a single Shopify store. If you also sell on Amazon, the same product has a different cost structure on each channel. One blended number will quietly mislead you. It hides which channel earns money and how much you can afford to spend on ads.
What contribution margin is
Contribution margin is net revenue minus variable costs. A variable cost is one that rises and falls with volume: the product itself, the box it ships in, the marketplace fee, the ad click that brought the buyer. A fixed cost stays roughly the same whether you sell 1,000 units or 1,500: salaries, office rent, software subscriptions.
Net revenue is the amount you actually keep from the customer, after discounts and returns. It is not the same as gross sales, which is price times quantity before any of that comes off.
Contribution margin can be stated in dollars per unit, dollars per period, or as a percentage of net revenue. You need all three. Percentages compare channels. Dollars pay the bills.
The three tiers: CM1, CM2, CM3
Most brands split contribution margin into three steps, so they can see where the money goes.
| Tier | Starts from | Subtracts | Tells you |
|---|---|---|---|
| CM1 | Net revenue | Landed cost of goods sold (COGS) | Is the product priced well against what it costs to make and land? |
| CM2 | CM1 | Fulfillment, shipping, payment processing, marketplace fees, storage | What does it cost to sell and deliver through this channel? |
| CM3 | CM2 | Advertising and other marketing that scales with sales | Does the channel earn money after paying to acquire the buyer? |
Landed COGS is the full cost of getting a unit into your warehouse: the factory price plus freight, duties and inbound handling. If you are not sure yours is complete, start with how to calculate COGS and landed cost.
These tier definitions are not a standard. Contribution margin is a number for running the business. It is not a line on a GAAP income statement, the profit report under standard US accounting rules. Companies draw the lines differently. None of that is wrong. What goes wrong is a team where finance, the Amazon manager and the agency each use a different version. Write down once which cost lines sit in each tier, and make every report use that list.
A side-by-side example: one product, two channels
Here is the same product sold on two channels. On Amazon it goes through Fulfillment by Amazon (FBA, where Amazon stores and ships your inventory). On Shopify it is shipped by a third-party warehouse. All figures are illustrative numbers per unit, chosen to be realistic in shape, not taken from any brand.
| Per unit | Amazon (FBA) | Shopify |
|---|---|---|
| List price | $28.00 | $30.00 |
| Discounts (coupons, codes, subscriptions) | −$1.00 | −$4.50 |
| Returns allowance | −$0.50 | −$0.50 |
| Net revenue | $26.50 | $25.00 |
| Landed COGS | −$6.00 | −$6.00 |
| CM1 | $20.50 (77.4%) | $19.00 (76.0%) |
| Referral fee / payment processing | −$4.05 | −$1.04 |
| FBA fee / pick, pack and ship | −$5.20 | −$5.00 |
| Storage | −$0.40 | −$0.25 |
| CM2 | $10.85 (40.9%) | $12.71 (50.8%) |
| Ad spend per unit | −$6.00 | −$6.50 |
| CM3 | $4.85 (18.3%) | $6.21 (24.8%) |
A few notes on where the numbers come from:
- Referral fee. Amazon charges a percentage of the sales price on every order. In Beauty, Health and Personal Care it is 8% at $10 or less and 15% above $10. The example uses 15% of the $27 the buyer pays.
- Payment processing. Shopify Payments charges 2.9% + 30¢ per online card sale on the Basic plan, less on higher plans. On $25.50 charged that is about $1.04.
- FBA fee and storage. Amazon’s fulfillment fee depends on size, weight and price. Storage is charged monthly on the average cubic feet your inventory occupies. Check yours in Amazon’s Revenue Calculator. The example uses round figures.
- Coupon and deal fees. Amazon charges its own fee to run coupons and deals, on top of the discount itself. It belongs in CM2. The example leaves it out to keep the table short.
- Returns allowance. The expected cost of returns, booked when the sale happens. On Amazon it should also cover fees you do not get back. When you refund an order, Amazon returns the referral fee minus a refund administration fee. The FBA fulfillment fee is not refunded.
Now read the table the way a founder would. Amazon brings in more net revenue per unit, $26.50 against $25.00, because it runs fewer discounts. For many brands it also sells more units. By any revenue report, Amazon is the stronger channel.
But Amazon takes a 15% cut before fulfillment, and that one line wipes out the price advantage. By CM2, Shopify keeps $1.86 more per unit. By CM3, after ads, Shopify keeps $6.21 against Amazon’s $4.85. The channel with higher revenue has lower contribution margin. That is common, and a revenue dashboard will never show it to you.
None of this means “move everything to Shopify”. Amazon may reach buyers you could never reach on your own store at any ad cost. It means the price of that reach is visible, per unit, and you can decide what it is worth.
Break-even ROAS comes from CM2
ROAS, return on ad spend, is revenue divided by ad spend. Break-even ROAS is the ROAS at which ads pay for themselves and nothing more:
Break-even ROAS = 1 ÷ CM2 margin %
It uses CM2 because CM2 is what a sale leaves before any advertising. Every dollar of CM2 can go to ads before the sale starts losing money.
From the example:
- Shopify CM2 margin is 50.8%, so break-even ROAS is 1 ÷ 0.508 = 1.97.
- Amazon CM2 margin is 40.9%, so break-even ROAS is 1 ÷ 0.409 = 2.44.
On Amazon this is usually shown as ACoS, advertising cost of sales. ACoS is ad spend divided by attributed sales (the sales Amazon credits to your ads), so it is ROAS flipped upside down. Amazon’s own guide says your ACoS needs to stay below your profit margin to make money. Here, break-even ACoS is 40.9%.
Why one blended margin gives the wrong answer
Suppose the brand averages its margins together, weighted by revenue, with Amazon at 70% of revenue. The blended CM2 margin is about 43.9%, and the blended break-even ROAS is about 2.28. That single target now gets applied to every campaign.
- A Shopify campaign running at ROAS 2.1 looks like it loses money, because 2.1 is below 2.28. It is actually profitable. Its real break-even is 1.97. Every $1,000 of spend returns $2,100 of revenue and about $1,068 of CM2, so it earns $68. The team cuts it.
- An Amazon campaign running at ROAS 2.35 looks profitable against 2.28. Its real break-even is 2.44. Every $1,000 of spend returns $2,350 of revenue and about $962 of CM2, so it loses $38. The team scales it.
The blended number is wrong in both directions at once. Break-even ROAS has to come from the margin of the channel where the sale lands.
One more adjustment. Ad platforms report attributed sales, which are usually closer to gross sales than to net revenue. Say your CM2 margin is calculated on net revenue. Then you have two choices. Divide your break-even ROAS by the ratio of net revenue to gross sales for that channel. Or compare it against ROAS recalculated on net revenue. Otherwise every campaign looks slightly better than it is.
Where it goes wrong
Meta spend that drives Amazon sales is charged to Shopify
Many brands run Meta ads that send people to an Amazon listing. Meta’s pixel (its tracking code on your store) cannot see an Amazon checkout. Unless you send those conversions back to Meta yourself, the sales do not appear in Meta’s reporting. If all Meta spend is charged against the Shopify store, Shopify’s CM3 looks terrible and Amazon’s looks better than it is. Split ad spend by destination: an ad that sends people to Amazon is an Amazon cost, whichever platform sold the ad.
Returns counted at the wrong time
Returns arrive weeks after the order. Say you subtract them when the refund is processed. Recent weeks look better than they will end up, and older weeks take the hit later. Shopify’s own sales reports record returns on the date they are processed, not the date of the original order. For contribution margin, book an expected returns allowance at the time of sale. Base it on each channel’s recent return rate. Then adjust it as actual returns land. This matches how US GAAP treats a sale with a right of return: revenue is recorded after taking off the returns you expect.
Missing COGS for some SKUs
A SKU (your code for one product version) with no COGS on file is treated as if it cost nothing, which gives it a 100% CM1. This happens most with new launches, bundles, multipacks and variants added after the cost sheet was built. One unpriced bundle can lift a whole product family’s margin by several points. Check that every SKU that sold in the period has a dated landed cost. Report the ones that do not, instead of leaving them blank.
Gross sales instead of net revenue
Shopify defines gross sales as product price times quantity, before taxes, shipping, discounts and returns. Amazon’s Business Reports show ordered product sales, which is also before refunds. Neither is net revenue. If CM is calculated on gross sales, the channel with heavier discounting, usually the store, looks more profitable than it is. For fees and refunds on Amazon, the settlement report (Amazon’s statement of what it paid you) is the source of record. See Amazon settlement report vs orders report.
Subscription discounts left out
Subscriptions carry a standing discount on every order. On Amazon Subscribe & Save, you can fund a 5% or 10% discount, and Amazon funds an extra 5% on orders of five or more items. On Shopify, the discount is whatever your subscription app is set to. The seller-funded part reduces your net revenue on every recurring order. Subscribers may be worth more over time, but that is a lifetime value question. Per order, their contribution margin is lower.
Fixed costs pushed into contribution margin
Salaries, software, rent, photography and a flat monthly agency retainer do not belong in contribution margin. Spread across units, they make margin “improve” whenever volume rises, even if nothing about the product changed. The grey area is fees that rise with sales. Examples are an agency paid a percentage of ad spend, or a creator paid per sale. Those are variable, and we recommend putting them in CM3.
How to set it up
- Write your definitions down. One page: what counts as net revenue, which cost lines sit in CM1, CM2 and CM3, and how returns, subscriptions and agency fees are treated. Every report uses this page.
- Group products into families. Map every Amazon ASIN (Amazon’s product code) and Shopify SKU to a product family. Then a multipack and a single unit of the same product roll up together. Numbers for a single SKU on a single channel are usually too noisy to act on.
- Load dated landed COGS for every SKU. Keep the date each cost became effective, so an old order is not costed at a new price.
- Pull fees from settled data. Use the Amazon settlement report for referral, FBA, storage and refund fees, and Shopify payouts for processing fees. Settled data lags, so mark any recent period without a closed settlement as in flight, meaning not yet final.
- Assign ad spend to the channel where the sale lands. Tag each campaign by destination, Amazon or store, and charge it there.
- Build one table. Rows are product family by channel. Columns are units, net revenue, CM1, CM2, CM3 in dollars and percent, and break-even ROAS.
- Update it weekly and check it against cash. Each week, confirm that channel net revenue matches settlements and payouts, within a margin of error you set. When it does not, fix the data before anyone reads the margin.
Then look at CM3 dollars by product family and channel, not just percentages. A small, high-margin family may matter less than a large one with a thinner margin.
This is the kind of work Synthesis is built around. The definitions are written down once and shared by every answer. They include which listings make up a product family and whether an ad sends people to Amazon or to the store. COGS per unit can be proposed and approved as a business fact. Every number carries its revenue basis and period, and a period still in flight is labeled that way.
Questions people ask
What is a good contribution margin for an ecommerce brand?
There is no universal number, because tier definitions differ between companies. What matters is that CM3 dollars are positive for each channel and product family. They should also be large enough to cover your fixed costs with room left over.
What is the difference between CM1, CM2 and CM3?
CM1 is net revenue minus landed cost of goods. CM2 also subtracts the costs of getting the order to the customer and getting paid: fulfillment, shipping, payment processing and marketplace fees. CM3 also subtracts advertising and other marketing that rises with sales.
How do I calculate break-even ROAS from contribution margin?
Divide 1 by your CM2 margin, written as a decimal. If CM2 is 40% of net revenue, break-even ROAS is 2.5. That is the same as a break-even ACoS of 40% on Amazon. Use the CM2 margin for the channel where the sale lands.
Are Amazon FBA fees part of COGS or contribution margin?
Most brands keep FBA fulfillment, storage and referral fees out of COGS and subtract them in CM2. That keeps COGS comparable across channels. Practice varies. Pick one treatment, write it down, and apply it the same way on every channel.
Should salaries and software be included in contribution margin?
No. Contribution margin only includes costs that move with each unit or order. Salaries, rent, software and fixed agency retainers come out after contribution margin, on the way to operating profit.