5 minutes
Blended gross margin is the version of your business where everything looks okay. SKU-level profitability is where you find out which products are actually making money after channel fees, returns, shipping, and ad spend. If you've never pulled that number by SKU before, this will show you how to get there.
TLDR:
Gross margin misses channel fees, returns, and ad spend. Your real earners hide below that line
A complete SKU P&L requires COGS, fulfillment, merchant fees (typically a small percentage of revenue), returns (averaging $5-15 each to process), and attributed ad spend
Apply ad spend by first-order product mix, not blended CAC. A blended CAC (say, $38 as an example) treats every SKU equally, which is wrong
The same SKU can swing from 43% margin on DTC to 39% on Amazon once FBA costs and ads are factored in, while wholesale can run even higher (45%) due to lower acquisition costs
Iris Finance delivers per-SKU contribution margin in real time, connected to NetSuite, Fulfil, or your existing cost data, so no manual calculation or month-end wait
What SKU-Level Profitability Actually Means
SKU-level profitability is the profit or loss generated by a single product, calculated after every cost that product actually incurs. Not blended across your catalog. Not averaged across channels. Per unit, per SKU.
Most ecommerce brands know their overall gross margin. Fewer know which SKUs are carrying the rest. A 55% blended gross margin can mask a top-seller running at 20% because of heavy discounting, while a slower product quietly delivers 70%. Averaged together, those numbers tell you almost nothing useful.
The distinction matters because your decisions happen at the SKU level regardless. You're running ads to specific products, setting prices on specific products, deciding what to reorder. Brand-level data leaves all of that on shaky ground.
True SKU-level profitability, including your contribution margin, accounts for COGS, channel fees, shipping, returns, and attributed ad spend. Gross margin captures only the first piece. The rest is where the real story hides.
Why Gross Margin Alone Misleads Ecommerce Brands
Gross margin is calculated before most of the costs that actually determine whether a product makes you money. It captures what's left after COGS, and says nothing about what you spent to acquire the customer who bought it, the shipping cost to deliver it, the 15% Amazon referral fee, or the return rate on that particular colorway.
When those costs vary by SKU, and they always do, gross margin becomes an average. Averages hide the outliers doing the most damage.
Say you carry 40 SKUs. Three of your top eight have above-average return rates and run almost entirely through paid social with a $45 CAC. On gross margin alone, they look healthy. Factor in the full cost stack and two of them are barely breaking even.
The inverse happens too. A lower-volume SKU with minimal returns, strong organic discovery, and a tight shipping profile might be your best actual earner. Blended gross margin buries it.
The decisions this distorts go beyond marketing spend. Inventory buys, pricing changes, SKU rationalization, and retail expansion all get made on the wrong signal when gross margin is your only lens.
The Cost Inputs That Belong in a SKU-Level P&L
A complete SKU-level P&L has more rows than most brands expect. Each one matters.
COGS: landed cost per unit, including materials, manufacturing, and inbound freight
Channel fees: Amazon's referral fee, TikTok merchant fees, Shopify transaction fees, which vary by channel and sometimes by product category
Fulfillment and 3PL costs: pick, pack, and ship per unit, often differing by product size and weight
Merchant processing fees: typically 2-3% of revenue and easy to overlook at the SKU level
Return and restocking costs: the cost to process a return plus any inventory write-down on unsellable units
Allocated ad spend: what it cost to acquire the customer who bought that specific product
Leave any of these out and the number you're left with is optimistic. Incomplete in a way that quietly misdirects every decision downstream.
How to Assign Ad Spend and Customer Acquisition Costs to a SKU
Attributing ad spend to a specific SKU is where most approaches fall apart. Channel-level totals are easy to find. Splitting them by product is where the math gets messy.
The most common method is first-order product mix. If 60% of orders from a given campaign contained SKU A, you attribute 60% of that campaign's spend to SKU A. It's imperfect, but it's directionally sound and far better than applying a blended CAC to every product equally.
Blended CAC is the real trap, and it's part of why CAC payback period math breaks down. If your overall CAC is, say, $38 and you apply it across your catalog, you're treating a SKU that only appears in heavily discounted bundles the same as one that converts efficiently on branded search. Those are not the same customer or the same cost.
Promotional attribution adds another layer. When you run a product-specific promo, that spend belongs to that SKU. When a campaign features multiple products, you need a split rule. Revenue weight or unit volume both work, as long as the method stays consistent across periods.
SKU-level CAC will never be perfectly precise, though a CAC payback calculator can help sanity-check the allocation. The goal is a reasonable allocation that makes the outliers visible: which SKUs are consuming acquisition budget they'll never earn back, and which ones are being systematically underfunded.
How Returns and Refunds Distort SKU Profitability
Return rates are not uniform. A fragile product in a minimal package might, for example, break in transit at around 8%. An apparel SKU in the wrong size might return at something like 22%. A supplement with a strong retention curve barely returns at all. When you calculate SKU profitability using gross revenue instead of net revenue after returns, every one of those products looks better than it is.
The accounting problem is timing. Revenue books when an order ships. Returns arrive days or weeks later, often in a different reporting period. Without netting the two together at the SKU level, your profitability data is always running ahead of reality for high-return products.
The costs stack beyond the refund itself. Consider what actually hits when a return comes in:
Processing a return typically costs $5 to $15 in labor and handling, a line item that never gets traced back to the originating SKU.
Some units come back unsellable, triggering a full inventory write-down against that product.
Others need repackaging before they can re-enter stock, adding yet another cost that disappears into overhead.
A product with, say, a 12% return rate and a $12 average return processing cost is losing more than most brands realize once you do the math across volume, which is why many turn to inventory management software to catch it sooner. Assign those costs to the SKU, and what looked like a solid performer can slide into marginal or negative contribution.
How to Handle COGS Version Control as Unit Costs Change
Unit costs change. A new supplier contract, a tariff adjustment, a freight rate reset: any of these will shift your COGS, sometimes by a wide margin. The question is what you do with historical data when that happens.
The wrong answer is applying the new cost backward. If your landed cost on SKU A drops from $14 to $11 starting in March, retroactively restating January and February at $11 makes those months look more profitable than they actually were. Any trend comparison across that period becomes fiction.
The right approach is snapshotting: lock the COGS value active during each period and keep it attached to the orders fulfilled under those terms. When costs change, create a new version going forward. Historical records stay untouched.
Your COGS data needs a date range on every version, not a current value alone. A simple version log works:
SKU | COGS Version | Effective Date | Cost Per Unit |
|---|---|---|---|
SKU-A | v1 | Jan 1 | $14.00 |
SKU-A | v2 | Mar 1 | $11.00 |
Without that structure, any period-over-period profitability comparison that straddles a cost change will be wrong, and metrics like GMROI built on top of it will be too. And if you're making reorder or pricing decisions off trend lines, wrong comparisons produce bad calls.
Building a SKU Contribution Margin View Across Multiple Channels
The same SKU sold across three channels is effectively three different margin stories. What earns 48% on your DTC Shopify store might deliver 31% on Amazon after referral fees, FBA costs, and promotional requirements. Wholesale shrinks it further once you account for retailer margin and freight-to-DC. Blending those together into a single SKU margin number hides all three, which is part of why a Shopify and Amazon financial report needs to be built channel by channel.
Channel-specific costs that must be applied separately:
DTC: Shopify transaction fee, payment processing, outbound shipping, packaging
Amazon: referral fee (typically 8-15% by category, though Amazon's actual cut often runs higher once fees stack), FBA pick and pack fees, storage fees, any sponsored product spend tied to that ASIN
Wholesale/retail: off-invoice discounts, freight allowances, dating terms, and any chargebacks or deductions
SKU | Channel | Net Revenue | COGS | Channel Fees | Attributed Ad Spend | Contribution Margin |
|---|---|---|---|---|---|---|
SKU-A | DTC | $42.00 | $11.00 | $3.80 | $9.00 | $18.20 (43%) |
SKU-A | Amazon | $38.00 | $11.00 | $7.60 | $4.50 | $14.90 (39%) |
SKU-A | Wholesale | $22.00 | $11.00 | $1.20 | $0 | $9.80 (45%) |
Wholesale earns the cleanest margin despite the lowest revenue per unit because there is no acquisition cost and minimal channel fees. Amazon looks competitive until you factor in advertising. DTC has the highest revenue but the largest ad spend dependency.
A multi-channel SKU view gives you allocation decisions you can actually defend: which channel deserves more inventory, where promotional pricing hurts you least, and where to direct supply when it gets tight. Without that split, those are guesses.
Common Methods for Getting SKU-Level Data
Most brands start with spreadsheets. COGS gets uploaded manually, channel fees get estimated, and someone ties it all together at month-end. It works at low SKU counts, but maintenance compounds fast. Every cost change, new channel, or product launch requires a manual update. Miss one and your profitability data drifts.
ERP exports are more structured. If you're on NetSuite or Fulfil, you can pull COGS and landed cost data reliably. The gap is that ERPs don't natively join to channel fee data, ad spend, or return costs. You still need something to stitch those together, which usually means more spreadsheet work on top.
BI Tools and Purpose-Built Analytics
BI tools like Looker or Tableau can build a clean SKU view if you have a data warehouse underneath them. The catch is setup cost: a data engineer, Fivetran or equivalent, and several months of build time before you see anything useful. Any schema change upstream can break the pipeline.
Iris handles the joins by design. It connects to your sales channels, ad platforms, and ERP, then applies cost logic at the order level, with no data engineer, no Fivetran pipeline, and no warehouse to maintain. Setup takes days, not months. The pre-built CPG data model is trained across 500 brands and $20B in GMV, which means the cost logic isn't generic: it's calibrated to how omnichannel consumer brands actually work. For most brands, that's a faster path to accurate SKU margin than any custom build can match.
The right method depends on SKU count, channel complexity, and how often your costs change. A 15-SKU single-channel brand can manage in a spreadsheet. A 200-SKU omnichannel brand juggling TikTok fees, Amazon FBA costs, and wholesale deductions cannot do it manually without losing accuracy somewhere.
How Iris Finance Surfaces SKU-Level Profitability for Consumer Brands
Iris connects directly to NetSuite or Fulfil, or ingests cost data from a Google Sheet if that's where it lives. SKU names are matched automatically across every sales channel, including EU brands with German or French naming, and anything that can't be matched with confidence is flagged before it hits your numbers.
Bundle COGS is handled by defining components individually or uploading the bundle total directly. When unit costs change, the cost version is updated and locked going forward without disturbing historical records. Your dedicated analyst handles the initial configuration and any ongoing cost updates, so that work stays off your plate.
The inventory module delivers SKU-level analytics automatically: best and worst performers, profitability by product, velocity, depletion projections, and reorder points. Contribution margin is the north star metric inside the daily P&L statement. Per-SKU margin is live before books close, not assembled after.
The benchmarking layer adds context no spreadsheet can supply. Iris benchmarks SKU margins across ~500 anonymized consumer brands in the same category, not a generic average, and surfaces where your products stand without any manual export or analysis. If your top seller is running contribution margins 12 points below category peers, that signal reaches you automatically before you build your next inventory buy around a number that's wrong.
Final Thoughts on How to Get SKU-Level Profitability in Ecommerce
Your blended margin can look solid while two or three SKUs quietly drag down your returns. SKU-level profitability gives you a clear view of what each product actually earns after every real cost is counted. Once you have that, the decisions around inventory, pricing, and channel mix get a lot less speculative. Talk to the Iris team if you want to see how other brands in your category are tracking this.
FAQ
How does Iris Finance handle COGS version control when unit costs change across SKUs?
Iris locks the COGS value active during each period and attaches it to the orders fulfilled under those terms. New cost versions apply going forward only, leaving historical records untouched. You re-upload updated costs via Google Sheet or directly from NetSuite or Fulfil, and the account manager can run that setup on your behalf if the volume is heavy.
What's the fastest way to get SKU-level profitability data across Shopify, Amazon, and TikTok without building a custom data warehouse?
Purpose-built analytics tools built for consumer brands handle the joins by design, connecting sales channels, ad platforms, and your ERP, then applying cost logic at the order level without custom engineering. Iris connects Shopify, Amazon, and TikTok Shops with one-click integrations, pulls COGS from your ERP or a spreadsheet upload, and surfaces contribution margin per SKU in real time, including TikTok's order-level fees that no other tool captures.
How do I calculate true SKU-level contribution margin for an ecommerce brand?
Start with net revenue after returns, subtract COGS, channel fees (Amazon referral, TikTok merchant, Shopify transaction), fulfillment and 3PL costs, merchant processing fees, return processing costs, and attributed ad spend for that product. Gross margin captures only the first deduction. Every cost below it is where the real margin story hides, and where most SKU decisions go wrong.
How do you attribute ad spend to a specific SKU when campaigns cover multiple products?
The most defensible method is first-order product mix: if 60% of orders from a campaign contained a given SKU, assign 60% of that campaign's spend to that SKU. The trap is blended CAC. Applying a single catalog-wide acquisition cost treats a SKU that converts on branded search the same as one buried in a heavily discounted bundle, which produces a number that's wrong for every product individually.
Can Iris Finance show SKU-level margins differently across DTC, Amazon, and wholesale channels?
Yes. Iris builds a channel-specific contribution margin view for each SKU instead of blending across channels. The same product selling on DTC, Amazon, and wholesale carries different fee structures, fulfillment costs, and ad spend profiles, so a blended margin number hides whether Amazon advertising is eating your margin or wholesale is actually your cleanest earner despite the lowest revenue per unit.
How does bundle COGS work in a SKU-level profitability model?
Bundles need their own COGS entry, separate from the component SKUs. You can either define the bundle by its individual components and let the system roll up the cost, or upload the bundle total directly. Where it breaks down is when a bundle is assembled from SKUs with different cost versions or when a promotional bundle uses a different packaging configuration than the standard product. Each variation needs its own cost entry, or the margin on bundled orders will be wrong.
How do I know which SKUs to cut versus scale based on margin data?
Start with contribution margin by SKU, not gross margin. Any SKU running negative contribution after ad spend, channel fees, and returns is destroying cash regardless of how it looks on a gross basis. Beyond the floor, look at the combination of contribution margin percentage and volume: high margin, high volume SKUs get more inventory and ad spend; high margin, low volume SKUs are worth testing for growth; low margin, high volume SKUs need a cost or price intervention before you commit more capital. SKUs that are low on both are candidates for rationalization. The channel breakdown matters too. A SKU that earns 40% on DTC but goes negative on Amazon is not an underperformer, it's misallocated.
Is Iris Finance faster than building a custom Snowflake and Looker stack for SKU profitability?
Yes, by a wide margin. A custom data warehouse build typically runs 3-6 months and around $200K in headcount before you see a single SKU margin number. Any schema change upstream can break the pipeline and require engineering time to fix. Iris connects Shopify, Amazon, TikTok Shops, and your ERP with purpose-built cost logic trained across 500 brands and $20B in GMV, with setup measured in days instead of months. There is no data engineer to hire, no Fivetran pipeline to maintain, and no warehouse to manage on your side.
Related posts
Actionable data, proven strategies, and clear forecasts, empowering you to make smarter decisions and scale with confidence.





