{
  "slug": "spare-parts-stocking",
  "title": "Spare Parts Stocking Calculator",
  "heading": "Spare Parts Stocking Level Calculator",
  "category": "financial",
  "url": "https://www.revenuelab.fyi/toolbox/spare-parts-stocking",
  "summary": "Reorder point and safety stock for critical spare parts inventory.",
  "description": "Spare parts inventory is a balancing act between two costs: carrying too much ties up cash and warehouse space on parts that might sit for years, while carrying too little risks extended downtime waiting on a lead-time part when a machine breaks. This calculator uses classic reorder point logic adapted for maintenance spares — average usage rate, supplier lead time, and a safety stock buffer sized to your desired service level (protection against usage spikes or lead time delays) — to recommend when to reorder and how many units to hold as safety stock. For critical single-point-of-failure parts with long lead times (a specific bearing or drive that takes 8 weeks to get), err toward higher safety stock even if usage history is low, since the downtime cost if you're caught without one dwarfs the carrying cost of holding an extra unit.",
  "formula": "Reorder Point = (Average Usage per Week × Lead Time in Weeks) + Safety Stock. Safety Stock = Z-score × Usage Std Dev × sqrt(Lead Time).",
  "dateModified": "2026-09-30",
  "run_url": "https://www.revenuelab.fyi/api/public/calc?tool=spare-parts-stocking",
  "inputs": [
    {
      "id": "avgUsageWeek",
      "label": "Average usage per week",
      "kind": "number",
      "hint": null,
      "default": 0.4,
      "unit": "units",
      "min": 0,
      "max": null
    },
    {
      "id": "usageStdDev",
      "label": "Usage variability (std dev per week)",
      "kind": "number",
      "hint": null,
      "default": 0.3,
      "unit": "units",
      "min": 0,
      "max": null
    },
    {
      "id": "leadTimeWeeks",
      "label": "Supplier lead time",
      "kind": "number",
      "hint": null,
      "default": 6,
      "unit": "weeks",
      "min": 0.1,
      "max": null
    },
    {
      "id": "serviceLevel",
      "label": "Desired service level",
      "kind": "select",
      "hint": null,
      "default": "1.65",
      "options": [
        {
          "value": "1.28",
          "label": "90% (less critical part)"
        },
        {
          "value": "1.65",
          "label": "95% (standard)"
        },
        {
          "value": "2.05",
          "label": "98% (critical part)"
        },
        {
          "value": "2.33",
          "label": "99% (single point of failure)"
        }
      ]
    },
    {
      "id": "unitCost",
      "label": "Cost per unit",
      "kind": "number",
      "hint": null,
      "default": 850,
      "unit": "$",
      "min": 0,
      "max": null
    }
  ],
  "outputs": [
    {
      "id": "reorderPointUnits",
      "label": "Reorder point (units on hand)",
      "format": "number",
      "hint": null,
      "primary": true
    },
    {
      "id": "safetyStock",
      "label": "Recommended safety stock",
      "format": "decimal",
      "hint": null,
      "primary": false
    },
    {
      "id": "reorderPoint",
      "label": "Exact reorder point",
      "format": "decimal",
      "hint": null,
      "primary": false
    },
    {
      "id": "safetyStockValue",
      "label": "Capital tied up in safety stock",
      "format": "currency",
      "hint": null,
      "primary": false
    }
  ],
  "worked_example": {
    "inputs": [
      "Average usage per week: 0.4 units",
      "Usage variability (std dev per week): 0.3 units",
      "Supplier lead time: 6 weeks",
      "Desired service level: 95% (standard)",
      "Cost per unit: 850 $"
    ],
    "outputs": [
      "Reorder point (units on hand): 4",
      "Recommended safety stock: 1.21",
      "Exact reorder point: 3.61",
      "Capital tied up in safety stock: $1,031"
    ]
  },
  "how_to": {
    "title": "How to use this",
    "steps": [
      "Enter average usage per week (units).",
      "Enter usage variability (std dev per week) (units).",
      "Enter supplier lead time (weeks).",
      "Enter desired service level.",
      "Enter cost per unit ($).",
      "Read your reorder point (units on hand) on the right — it updates as you type.",
      "Hit Share to keep the scenario or send it to someone."
    ]
  },
  "scenarios": [
    {
      "name": "Conservative",
      "description": "Lower-end numbers — what if things land soft?",
      "values": {
        "avgUsageWeek": 0.24,
        "usageStdDev": 0.18,
        "leadTimeWeeks": 3.5999999999999996,
        "serviceLevel": "1.65",
        "unitCost": 500
      }
    },
    {
      "name": "Typical",
      "description": "Defaults — the most common real-world setup.",
      "values": {
        "avgUsageWeek": 0.4,
        "usageStdDev": 0.3,
        "leadTimeWeeks": 6,
        "serviceLevel": "1.65",
        "unitCost": 850
      }
    },
    {
      "name": "Ambitious",
      "description": "Higher-end numbers — what if things really pop?",
      "values": {
        "avgUsageWeek": 0.6400000000000001,
        "usageStdDev": 0.48,
        "leadTimeWeeks": 9.600000000000001,
        "serviceLevel": "1.65",
        "unitCost": 1350
      }
    }
  ],
  "limitations": [
    "Results are estimates before tax, fees, and inflation unless an input explicitly covers them.",
    "Rates are treated as fixed for the whole period — variable-rate products will drift from this projection.",
    "This is educational maths, not financial advice. Check anything contractual with the lender or your accountant."
  ],
  "faq": [
    {
      "q": "What if usage is so infrequent I can't calculate a meaningful standard deviation?",
      "a": "For very slow-moving critical spares (used once every year or two), the statistical formula breaks down — instead, stock based on criticality and lead time directly: if the part is a single point of failure and lead time exceeds your acceptable downtime tolerance, stock at least one unit regardless of what the usage-based formula suggests."
    },
    {
      "q": "How do I choose the right service level?",
      "a": "Base it on the consequence of a stockout, not on habit. A part that stops the whole line with an 8-week lead time deserves 98-99% service level even if it's expensive to stock; a part with a backup machine or a 2-day lead time from a local supplier can run at 90% or even rely on just-in-time ordering."
    },
    {
      "q": "Does this work for consumables like filters and belts, not just critical spares?",
      "a": "Yes, the same reorder point math applies, though for cheap high-usage consumables it's often simpler to just set a round-number min/max bin quantity rather than running the full statistical calculation — save the rigorous approach for expensive or long-lead-time parts where getting it wrong is costly either direction."
    },
    {
      "q": "Should I hold safety stock jointly across multiple similar machines?",
      "a": "Yes, if multiple machines share an interchangeable part, pooling safety stock across them reduces total inventory needed for the same service level, since you're protecting against the combined usage variability rather than each machine's variability separately — this is a real, often underused saving in multi-machine plants."
    }
  ],
  "related": [
    "https://www.revenuelab.fyi/toolbox/preventive-maintenance-vs-downtime",
    "https://www.revenuelab.fyi/toolbox/moq-negotiation-impact"
  ],
  "license": "CC-BY-4.0",
  "citation": "RevenueLab — Spare Parts Stocking Calculator (https://www.revenuelab.fyi/toolbox/spare-parts-stocking)"
}