Every catalog hides SKUs that cost more than they earn. Rank products by profit, spot return magnets and slow sellers, and decide what to prune.
Open your product list and you'll probably recognize a few items immediately: the bestsellers, the seasonal hits, the new launch you're excited about. What's harder to see are the quiet losers — SKUs that sell just often enough to stay in the catalog, but earn less than they cost you in cash, shelf space, and attention.
This is the trap of a growing catalog. You add products faster than you retire them. Every SKU feels like optional upside: maybe it'll catch on, maybe a customer needs it. But each one carries hidden weight. It ties up cash in inventory. It clutters your storefront and your ad creative. It generates returns and support tickets. And it splits your attention across more line items than any operator can actually manage well.
The goal of SKU analytics isn't to cut your catalog in half. It's to see each product clearly enough to make a decision — prune it, promote it, or leave it alone on purpose rather than by default. The rest of this post walks through the numbers that reveal which is which, and how to pull them without living in a spreadsheet.
If you haven't connected your store yet, the step-by-step guide to connecting Shopify to VedaX covers the read-only setup. Everything below assumes your order and product data is flowing in.
The most common product report ranks SKUs by units sold or by revenue. It's the default in almost every dashboard, and it's misleading in a specific, expensive way: it rewards volume, not profit.
A SKU can top your units chart while quietly losing money. Maybe it's heavily discounted every time it sells. Maybe it has a high return rate that revenue never shows. Maybe it's a cheap add-on with thin margin that eats packing time and shipping cost out of proportion to what it brings in. Revenue and units both look healthy. The contribution to your actual bottom line might be near zero — or negative.
The number that actually matters is contribution to profit per SKU: revenue minus discounts, minus refunds, minus cost of goods. Rank your catalog by that and the picture often reorders dramatically. The item you assumed was a workhorse drops. A lower-volume, full-price, low-return product climbs because every sale is clean.
A few specific distortions to watch for when you move from revenue-ranking to profit-ranking:
- Discount-dependent SKUs. Products that only move on sale look fine on revenue but thin out fast once you subtract the markdown. We go deeper on this in whether your discounts actually made money.
- Return magnets. A 40% return rate cancels nearly half the revenue and adds reverse-shipping and restocking cost on top. Revenue charts hide this entirely.
- Low-margin filler. Cheap accessories with a few dollars of margin can cost more in handling than they return.
The shift from "what sells" to "what earns" is the single most important reframe in product analytics. Once you rank by contribution, the prune list starts to surface on its own.
Profit ranking has one hard dependency: you need cost per item. Without it, you can only see revenue, and revenue can't tell you what's actually making money.
The good news for Shopify stores is that cost-per-item (COGS) is a field Shopify already supports at the variant level. If you've been filling it in — even roughly — that cost data flows into your analysis and margin math becomes possible. If you haven't, this is the highest-leverage hour of data hygiene you can do: go fill in cost on your top SKUs first, then work down the list.
VedaX is read-only and computes from what you connect or upload — it never writes back to your store, and it won't invent a cost number you didn't provide. So margin analysis is real and available when cost data is present, and honestly limited when it isn't. There's no way around that, and any tool that claims otherwise is guessing.
A few practical notes on getting cost in:
- Start with your top 20 SKUs by revenue. They drive most of your profit picture, so their cost accuracy matters most.
- Approximate is better than blank. A reasonable estimate beats no data; you can refine later.
- Don't forget landed cost. If you can, fold freight and duties into the cost figure so your margin reflects what the unit truly cost to put on the shelf.
For the full walkthrough of turning Shopify revenue into real margin — including discounts, refunds, and the COGS prerequisite — see Shopify profit analytics: from revenue to real margin. This post assumes you've got at least partial cost data in place.
Profit contribution tells you what each SKU earns. Two inventory metrics tell you whether you should keep stocking it.
Sell-through rate is the share of received inventory you actually sold over a period. A low sell-through means product is sitting — cash frozen on a shelf, aging toward markdown. Stock cover (sometimes called days of supply) estimates how long your current stock will last at the recent sales rate. Very high stock cover on a slow seller is a flashing light: you've over-ordered something that isn't moving.
Put these together with profit and you can separate two very different kinds of "slow":
- Slow and profitable. Low volume, but every sale is clean and full-margin. These are fine — they're your long tail, and the long tail is not the enemy.
- Slow and unprofitable. Low volume *and* thin or negative contribution *and* high stock cover. This is dead weight: it ties up cash, occupies your catalog, and earns little. This is your prune candidate.
The long tail deserves a fair hearing here. A catalog of many low-volume SKUs isn't automatically bloated — a long tail can serve niche demand, support discovery, and round out a range so customers buy the hero product. The question is never "does this sell a lot?" It's "does this earn its keep or quietly cost me?" A long-tail SKU that's full-margin and cheap to hold earns its place. One that's discounted, returned, and overstocked does not.
Timing matters too. A SKU that looks dead in March might be a Q4 hero. Before you cut anything seasonal, run it against your peak-season data checklist so you don't prune a product right before its best quarter.
Returns are the most underweighted number in product analytics, because they live in a different part of your data than the sale and rarely show up on the same chart. A SKU can look like a star on the revenue report and be a net loss once you account for how often it comes back.
When a product is returned, you don't just reverse the revenue. You eat return shipping, restocking labor, payment-processing fees you may not recover, and the unit damage that sends some items straight to write-off. A high return rate quietly multiplies all of that. Two SKUs with identical revenue and identical COGS can have wildly different real profit if one comes back twice as often.
So when you build your SKU ranking, return rate belongs right next to contribution. A product that's profitable on paper but has a return rate well above your catalog average needs a second look — and often the fix isn't to cut it but to address *why* it comes back: a sizing problem, a misleading photo, a quality issue, a fragile package.
Returns are a big enough lever to deserve their own analysis. For the full breakdown — return rate by SKU, by reason, by cohort, and how it eats into margin — see refunds and returns analytics: the hidden margin killer. For this post, the takeaway is narrow: never judge a product on revenue alone when returns are in the picture.
Once you can see contribution, sell-through, stock cover, and return rate together, decisions get a lot less emotional. Here's a simple way to sort every SKU into one of three buckets.
Prune. Low or negative profit contribution, low sell-through, high stock cover, and ideally a confirmed return or discount problem. These are the quiet losers — they tie up cash and attention and earn little. Pruning can mean discontinuing, but it can also mean stop reordering and let it sell out, or marking it down deliberately to free the cash. Before you cut, confirm it's not seasonal and not a strategic loss-leader that pulls in higher-margin baskets.
Promote. High contribution, high sell-through, healthy return rate — and you're *under*-stocking or under-featuring it. These deserve more inventory, better placement, and a spot in your marketing. The most expensive mistake here is letting a winner go out of stock because nobody noticed the stock cover dropping.
Keep (on purpose). Everything in between. Profitable but slow long-tail items, products that round out a range, new launches that need more time before you can judge them. The key word is *on purpose* — you've looked at the numbers and chosen to keep it, rather than keeping it by default because retiring a SKU felt like work.
A few guardrails before you act on any cut:
- Give new SKUs enough runway. A product with two months of history isn't a verdict.
- Separate signal from noise. A single bad month can look like a dying product when it's just variance. The difference between a real decline and ordinary fluctuation is exactly the question covered in trend, anomaly, or noise: how to read your metrics — read it before you discontinue anything on one period's data.
- Check the basket effect. Some low-margin SKUs exist to attract customers who then buy your high-margin heroes. Killing the entry product can quietly cost you the upsell.
Run this sort quarterly, not daily. SKU decisions are slow-moving; you want a clear period of data behind each call.
You can build all of this by hand, but the point of an AI-native BI tool is that you don't have to. Here's how the pieces fit together in VedaX once your store is connected.
Ask in plain English. With your Shopify and payment data connected, you can ask VedaX Buddy a direct question — "rank products by profit contribution this quarter, lowest first" or "which SKUs have a return rate above the catalog average" — and it writes the SQL and returns a chart or table. You don't need to know how your order and refund tables join. For more questions worth asking your store data, the Shopify data questions post is a good prompt list.
Profile and filter in Data Explorer. Browse your product table, profile the columns, filter to the slow-and-overstocked corner of the catalog, and save the view so your prune candidates are one click away each quarter.
Let the catalog watch itself. This is where VedaX earns its keep. The Insights feed surfaces findings proactively — a SKU whose sales dropped versus the prior period, an anomaly in returns, a product drifting off a stock goal. Anomaly detection runs a scheduled scan and flags unusual movements so you're not the one who has to remember to check. Each finding has an *Ask Buddy* and *View data* button, so you can go from "something moved" to "here's the SKU and why" in a couple of clicks. The broader idea — analytics that come to you instead of waiting to be queried — is laid out in proactive analytics: insights that find you.
Get it in your inbox. Turn on the opt-in Insight Digest to receive your insights on a daily or weekly cadence, at a time you choose in your workspace timezone, sent to the recipients you pick. It's off by default; you decide. That way the dead-weight SKU shows up in an email before it shows up as a cash-flow problem.
One honest note on scope: VedaX has no direct ad-platform connector. If you want to factor ad spend into a SKU's true profitability, bring that spend in via a Google Sheets export or CSV upload and it'll sit alongside your store data. Within the data you connect, though, the SKU-level profit picture is fully yours to rank, filter, and prune.
There's no magic percentage, and chasing one is the wrong instinct. The right answer comes from your data: prune the SKUs that combine low or negative profit contribution, low sell-through, and high stock cover — especially if they also have a return or discount problem. For some catalogs that's a handful of items; for others with years of accumulated long-tail products it's more. Rank by contribution to profit, look at the bottom of the list, and cut based on what the numbers show rather than a target count.
Only partially. Margin and profit-contribution analysis require cost-per-item (COGS) to be present in your data. Shopify supports a cost field at the variant level, and VedaX computes from what you connect — it's read-only and won't invent a cost you didn't provide. If your cost fields are blank, you can still rank by revenue, units, sell-through, and return rate, but you can't see true profit. The highest-leverage fix is to fill in cost on your top SKUs first, then work down.
Not if you prune on profit rather than volume. A long tail of low-volume but full-margin, low-return products is healthy — it serves niche demand and can support discovery of your hero items. The SKUs to worry about are the ones that are slow AND unprofitable AND overstocked. Keep the profitable long tail on purpose; cut the dead weight. And always check whether a low-margin item is quietly driving baskets toward your higher-margin products before you remove it.
You don't, from a single month — and acting on one period is the most common SKU-analytics mistake. A bad month can be ordinary variance, a seasonal dip, or a one-off event rather than a dying product. Look at the trend across several periods, account for seasonality, and give newer SKUs enough runway before judging them. The post on reading trend versus anomaly versus noise walks through how to tell a genuine decline apart from normal fluctuation before you discontinue anything.
No. VedaX does not have direct Google Ads or Meta Ads connectors. To factor ad spend into a SKU's true profitability, export your spend to a Google Sheet or CSV and upload it — it'll sit alongside your connected Shopify and payment data so you can analyze them together. Within the data you connect or upload, VedaX gives you the full SKU-level profit, sell-through, and return picture; it just doesn't pull ad data automatically.
See it in VedaX: Shopify and marketplace analytics in VedaX