E-commerce
Run an ABC-XYZ analysis and get reorder points
Upload a CSV with SKU, demand, unit cost and lead time. Each item gets an ABC class by annual value, an XYZ class by how steady its monthly demand is, a safety stock and a reorder point.
or drop it here
This is the result the tool produced from the 4 sample rows below. Switch the service level to see safety stock and reorder point change.
Target service level
| SKU | Class | Annual value | Safety stock units | Reorder point units |
|---|---|---|---|---|
| LAMP-01 | A · X | €31,641 | 111518 | 727679 |
| DESK-03 | B · — | €3,576 | 0 | 2 |
| CABLE-02 | B · — | €1,890 | 0 | 18 |
| Total | €37,107 |
Shown at 90%95%98% service level. Only LAMP-01 changes: it is the one SKU with monthly history.
- LAMP-01 has two monthly rows. Its demand barely moves between months, so it is class X and gets a safety stock. It alone makes up 85% of the annual value, which is why it is the only A item.
- DESK-03 and CABLE-02 have one row each. A single row is read as annual demand: both get an ABC class, XYZ reads “Insufficient history” (—) and safety stock stays 0.
- Amounts use the currency of your file. The sample prices are in euros.
Show the 4 sample input rows
SKU,Demand,Unit Cost,Lead Time Days LAMP-01,120,19.90,14 LAMP-01,145,19.90,14 CABLE-02,900,2.10,7 DESK-03,24,149,30
- result.csvthis table plus annual demand, unit cost and lead days per SKU
- findings.csvreview notes for the run
- manifest.jsoninput file name, size and SHA-256 hash, plus the run summary
Columns the CSV needs
All four columns are required. Header names are matched without regard to case or spaces, so “Unit Cost” and “unit_cost” both work.
| Column | Also accepted | What goes in it |
|---|---|---|
| SKU | — | Item identifier |
| Demand | annual_demand, units_sold | Units per month when a SKU has several rows, units per year when it has one |
| Unit cost | cost | Plain number without a currency sign; 19.90 and 19,90 both work |
| Lead time days | lead_days | Days from order to arrival |
- Repeated rows for one SKU must share the same unit cost and lead time.
- Missing or negative values, and ambiguous numbers such as 1,234, stop the job with an error instead of a guessed value. Failed jobs do not count toward your 3 free jobs.
How the numbers are worked out
- Annual demand
- Several rows for one SKU are monthly history: the average month × 12. A single row is taken as annual demand.
- Annual value
- Annual demand × unit cost.
- ABC class
- SKUs sorted by annual value, high to low. A while the SKUs above hold less than 80% of the total value, B below 95%, C after that.
- XYZ class
- Standard deviation of monthly demand divided by the average month. Up to 0.5 is X, up to 1 is Y, above 1 is Z. One row only: “Insufficient history”.
- Safety stock
- Service factor × standard deviation of monthly demand × √(lead days ÷ 30), rounded up. The factor is 1.282 at 90%, 1.645 at 95% and 2.054 at 98%.
- Reorder point
- Annual demand ÷ 365 × lead days + safety stock, rounded up.
Worked example: LAMP-01 at 95%
The two months are 120 and 145 units, so the average month is 132.5 and the standard deviation is 12.5. Annual demand is 132.5 × 12 = 1,590 units, worth €31,641 at €19.90. Safety stock is 1.645 × 12.5 × √(14 ÷ 30) = 14.05, rounded up to 15. The reorder point is 1,590 ÷ 365 × 14 + 15 = 75.99, rounded up to 76 units.
Where your own judgement comes in
A higher service level raises safety stock, so pick the level your business already works to. Seasonality, promotions and supply problems are not modelled, and no demand is invented. Treat the figures as a starting point that a planner checks before any order is placed. Your original file is not changed.
From your file to a reorder list
- 1
Add your CSV
Sign in with a free account. It includes 3 free jobs a day, one file per job and up to 100,000 SKUs.
- 2
Pick the service level
90, 95 or 98 percent. It is the only setting.
- 3
Check and download
Look over the preview, then download result.csv, findings.csv and manifest.json. Results expire after 24 hours.
Questions before you run it
What columns does the CSV need?
Four: SKU, Demand, Unit cost and Lead time days. Several rows for the same SKU count as monthly history; a single row counts as annual demand. Missing or negative values stop the job with an error instead of being estimated.
What happens if a SKU has only one row?
The row is read as annual demand. The SKU still gets an ABC class from its annual value, but XYZ reads “Insufficient history” and safety stock is 0, so the reorder point covers lead-time demand only. No demand is invented to fill the gap.
How is the ABC class calculated?
SKUs are sorted by annual value (annual demand × unit cost), high to low. An item is A while the SKUs above it hold less than 80% of the total value, B below 95%, and C after that. The annual value of each SKU is in result.csv, so any class can be retraced.
Which target service level should I pick?
The control offers 90, 95 and 98 percent, which set a service factor of 1.282, 1.645 or 2.054 in the safety stock formula. Higher levels raise safety stock, so pick the level your business already works to rather than the highest number.
Is the reorder point a forecast?
No. It is an arithmetic estimate from the history you supply. Seasonality, promotions and supply disruption are not modelled, so treat the figure as a starting point for a planner to adjust.
Do I need an account?
Yes, a free account. It includes 3 free jobs a day, and failed jobs are not counted. The sample result on this page needs no upload, so you can check the output format first.