Accounting & Finance
How do I calculate true contribution margin by channel for Shopify vs Amazon vs wholesale?
Comparing real profitability across Shopify, Amazon, and wholesale after each channel's fees.
Last updated September 16, 2026
Same formula on every channel. Different fees. One set of GL accounts, tagged by class. Not a second chart of accounts.
Contribution margin vs gross margin
Contribution margin per unit is selling price, minus weighted average cost, minus outbound shipping and fulfillment, minus payment and marketplace fees, minus a returns allowance, minus the variable ads that actually bought the order. Express it on net revenue, not gross. Gross margin stops at price minus WAC. That is why Shopify can look healthier than Amazon until you put fulfillment and referral fees in the same row. Wholesale often has no ads and a fat freight-out or chargeback line. Compare contribution, or you will kill the wrong channel.
The fee stack by channel
The fee stack is what changes. Shopify: payment processing, Shop Pay or PayPal, 3PL pick-pack, outbound parcel, a returns allowance, the ads that bought that order. Amazon: referral fee, FBA fulfillment or inbound, storage if you treat it as variable, advertising, a returns allowance. Wholesale: freight-out, EDI or chargebacks that are really a price cut, almost no payment fee, almost no ads. Do not drop FBA fees into COGS to "fix" Amazon. Do not hide 3PL pick-pack inside unit cost. Those are fulfillment. They belong on this line, not in WAC.
Using WAC as the unit cost
WAC is the unit cost: the blend after receipts, supplier-invoice variances, and landed freight and duty. Last received price is not that number. BOM cost is not that number. Opening a PO does not move it. A kit built at ship time expenses live component averages even if the kit SKU still shows a leftover $1. One expensive DDP container re-prices every unit you still hold, so this month's Amazon fee is not why last month's Shopify margin moved. Factory-direct FOB should show a lower COGS than a DDP warehouse. That is expected, not an error. If FBA inbound really costs more than the 3PL, you need cost-by-warehouse. You cannot fake it with a second COGS account named Amazon.
Track channels with classes
Use classes (or dimensions) on the same sales, COGS, freight-out, fee, and returns accounts. Duplicate GLs per channel (Sales-Shopify, Sales-Amazon, COGS-Shopify, COGS-Amazon) make the trial balance unreadable and still fail when a SKU switches nodes. Stamp the class on the shipment or invoice when it posts. Do not allocate rent, salaries, or brand marketing into this number. Those are below contribution. Negative "margin SKUs" are usually priced below the current blend, or the blend is garbage. Reconcile valuation to the GL by SKU before you argue about ads. Then run the class P&L and subtract the variable lines the P&L does not already show. Do not restate historical COGS to make last quarter's Amazon look better.
Connect Claude or ChatGPT to your Fulfil data with the Fulfil MCP, then run this prompt on your own numbers.
You are the finance lead for a brand selling on Shopify, Amazon, and wholesale. Here is: sku, channel, units, net_revenue, wac, last_received_price, outbound_ship, payment_or_marketplace_fees, returns_allowance, variable_ads, warehouse (own / 3pl / fba). [paste] Produce: 1. Gross margin and contribution margin per unit and as a percent of net, by channel. 2. Channels that look profitable on gross and lose on contribution (fees, ship, ads, returns). 3. Rows using last received price or a leftover kit cost instead of WAC. 4. Whether class-on-one-GL is being faked with duplicate channel accounts. Do not allocate overhead. Do not restate historical COGS.
Explore this in Fulfil
More on Accounting & Finance
Moving-average cost and contribution margin
How weighted-average cost feeds an honest contribution margin for each product.
How do I speed up month-end close for a Shopify Plus brand with a 3PL and Amazon?
Closing the books faster when sales run across Shopify, a 3PL, and Amazon.
How do I reconcile Shopify Payments payouts and Amazon settlements to my bank account?
Matching Shopify and Amazon payouts to your bank so cash ties out cleanly.
See it run on
your data.
Fulfil runs inventory, fulfillment, purchasing, and accounting for scaling DTC brands in one system.