How to run Shopify ABC product analysis with margin weighting, automation, and templates
Shopify ABC product analysis ranks SKUs by impact so you invest in winners, right-size stock, and improve profit. This guide shows exactly how to do it in Shopify using real data, Google Sheets, and automation.
What is ABC product analysis for Shopify stores?
Definition and when to use it
ABC analysis segments your catalog into three classes based on contribution to results (typically margin or revenue):
A: small set of SKUs driving the majority of value
B: mid performers worth optimizing
C: long tail that requires control and selective investment
Use ABC to prioritize buying, replenishment, merchandising, and cycle counting. Recalculate on a cadence (monthly or quarterly) and whenever you change assortment or pricing.
ABC vs Pareto vs XYZ
Pareto describes the 80/20 pattern. ABC turns that idea into explicit classes with thresholds.
XYZ classifies demand variability:
X: stable demand (low variability)
Y: moderate variability
Z: highly variable or intermittent
Combine them (e.g., AX, BY, CZ) to choose different forecasting and safety stock strategies.
Which metric to classify: revenue, units, or margin
If you have cost per item, use contribution margin dollars per SKU. It aligns priority with profit.
If cost is missing, use net sales revenue as a proxy.
Units sold can help if pricing varies widely or for operational workloads.
Advanced: multi-criteria scoring (e.g., margin dollars + units + GMROI) for nuanced catalogs.
Benefits and use cases
Inventory investment and cash flow impact
Focus working capital on A-class to raise availability where it matters.
Reduce excess on C-class to free cash and lower holding costs.
Improve GMROI by rebalancing buys toward high-margin, high-velocity SKUs.
Merchandising and marketing prioritization
Feature A-class in ads, email, and site placements; protect them from stockouts.
Use B-class for testing new creatives and pricing.
Bundle or promote C-class thoughtfully to clear space without cannibalizing A-class.
Cycle counting and operational focus
Count A-class weekly, B-class monthly, C-class quarterly to maintain high inventory accuracy where risk is highest.
Prioritize QA, product setup, and PDP improvements for A-class.
Get your data from Shopify
Reports/exports to use (Sales by product, product export)
You’ll need two datasets for the same time window:
Sales by product/variant (Shopify Analytics > Reports):
Use Sales by product variant (or Sales by product) and include columns:
Product title, Variant title, Variant ID, SKU, Units sold, Gross sales, Discounts, Returns, Net sales
Product catalog export (Products > Export):
Include: Variant ID, SKU, Title, Option values, Vendor, Product type, Cost per item, Status
Optional: inventory quantities by location via Inventory reports if doing location-level ABC
Join on Variant ID (most reliable) or SKU if consistent.
Time window and seasonality choices
Standard: last 90 days for fast-moving catalogs; last 180–365 days for slower movers.
Exclude partial current weeks to avoid incomplete data.
For seasonal businesses, analyze season-to-date and the same season last year to set context.
Cleaning SKUs, variants, and mappings
Remove gift cards, shipping lines, and non-merchandise items.
Exclude zero-price test orders and internal transfers.
Normalize SKUs and fix duplicates. Use Variant ID to avoid ambiguity.
Aggregate at the variant level unless you truly stock and replenish at the parent product level.
Step-by-step: build an ABC in Google Sheets
Calculate value per SKU and cumulative percentages
Create a sheet with these columns:
Variant ID, SKU, Title
Units sold (period)
Net sales (period)
Cost per item
COGS = Units sold × Cost per item
Contribution margin = Net sales − COGS
Share of total margin = Contribution margin ÷ SUM of all contribution margin
Cumulative share = running total of Share of total margin after sorting by Contribution margin descending
If cost per item is unavailable, substitute Net sales for Contribution margin and proceed.
Example:
SKU A1: Units 1,200, Net sales $36,000, Cost $20, COGS $24,000, Margin $12,000
SKU B2: Units 400, Net sales $10,000, Cost $12, COGS $4,800, Margin $5,200
SKU C3: Units 150, Net sales $3,600, Cost $15, COGS $2,250, Margin $1,350
Sort by Margin, compute each SKU’s share and cumulative share of total margin.
Set thresholds and assign A/B/C classes
Common thresholds by cumulative share of margin:
A: top 70–80% of total margin
B: next 15–25%
C: remaining 5–10%
Assign class based on where each SKU’s cumulative share falls. If you prefer SKU-count constraints (e.g., A ≈ 10–20% of SKUs), fine-tune cutoffs to fit both share and count.
Quality checks, edge cases, and validation
Negative or near-zero margin: flag for price/cost review; treat as C or “X” (exception).
Outliers: a single promo may inflate a SKU; review price changes, stockouts, or one-off events.
Refund-heavy SKUs: consider net units after returns; products with high return rates might be downgraded.
Compare revenue-based vs margin-based ABC; large differences indicate pricing or cost opportunities.
Sanity check with teams: do A-class SKUs match what merchandising and ops see as core?
Margin-weighted and multi-criteria ABC
Compute contribution margin per SKU
Use margin dollars, not percentages, to drive ABC:
Contribution margin = Net sales − (Units sold × Cost per item)
Optional: subtract variable selling fees (payment processing, marketplace commissions) if you track them per SKU. If you only know an average rate, apply a uniform percentage.
Margin-based ABC aligns priority with profit impact, especially when prices and costs vary.
Weighted scoring approach
If you want a balanced view:
Normalize each metric to a 0–100 score (e.g., percentile rank):
Margin dollars (weight 60%)
Units sold (weight 20–30%)
GMROI or sell-through (weight 10–20%)
Composite score = SUM(weight × metric score)
Rank by composite score and assign A/B/C with similar cumulative thresholds.
This reduces bias toward high-priced items and highlights consistently productive SKUs.
When and how to adjust thresholds
High-SKU catalogs: tighten A to 60–70% share to keep A-class operationally manageable.
Luxury/high-ASP: use margin-based ABC with a stricter A threshold; one SKU can dominate.
Launch-heavy or seasonal: loosen B band to keep more items under observation during validation periods.
Automate ABC inside Shopify
Tag products by class with Shopify Flow
On plans that support Shopify Flow:
Trigger options:
Scheduled trigger (e.g., weekly) if available
Order created or inventory quantity changed for rolling updates
Data source:
Store A/B/C in a Google Sheet, export a CSV with Variant ID and Class
Import to Shopify via a routine (e.g., admin import or app) to update a product metafield with the class
Flow actions:
If product metafield abc_class = A, add tag “class:A”; else if B, tag “class:B”; else “class:C”
Remove outdated class tags before adding the new one
If Flow scheduling is not available, run a manual update on a regular cadence and let Flow maintain tags on create/update events.
Build smart collections and admin views
Smart collections:
“A-Class Bestsellers”: Product tag equals class:A
“C-Class Long Tail”: Product tag equals class:C
Saved admin views:
Inventory view filtered by class tags and low stock thresholds
Orders view highlighting A-class items for expedited handling
Alerts and tasks for restock and exceptions
Low-stock alerts:
Trigger when Inventory quantity < Reorder point (store ROP per SKU in a metafield)
Notify via email or Slack, include vendor and lead time
Exceptions:
Flag A-class with stockout days > 0
Flag C-class with >120 days of supply or zero sales last 90 days
Flag negative-margin SKUs for immediate pricing/cost review
More time, More Sales
Action playbooks by class
A-class: protect availability, scale winners
Forecast and buy with high service levels; expedite POs when needed.
Maintain rich PDPs, fast images, and reviews; prioritize site search and nav placement.
Allocate ad budget; exclude A-class from discount-heavy promos unless strategic.
Build variants and bundles around A-class to extend the line without risking stockouts.
B-class: test, improve, and monitor
Run A/B tests on pricing and positioning; promote selectively.
Improve content and cross-sells; trial small replenishment increments.
Watch conversion and returns; graduate consistent B+ performers into A with tighter buys.
C-class: reduce, bundle, or liquidate
Lower safety stock and extend reorder cadence or switch to make-to-order if viable.
Bundle with A/B items, run clearance promos, or exit low-potential SKUs.
Keep critical assortment fillers but cap exposure; renegotiate MOQs with suppliers.
Replenishment policies and math
Forecast horizon and lead-time inputs
Compute average daily demand from recent periods aligned to seasonality.
Capture supplier lead time (calendar days) and variability if known.
Include review period (time between reorder checks) if you do periodic review.
Safety stock by class
Choose service levels and compute safety stock based on demand variability:
Suggested service levels:
A: 95–99% (z ≈ 1.64–2.33)
B: 90–95% (z ≈ 1.28–1.64)
C: 80–90% (z ≈ 0.84–1.28)
Safety stock (demand variability): z × (Std dev of daily demand) × √(Lead time in days)
If lead time varies, incorporate its variability or add a buffer.
Reorder point examples and templates
Reorder point (ROP) = Average daily demand × Lead time + Safety stock.
Example (A-class):
Avg daily demand: 10 units
Lead time: 15 days
Std dev daily demand: 3 units
Service level: 97.5% (z = 1.96)
Safety stock = 1.96 × 3 × √15 ≈ 22.7 ≈ 23 units
Demand during lead time = 10 × 15 = 150
ROP = 150 + 23 = 173 units
For periodic review (order weekly):
ROP = Demand during lead time + Demand during review period + Safety stock
Store ROP, safety stock, and lead time in product metafields to drive alerts and purchasing worksheets.
Advanced topics: multi-location and seasonality
Location-level ABC and transfers
Compute ABC per location using location-specific sales and inventory if available.
A SKU may be A in one region and B/C elsewhere; buy and transfer accordingly.
Use transfers to rebalance excess C-class from low-demand locations to high-demand ones.
ABC-XYZ matrix for demand variability
Compute weekly demand variability per SKU:
Coefficient of variation (CV) = Std dev of weekly demand ÷ Mean weekly demand
Define:
X: CV < 0.5 (stable)
Y: 0.5 ≤ CV ≤ 1.0 (moderate)
Z: CV > 1.0 or intermittent
Combine:
AX: highest priority and tightest control
AZ or CZ: use cautious buys, higher safety stock, or alternate fulfillment
Handling new or short-history products
Assign temporary “N” class for items with <6–8 weeks of data.
Proxy using parent category/vendor analogs or pre-launch forecasts.
Use conservative buys and fast feedback loops; graduate to ABC after enough history.
Limitations and governance
Data quality and channel effects
Ensure costs are populated and current; stale costs distort margin-based ABC.
Separate DTC vs POS vs marketplace where pricing and fees differ substantially.
Attribute promo effects; one-time campaigns shouldn’t permanently skew classes.
Avoiding short-window bias
Use windows that match the sales cycle of your category.
Overlay last 90 days with last 365 days to catch emerging winners and durable staples.
Smooth with moving averages to avoid overreacting to spikes.
Review cadence and ownership
Recalculate ABC monthly for fast movers; quarterly for stable assortments.
Assign ownership: ops for data, merchandising for actions, finance for thresholds.
Maintain a changelog of threshold tweaks and class shifts to ensure continuity.
FAQs
How often should I recalculate ABC classes?
Fast-moving catalogs: monthly.
Most stores: quarterly.
Also recalc after major assortment changes, price events, or supply disruptions.
Should I classify by revenue, units sold, or margin?
Use contribution margin dollars if you have accurate costs.
If not, start with net sales and move to margin as soon as costs are reliable.
Units can be a helpful secondary metric to balance views.
What thresholds define A, B, and C classes?
Common: A = top 70–80% of margin, B = next 15–25%, C = remaining 5–10%.
Adjust based on SKU count and operational capacity so A remains manageable.
How do I handle seasonal and new products with little history?
Seasonal: analyze season-to-date and prior-year same season; don’t rely on off-season data.
New items: use a temporary “N” class with conservative buys and rapid review.
Graduate items into ABC once 6–12 weeks of sales accrue.
Can ABC hurt my long-tail strategy and how do I mitigate it?
ABC doesn’t eliminate long tail; it right-sizes it.
Keep essential C-class items with controlled inventory, bundle where possible, and buy to demand.
How do I run ABC for bundles and product variants?
Classify at the level you stock and replenish. If bundles decompose into components, track component sales driven by bundles and classify components.
For variants, classify per variant if demand differs meaningfully.
What is the difference between ABC, Pareto, and XYZ analysis?
Pareto observes concentration (often 80/20).
ABC turns it into A/B/C classes using thresholds.
XYZ classifies demand variability; use ABC-XYZ together for stocking strategy.
Which Shopify automations or apps can help maintain ABC tags?
Shopify Flow (on eligible plans) can add/remove tags based on a product metafield storing the class.
Smart collections and saved admin views keep teams focused.
Low-stock alerts can trigger when inventory drops below the ROP stored in a metafield.
Looking to improve your Inventory Management?
If you’re managing inventory manually, forecasting demand, or juggling purchase orders, Verve AI helps automate the process across both platforms.
Install Verve AI for Shopify to forecast demand and manage purchase orders inside your store
Use Verve AI for WooCommerce to replace spreadsheets with automated inventory planning
