At a glance
Top N SKUs ranked by units sold in the 30D window. The unit-velocity view; pair with Top Products by Revenue for the £-weighted version.
| What it counts | SUM(lineItem.quantity) GROUP BY sku ORDER BY sum DESC LIMIT 50. Units sold per SKU, regardless of price. |
| VAT / tax treatment | Not applicable, count metric. |
| Shipping | Not applicable. |
| Discounts | Units count regardless of discount; the £-implications are visible in Top Products by Revenue. |
| Refunds | Refunded units are NOT subtracted from the velocity here. A SKU with high refunds appears as high-velocity even though net is lower. |
| Cancelled / voided orders | Excluded if Shopify removed them from the index. |
| Currency | Not applicable. |
| Channels / sources | All channels. POS contributes; B2B bulk orders may dominate top of list if you sell wholesale. |
| Time window | 30D (default 30D rolling) |
| Alert trigger | None directly; pair with stockout-velocity for ops alerts. |
| Roles | owner, operations |
Calculation
Calculated automatically from your Shopify data. See the At a glance summary above for what the metric tracks and the worked example below for a typical reading.Worked example
A US apparel DTC brand on Shopify, ~1,800 active variants. 30D window 12 Apr 26 to 12 May 26.| Rank | SKU | Product | Units sold (30D) | Revenue (30D) | Note |
|---|---|---|---|---|---|
| 1 | LIN-TEE-SAND-M | Linen tee, Sand, M | 240 | $7,200 | Unit price $30 |
| 2 | LIN-TEE-WHT-M | Linen tee, White, M | 195 | $5,850 | Same product, different colour |
| 3 | LIN-TEE-SAND-L | Linen tee, Sand, L | 220 | $6,600 | |
| 4 | TROUS-BLK-10 | Wide-leg trouser, Black, 10 | 180 | $14,400 | Higher unit price $80 |
| 5 | TROUS-BLK-12 | Wide-leg trouser, Black, 12 | 165 | $13,200 | |
| … | |||||
| 50 | SOCK-PACK-3 | Sock pack of 3 | 38 | $570 | $15 unit price |
| Top-50 totals | 4,820 | $162,400 | ~38% of total units, ~31% of revenue |
- The Pareto signature. Top 50 SKUs (~3% of catalogue) drive 38% of unit sales. Nearly every Shopify store sees this concentration; it’s healthy.
- Unit-velocity isn’t revenue-velocity. SKU rank-1 (Linen tee Sand M) sells most units but rank-4 (trouser Black 10) sells more revenue. Ranking by units alone misleads margin discussions; pair with Top Products by Revenue.
- Variant concentration matters. 3 of the top 5 are colour/size variants of one product (Linen tee). The brand has one viral product with deep variant assortment. Operationally this means stocking strategy is more about size-mix than SKU breadth.
- Sock pack at rank-50 is the threshold. 38 units/30D ≈ 1.3 units/day. Below this, SKUs aren’t candidates for safety-stock or ad-spend; they’re long-tail.
- Refund-impact hidden. If 20% of Linen Tee Sand M is refunded, gross velocity 240 hides net velocity 192. Pair with refund rates by SKU for net view.
- Marketplace orders included. If the brand sells via Shop Pay Buy Button on partner blogs, those order line items still attribute SKUs. The aggregate may include surprise top-rankers from one popular blog post.
Sibling cards merchants should reference together
Top SKUs is the unit-velocity view. Companions:| Card | Why pair it with Top SKUs |
|---|---|
| Top Products by Revenue | The £-weighted version; differs when unit prices vary across catalogue. |
| Stock vs Sales Velocity | Combines top-velocity with on-hand to predict OOS. |
| Inventory Distribution | Aggregate band view; helps see whether top-velocity SKUs are well-stocked. |
| Products with Zero/Negative Stock | Cross-reference: any top-50 SKU on this list is a five-alarm fire. |
| Bottom Products | The flip-side; slow-movers worth de-listing or marking down. |
| Total Orders | Denominator for Pareto-share calculations. |
| Top Refunded | Refund-rate companion; refund-heavy top SKUs may need quality investigation. |
Reconciling against the vendor’s own dashboard
Where to look in Shopify Admin:Shopify Admin → Analytics → Reports → “Sales by product variant SKU” (under Sales)The most direct equivalent. Pick the same window. SKU ranking should match this card to within sync-lag tolerance. Other Shopify Admin views:
- Reports → Sales by product: aggregates variants under parent product; this card splits by SKU.
- Reports → Inventory snapshot (Plus): inventory-side companion.
- Apps like Stocky / Inventory Planner: typically expose unit-velocity rankings.
| Reason | Direction | Why |
|---|---|---|
| SKU vs variant ID | Either | Shopify can group by either; we use SKU string. Variants without SKU populated will not appear here (see SKU Coverage). |
| Refund treatment | Theirs may differ | Shopify Net Sales by SKU subtracts refunded units; we count gross. |
| Time zone | Boundary | UTC vs store time zone. |
| Bundle / kit handling | Either | Bundles’ component SKUs may surface separately or as the parent bundle SKU; depends on app config. |
| Sync lag | Ours lower for “today” | Most-recent 5-15 min may not be in. |
| Card | Expected relationship | What causes legitimate divergence |
|---|---|---|
amazon_sp.amazon_top_asins | Independent inventory channel | Top SKU on Shopify may not be top ASIN on Amazon; different channel demographics. |
| WMS / 3PL pick-velocity reports | Should align | 3PL pick reports show actually-picked-units; minor diff vs ordered-units due to substitutions and pick errors. |
Known limitations / merchant FAQs
Why is my top SKU not what I expected? Three usual causes:- Variant deep-dive surprise: a single colour/size combination can dominate. Often the “best-selling” colour in a product line is not the marketed hero.
- One-off bulk order: a B2B customer placing 200 of one SKU in a single order skews the 30D window.
- Influencer feature: a single creator’s post drove disproportionate demand on one SKU.
- Top 1-2% (the “A” tier): stock deeply, market hard, monitor daily.
- Next 5-10% (the “B” tier): stock moderately, market periodically.
- Bottom 80%+ (the “C” tier): minimum stock, optional discontinue.
tag = "wholesale" and exclude in your reading.
Should I rank by units or revenue?
Both. Units = volume strain on ops and inventory. Revenue = financial weight. The top-by-units list tells you which SKUs to stock deeply; the top-by-revenue list tells you which SKUs to invest marketing in. They overlap but are not identical.
Why does refund not lower SKU velocity?
Design choice; we count gross sales. Refund-adjusted net-velocity is on the roadmap. For now, pair with refund-rate by SKU for context.
My subscription store, do recurring billings count units?
Yes. Each subscription billing creates a line item; the underlying SKU’s units count. Subscription SKUs often dominate top-velocity rankings even with modest customer counts because each customer recurs monthly.
Action playbook for using Top SKUs:
- Daily ops check: confirm top-50 SKUs are not in OOS or Critical bands of Inventory Distribution.
- Weekly reorder review: pace POs based on current top-50 velocity, with safety stock for top-10.
- Monthly catalogue rationalisation: identify SKUs that haven’t appeared in top-300 in 6 months; candidates for clearance or discontinue.
- Quarterly merch refresh: top SKUs deserve premium PDPs, professional photography, hero placement.
- Marketing alignment: paid-media budget should bias toward top-50 SKUs; spending on long-tail SKUs is usually inefficient.
- Bundle building: top-velocity SKUs make natural bundle anchors; pair with complementary slow-movers to clear surplus.