Storekeeper

ABC Analysis in Inventory Management with XYZ Matrix and Worked Example

Metrics · 8 min read

Create your account in a minute · no card required

Nothing you paste is stored.

SKU On hand Cover

SKUs, scroll for the rest

A live preview of Storekeeper's forecasting engine on fictional sample dataon the rows you pasted. The full product connects to your POS and store and runs this continuously.

ABC analysis ranks your inventory by annual consumption value and splits it into three classes: A items, the roughly 20 percent of SKUs that carry about 80 percent of the value; B items, the middle 30 percent carrying about 15 percent; and C items, the long tail of half your catalog that carries the last 5 percent. The point is unequal attention on purpose: tight control, frequent counts and careful forecasting for A items, and cheap, low-touch autopilot for C items.

It works because inventory value is always lopsided. Nobody's catalog is uniform; a handful of SKUs dominate the money in every business we have ever seen. Treating all SKUs identically means your best seller gets the same attention as a box of shelf pegs, which shortchanges one and gold-plates the other.

What is ABC analysis in inventory management?

It is an application of the Pareto principle (the 80/20 rule) to stock control. Vilfredo Pareto noticed in the 1890s that a small share of causes produces most of the effect; inventory obeys the same law. ABC analysis formalizes it: compute each SKU's annual consumption value, sort descending, and draw two lines through the cumulative total. Everything above the 80 percent line is class A, everything between 80 and 95 percent is class B, and the rest is class C. The thresholds are conventions, not physics; some operations use 70/90, others add a D class for items with no movement at all.

How do you calculate ABC analysis?

The formula is one multiplication:

Annual consumption value = annual demand (units) × unit cost

Then five steps:

  1. Pull 12 months of demand per SKU from your sales or usage history.
  2. Multiply each SKU's demand by its unit cost to get consumption value.
  3. Sort all SKUs by consumption value, highest first.
  4. Compute the running cumulative percentage of total value.
  5. Cut at 80 percent (A/B line) and 95 percent (B/C line).

Use demand, not on-hand stock. Ranking by what sits on the shelf rewards your worst purchasing mistakes: the pile of slow movers looks valuable precisely because it never leaves.

A worked example

A ten-SKU shop, sorted by consumption value:

SKU Annual units Unit cost Consumption value Cumulative % Class
Espresso machine X1420$310$130,20044%A
Grinder Pro610$140$85,40073%A
Roasted beans 1kg2,900$11$31,90084%B
Milk pitcher steel1,150$16$18,40090%B
Filter papers 100pk2,400$6$14,40095%B
Tamper 58mm380$19$7,22097%C
Cleaning tablets900$5$4,50099%C
Cup set of 6210$14$2,94099.7%C
Descaler bottle150$4$60099.9%C
Spare gaskets90$3$270100%C

Two SKUs out of ten carry 73 percent of the money. That is the whole argument for the method, in one table. If your history lives in a database rather than a tidy export, you can get this ranking by querying it in plain English instead of writing the SQL yourself; in a spreadsheet it is one SORT and one running SUM.

What to actually do with each class

Classification without consequences is a coloring exercise. The classes earn their keep in the policies:

Policy A items B items C items
Forecasting Per-SKU, reviewed by a human Automated, reviewed on exception Simple rules (min/max)
Service level target High: 97 to 99% Middle: 92 to 95% Modest: ~90%, accept occasional gaps
Safety stock Calculated from real variability Calculated, cruder inputs are fine Flat buffer or none
Count frequency Monthly to quarterly Quarterly to twice a year Once or twice a year
Ordering Frequent, smaller orders; supplier terms negotiated hard Standard reorder points Big, infrequent orders; minimize admin per order

The service-level row is where the money moves. Holding 99 percent service on everything is ruinously expensive because safety stock grows steeply with the service target. ABC lets you buy 99 percent where it pays for itself and 90 percent where nobody will notice. Count frequency flows straight into your cycle counting schedule, which is the other place this classification does daily work.

What are the disadvantages of ABC analysis?

Four real ones, and they all have the same shape: consumption value is not the only thing that matters.

  • It ignores criticality. A $3 gasket is a C item until the espresso machines you sell cannot be demonstrated without it. Items whose absence stops revenue or production deserve an override class regardless of value.
  • It ignores margin. Consumption value is computed on cost. A cheap SKU with a fat margin and a loss-leader with a huge cost rank in the wrong order relative to what they earn you.
  • It ignores volatility. Two SKUs with identical value can need completely different handling if one sells steadily and the other in unpredictable spikes. Pairing ABC with an XYZ volatility classification fixes this: an AZ item (high value, wild demand) is your hardest problem and a plain ABC run will not flag it.
  • It goes stale. Products trend, seasons turn, a C item goes viral. A classification from last January is a photograph, not a feed. Re-run it at least quarterly, and watch the borders: the interesting SKUs are the ones that just crossed a line. A B item drifting downward on velocity is also your earliest dead stock warning.

ABC vs XYZ analysis

XYZ classifies items by how predictable their demand is, usually measured with the coefficient of variation: the standard deviation of periodic demand divided by mean demand. X items have low variation and sell at a steady rate. Y items vary more, but in a pattern you can see and plan around, typically seasonality or a clear trend. Z items are irregular, with sporadic orders and no reliable pattern.

Class Typical variation Demand pattern Forecast accuracy
X Low (roughly under 0.5) Steady, week after week High, simple methods work
Y Moderate (roughly 0.5 to 1.0) Seasonal or trending Fair, if the pattern is modeled
Z High (roughly above 1.0) Sporadic, lumpy, one-off orders Poor, plan with buffers instead

Those thresholds are conventions, not laws. Set them from your own data by looking at where the distribution of variation naturally breaks, and keep them stable long enough to compare periods.

ABC answers "how much does this item matter to my money?" XYZ answers "how confidently can I predict it?" The first is about value concentration, the second about forecastability. They use different inputs (annual consumption value versus demand variability) and they change at different speeds: ABC bands are fairly stable, while an item can slide from X to Z in a quarter if its demand pattern breaks.

The ABC-XYZ matrix

Cross the two and you get nine cells, each with a sensible default policy. This is where the analysis stops being an academic exercise and starts changing what you order.

Cell Profile Sensible policy
AX High value, steady demand Your best candidates for lean, frequent replenishment and low safety stock
AY High value, seasonal or trending Forecast the pattern explicitly, build ahead of the peak, review weekly
AZ High value, erratic The hardest cell: shorten lead times, hold buffer, consider made-to-order or supplier consignment
BX / BY Mid value, predictable enough Automate with reorder points and review monthly
BZ Mid value, erratic Modest buffer, watch for items sliding into dead stock
CX / CY Low value, predictable Order in larger, infrequent batches; automate fully and stop thinking about them
CZ Low value, erratic Candidates to discontinue, stock minimally, or order only against a customer order

How to run an ABC-XYZ analysis

Pull at least twelve months of demand history by SKU so seasonality is visible. For ABC, multiply annual units by unit cost, sort descending, take the running share of total value and cut at your chosen thresholds. For XYZ, break the same history into equal periods (weeks or months), calculate the mean and standard deviation of demand per SKU, divide to get the coefficient of variation, and band the result. Then join the two labels per SKU and count how many items land in each of the nine cells.

Two practical cautions. Use demand, not shipments: if you were out of stock, the sale you never made is missing from the history and the item looks calmer than it is. And exclude one-off bulk orders from the variability calculation, or flag them separately, because a single large contract order will push an otherwise steady item into Z.

Where software takes over

A spreadsheet ABC run is a fine first pass, and for a static catalog it may be enough. It stops being enough when the classification needs to drive things automatically: reorder points that tighten when an item crosses into class A, count lists that regenerate as classes shift, safety stock that recomputes per class policy. That is mechanical work, and it is exactly the kind of arithmetic forecast-driven inventory software should do for every SKU, every day, without being asked. The classification is the easy hour; living by it is the part worth automating.

See this math run itself

The free stock scan computes cover, safety stock and verdicts per SKU on sample data or rows you paste. No signup.

Run the stock scan

More from the stockroom

AI inventory

Reading about it is step one

Step two is a system that does this arithmetic for every SKU, every day. Create your account.

One confirmation email, no spam, no card required.