The Optimal Safety Stock Level Formula (And How to Actually Calculate It)
The optimal safety stock formula is SS = Z × √[(average lead time × demand variance) + (average demand² × lead time variance)], where Z is the score for your target service level. It accounts for demand uncertainty and lead time uncertainty at the same time, not one or the other.
The team behind Dr. Stock
The formula, in plain terms
Most pages stop at a simplified version: SS = Z × σd × √(lead time). That works if your lead time is basically fixed and only demand wobbles. But on Amazon, lead time wobbles too — customs, carrier delays, supplier production slots. If you ignore lead time variance, your safety stock will be too low exactly when you need it most: during a supply hiccup on a high-velocity SKU.
The fuller, more honest formula covers both sources of risk at once, assuming they're independent of each other:
SS = Z × √[(LTavg × σd²) + (davg² × σLT²)]
- Z — the score matching your target in-stock rate (95%, 97.5%, 99%)
- σd — standard deviation of daily demand
- LTavg — average lead time, in the same time unit as demand
- davg — average daily demand
- σLT — standard deviation of lead time
The Z-score is the lever most people never touch. It's not a constant — it's a choice. A 99% target on a low-margin, high-storage-cost item is usually a mistake. A 90% target on a hero SKU during a launch is a different mistake. Match the Z-score to what a stockout actually costs you on that specific ASIN, not a company-wide default.
Worked example: the math with real numbers
Say you sell a kitchen tool with these inputs pulled from 90 days of clean sales data:
- Average daily demand: 40 units
- Standard deviation of daily demand: 12 units
- Average lead time: 21 days
- Standard deviation of lead time: 3 days
- Target service level: 97.5% (Z = 1.96)
Plug it in:
(LTavg × σd²) = 21 × 144 = 3,024
(davg² × σLT²) = 1,600 × 9 = 14,400
Sum = 17,424 → √17,424 ≈ 132
SS = 1.96 × 132 ≈ 259 units
That's your optimal safety stock level for this SKU at a 97.5% service level. Feed it into the reorder point formula and you get a number you can actually act on, which is the point of doing this in the first place.
Where this fits: reorder point and EOQ
Safety stock isn't the number you reorder at — it's the floor you never want to touch. The reorder point is what triggers the purchase order:
RP = Safety Stock + (Average Demand × Average Lead Time)
Continuing the example: RP = 259 + (40 × 21) = 259 + 840 = 1,099 units. When stock hits 1,099, you order. The order quantity itself — how much you order each time — is a separate question answered by EOQ (Economic Order Quantity), which balances ordering cost against holding cost. Safety stock protects against uncertainty; EOQ minimizes cost. They're solving different problems and get confused constantly.
The mistakes that produce a wrong number
The formula is rarely the problem. The inputs are.
- Using the average-max method as a permanent policy. It's fine as a quick gut-check, but it locks you into covering the single worst historical event forever, which means carrying peak-level stock all year round. That's a storage fee and aged-inventory bill waiting to happen.
- Feeding it censored demand data. This is a mistake we've made ourselves: building a demand standard deviation off a trailing window that included a stockout period. The system recorded zero sales on days you were actually out of stock — that's not low demand, it's unmeasured demand. The standard deviation comes out artificially low, and so does the safety stock.
- Mismatched time units. Daily demand variance combined with a lead time in weeks, or vice versa. The number that comes out looks plausible and is wrong by a multiple.
- Treating demand and lead time variance as independent when they aren't. If a promotion drives demand up at the same time your supplier is already stretched, the two risks compound rather than average out. The independent formula understates safety stock in that case.
- Setting one Z-score for the whole catalog. Across the $500M-plus in managed revenue we've managed for 100+ brands, the SKUs that get stranded or run out mid-campaign are almost never the ones with a bad formula — they're the ones using a default service level that was never revisited per SKU.
What to do when the number is wrong
You'll know it's wrong from the symptoms, not the math. Two patterns to watch for:
Stockouts keep happening despite carrying safety stock. Check whether your demand data is censored by past stockouts, whether lead time variance is being measured from actual receipt dates rather than promised dates, and whether a recent demand shift (a review milestone, a competitor going out of stock, a seasonal turn) has outrun your trailing average.
Safety stock keeps growing and storage fees follow it. This usually means the Z-score is too conservative for that SKU's margin and it's been left untouched since it was first set, or the lead time input still reflects an old supplier relationship rather than the current one.
Either way, the fix is not to nudge the number up or down and hope. Recalculate from clean, uncensored inputs, confirm the service level target still matches what a stockout actually costs on that SKU today, and check the date the inputs were last refreshed. A safety stock number with no refresh date attached to it is a guess wearing a formula's clothes.
Where Dr. Stock fits
The formula above works in a spreadsheet — nothing here requires software. Where it breaks down is at scale: a catalog of a few hundred SKUs where lead times drift by supplier, demand shifts by campaign, and nobody notices until a hero ASIN goes out of stock mid-launch or an aging SKU racks up a storage surcharge. Dr. Stock, from Full Circle, watches those inputs continuously and flags the reorder timing before it becomes a stockout or a surcharge — inventory purchasing decisions still go to a human either way. If your problem is a bad ad account rather than a bad reorder point, that's Dr. PPC's territory, not ours. Whether or not you ever use us, recalculating with real, uncensored numbers instead of a default Z-score is the actual fix.
| Target service level | Z-score | What it means in practice |
|---|---|---|
| 90% | 1.28 | Acceptable for low-margin, low-risk SKUs where a stockout costs little |
| 95% | 1.65 | Common default for steady sellers; balances holding cost against stockout risk |
| 97.5% | 1.96 | Used for hero SKUs or products mid-launch/mid-campaign, where a stockout kills rank |
| 99% | 2.33 | Reserved for critical, low-volume, high-margin items; expensive to carry across a whole catalog |
Which one you should actually pick
Run the full demand-plus-lead-time formula yourself if you have clean data and the time to keep it current — it's not complicated once you've done it once. Reach for a managed service like Dr. Stock when the catalog is large enough that stale inputs and unrefreshed Z-scores are quietly costing more than the formula itself ever could.
Shortlist on the job, not the feature grid. Total three numbers first: storage and aged-inventory surcharges for the last twelve months, lost sales on days your best sellers were out of stock, and cash sitting in SKUs that have not moved in 180 days. Then ask each vendor what they would do about those three in week one.
Common questions
What's the difference between safety stock and reorder point?
Safety stock is the buffer itself — the floor you never want to fall below. The reorder point is the trigger level that tells you to place an order, calculated as safety stock plus average demand during average lead time. Safety stock is one input into the reorder point, not the same number.
Which Z-score should I use for an Amazon FBA SKU?
There's no universal answer — it should match what a stockout costs on that specific SKU. A hero product mid-launch, where a stockout kills organic rank, justifies 97.5% or higher. A slow-moving, high-storage-cost item is often better served at 90–95%, accepting slightly more stockout risk to avoid aged-inventory fees.
Do I need EOQ and safety stock, or just one of them?
Both, and they answer different questions. EOQ tells you how much to order each time to minimize total ordering and holding cost. Safety stock tells you the minimum buffer to hold against demand and lead time uncertainty. Reorder point combines them into the actual trigger for placing a purchase order.
What if I don't have enough sales history to calculate standard deviation?
Use a shorter window and flag the number as provisional, or fall back to the basic 'days of supply' method as a temporary bridge — it's crude but better than no buffer. Revisit with a proper standard deviation calculation once you have at least a few months of uncensored demand data.
Why did my safety stock formula give me a number that led to overstock?
Usually one of two things: the Z-score is set higher than the SKU's margin and stockout cost justify, or the inputs (especially lead time) are stale and reflect a supplier relationship or shipping route that no longer applies. Recalculate from current data before adjusting the target service level.
Dr. Stock runs Amazon inventory and supply chain — reorder timing, stockout risk, storage and aged-inventory fees, FBA fee errors and dimensional-weight misclassification, shipment discrepancies and reimbursement recovery — with operators from a $500M+ Amazon team supervising. Purchasing decisions always come to a human. Orbit is included. First 30 days free, priced on the call.
Book a Dr. Stock demoRead next
- NetSuite Pricing in 2026: What an Amazon Brand PaysPricing · netsuite pricing
- Refunds Manager Review 2026: One Record, VerifiedReview · refunds manager review
- Sellerboard Pricing 2026: Plans, Order Bands, LimitsPricing · sellerboard pricing
- Cin7 Pricing 2026: The Order Bands Are the Real PricePricing · cin7 pricing
- ShipBob Pricing 2026: The Five Lines in Every QuotePricing · shipbob pricing
- Helium 10 Pricing 2026: Every Tier and the Ads FeePricing · helium 10 pricing
Part of
- Orbit — the software, included freeInventory, finance, ASIN profitability and the fee, price, BSR and buy box trackers
- Dr. PPCWhen the leak is in the ad account rather than the warehouse