How to Track Ecommerce Margin by Channel (Not Just Revenue)
by Trivas.ai
|
7 min read
Sep 30, 2026
Why Revenue by Channel Isn't the Metric That Matters
Say a brand does $2M a year on Shopify and $1.5M on Amazon. Pull up the dashboard and it looks like a good year. Both channels growing, total revenue up 30%. Founder's happy.
Except once you back out Amazon's referral fees, FBA storage costs, PPC spend, and a return rate that's quietly crept up to 12%, that $1.5M channel is barely breaking even. Maybe it's losing money outright. The Shopify side, meanwhile, is carrying the whole business.
You'd never know that from a standard channel report. Most dashboards default to top-line revenue by channel because it's easy to pull and it looks clean in a board deck. But revenue isn't profit, and a channel that generates more sales isn't automatically the one making you money.
This is why learning how to track ecommerce margin by channel matters more than watching revenue trend lines. Blended margin across your whole business hides exactly the thing you need to see: which channel is funding growth and which one is quietly draining cash every month it stays "healthy" on paper.
What 'Margin by Channel' Actually Means
Contribution margin per channel is revenue minus COGS, minus the fees specific to that channel, minus the ad spend that drove the sale, minus fulfillment costs. Whatever's left is what that channel actually contributed to the business.
That's different from gross margin. Gross margin is a product-level number: sale price minus cost of goods. It doesn't care whether the item sold on Amazon or Shopify. Channel contribution margin does care, because the cost structure to acquire and fulfill that sale changes completely depending on where it happened.
Take the same $50 product. On Amazon, you're paying a 15% referral fee, FBA pick-and-pack, monthly storage, and probably running Sponsored Products ads on top. On Shopify, you're paying payment processing (roughly 2.9%), your own shipping cost, and whatever you spent on Meta or Google to get the click. Two completely different fee stacks sitting under the same product and the same price point. Run the math on both and it's common to find one channel returns 25% margin and the other returns 8%, on the exact same item.
The Data You Need From Each Channel
To actually calculate this, you need:
COGS per SKU (not a blended average)
Amazon referral fees, FBA fulfillment fees, and storage fees
Shopify transaction fees and real shipping cost per order
Meta and Google ad spend, broken down at the campaign level
Returns, refunds, and chargebacks by channel
The problem is that none of this lives in one place. COGS is in your inventory system. Amazon fees are buried in Seller Central reports that change format more often than anyone would like. Shopify's numbers are in the admin. Ad spend is split across Meta Ads Manager and Google Ads. Reconciling all of it by hand, every month, is where most teams' numbers quietly go wrong; a fee gets missed, a campaign gets double-counted, someone uses last month's COGS.
There's also an attribution problem sitting on top of all this. GA4 is where you actually see which channel drove the order, as opposed to where it happened to get fulfilled. A customer can click a Meta ad, browse on mobile, then come back three days later and buy directly on Amazon. If you're only looking at Amazon's native reporting, you'll never see that Meta spend belongs in the Amazon channel's cost stack, not sitting off to the side as "unattributed."
A Simple Framework for Calculating Channel Margin
The formula itself isn't complicated:
Net Revenue - COGS - Channel Fees - Allocated Ad Spend - Fulfillment/Returns = Channel Contribution Margin
The hard part is allocation. Shared costs like a warehouse team, a customer service headcount, or a blended ad budget spanning multiple channels need to be split somehow. The simplest approach is proportional: allocate by revenue share or order volume. If Amazon is 43% of orders, it absorbs 43% of the shared warehouse labor cost. It's not perfect, but it's a lot more honest than ignoring shared costs entirely, which is what most spreadsheets do by default.
Here's what that looks like on $10K of revenue through each channel:
Line Item
Amazon
Shopify
Net Revenue
$10,000
$10,000
COGS
$3,500
$3,500
Channel Fees
$1,650 (referral + FBA)
$290 (processing)
Ad Spend
$1,200 (Sponsored Products)
$900 (Meta/Google)
Fulfillment/Returns
$800
$650 (shipping)
Contribution Margin
$2,850 (28.5%)
$4,660 (46.6%)
Same revenue, same product cost, wildly different outcome. That's the whole point of tracking this at the channel level instead of settling for a blended number.
Common Mistakes That Skew Channel Margin Numbers
A few patterns show up over and over when teams first start breaking margin out by channel:
Ignoring fee stacking on Amazon. Teams count the CPC spend from Amazon Advertising but forget that a sale from that click still pays the referral fee and FBA fee on top. The ad cost is only one layer of what that sale actually costs you.
Trusting last-click attribution from the ad platform itself. Meta and Google will both tell you they drove the sale. GA4's funnel data tells a more honest story, and if you skip it, you'll overstate how much paid channels are actually contributing versus organic or direct.
Forgetting return timing. Amazon reimbursements for lost or damaged inventory can lag by weeks. If you're calculating margin off the month the sale happened without accounting for pending returns, you're overstating that month's number, sometimes by a lot.
Using a flat average COGS across all SKUs. This one's sneaky. It hides the fact that your bestseller might be profitable everywhere, while a lower-margin SKU is only worth carrying on one channel and actively losing money on the other.
Automating Channel Margin Tracking Instead of Rebuilding Spreadsheets Monthly
The manual version of this is familiar to anyone who's tried it: export Amazon Seller Central reports, pull Shopify order data, download ad spend from Meta and Google, and stitch it all together in a spreadsheet. It takes hours every month, and it breaks the second Amazon changes a fee structure or a campaign naming convention shifts.
Trivas pulls Amazon, Shopify, Meta, Google, and GA4 data into a single Redshift-backed warehouse, so channel margin recalculates automatically as fees, spend, and orders change, instead of waiting for someone to rebuild the sheet. The BI reporting layer sits on top of that data so margin by channel is something you check, not something you build from scratch.
The Wingman AI layer adds a second piece: it flags when a channel's margin is trending down before it ever shows up in a monthly close. That's the difference between catching a fee change or a rising return rate in week two versus finding out at the end of the quarter, when the damage is already booked.
Turning Channel Margin Data Into Budget Decisions
Once you can see margin by channel clearly, the obvious next move is to stop allocating ad budget purely by ROAS. A channel can post a great ROAS and still be the lower-margin option once fees and fulfillment are counted. Shift spend toward the channel with the better contribution margin, not just the better efficiency ratio.
It's also worth setting a margin floor per channel, a threshold that flags automatically if a channel drops below it in a given month. That turns margin tracking into an early warning system instead of a monthly autopsy.
If you want to see what this looks like against your own numbers, start a trial and pull your actual Amazon and Shopify data through it. It's a faster way to find the answer than another month of spreadsheet reconciliation.
Content author and contributor at Trivas.ai, sharing insights on e-commerce analytics, business intelligence, and data-driven strategies to help businesses grow.
Continue Reading
explore more insights
How to Report Omnichannel Performance to Your Board of Directors
3 min read
How to Identify ROAS Outliers Across Paid Channels
3 min read
Triple Whale vs Northbeam: How the Two Attribution Tools Actually Differ