{
  "slug": "vending-machine-shrink-loss",
  "title": "Vending Machine Shrink Loss Calculator",
  "heading": "Vending Machine Shrink & Loss Calculator",
  "category": "financial",
  "url": "https://www.revenuelab.fyi/toolbox/vending-machine-shrink-loss",
  "summary": "Quantify product loss from theft, jams, and spoilage as a percentage of revenue.",
  "description": "Shrink in vending is the gap between product you loaded and product you got paid for — lost to mechanical jams that dispense without payment, theft or vandalism, expired perishables pulled before sale, and simple counting errors during restocking. Operators who don't track shrink separately from cost of goods often can't tell whether a location's poor margin is a pricing problem or a shrink problem. This calculator takes units loaded, units sold, and the average per-unit cost and price to compute shrink units, shrink cost, and the dollar impact on your margin, so you can decide whether a location needs a different machine (bill/card only, no coin jams), a shorter restock interval for perishables, or isn't worth servicing at that shrink rate.",
  "formula": "Shrink units = units loaded − units sold − units remaining. Shrink cost = shrink units × unit cost. Shrink % of revenue = shrink cost ÷ (units sold × price).",
  "dateModified": "2026-09-30",
  "run_url": "https://www.revenuelab.fyi/api/public/calc?tool=vending-machine-shrink-loss",
  "inputs": [
    {
      "id": "unitsLoaded",
      "label": "Units loaded this cycle",
      "kind": "number",
      "hint": null,
      "default": 300,
      "unit": null,
      "min": 1,
      "max": null
    },
    {
      "id": "unitsSold",
      "label": "Units sold (per machine vend count)",
      "kind": "number",
      "hint": null,
      "default": 265,
      "unit": null,
      "min": 0,
      "max": null
    },
    {
      "id": "unitsRemaining",
      "label": "Units remaining at next restock",
      "kind": "number",
      "hint": null,
      "default": 20,
      "unit": null,
      "min": 0,
      "max": null
    },
    {
      "id": "unitCost",
      "label": "Average cost per unit",
      "kind": "number",
      "hint": null,
      "default": 0.85,
      "unit": "$",
      "min": 0.05,
      "max": null
    },
    {
      "id": "unitPrice",
      "label": "Average sale price per unit",
      "kind": "number",
      "hint": null,
      "default": 1.75,
      "unit": "$",
      "min": 0.1,
      "max": null
    }
  ],
  "outputs": [
    {
      "id": "shrinkCost",
      "label": "Shrink cost this cycle",
      "format": "currency",
      "hint": null,
      "primary": true
    },
    {
      "id": "shrinkUnits",
      "label": "Shrink units",
      "format": "number",
      "hint": null,
      "primary": false
    },
    {
      "id": "shrinkPct",
      "label": "Shrink as % of revenue",
      "format": "percent",
      "hint": null,
      "primary": false
    },
    {
      "id": "shrinkUnitPct",
      "label": "Shrink as % of units loaded",
      "format": "percent",
      "hint": null,
      "primary": false
    }
  ],
  "worked_example": {
    "inputs": [
      "Units loaded this cycle: 300",
      "Units sold (per machine vend count): 265",
      "Units remaining at next restock: 20",
      "Average cost per unit: 0.85 $",
      "Average sale price per unit: 1.75 $"
    ],
    "outputs": [
      "Shrink cost this cycle: $12.75",
      "Shrink units: 15",
      "Shrink as % of revenue: 2.75%",
      "Shrink as % of units loaded: 5.00%"
    ]
  },
  "how_to": {
    "title": "How to use this",
    "steps": [
      "Enter units loaded this cycle.",
      "Enter units sold (per machine vend count).",
      "Enter units remaining at next restock.",
      "Enter average cost per unit ($).",
      "Enter average sale price per unit ($).",
      "Read your shrink cost this cycle 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": {
        "unitsLoaded": 180,
        "unitsSold": 160,
        "unitsRemaining": 10,
        "unitCost": 0.51,
        "unitPrice": 1.05
      }
    },
    {
      "name": "Typical",
      "description": "Defaults — the most common real-world setup.",
      "values": {
        "unitsLoaded": 300,
        "unitsSold": 265,
        "unitsRemaining": 20,
        "unitCost": 0.85,
        "unitPrice": 1.75
      }
    },
    {
      "name": "Ambitious",
      "description": "Higher-end numbers — what if things really pop?",
      "values": {
        "unitsLoaded": 480,
        "unitsSold": 425,
        "unitsRemaining": 30,
        "unitCost": 1.36,
        "unitPrice": 2.8000000000000003
      }
    }
  ],
  "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's a normal shrink rate for vending?",
      "a": "1-3% of units loaded is typical and acceptable for a well-maintained machine in a low-crime location; anything above 5% warrants investigation into either mechanical jamming (a specific spiral or motor issue), a location with theft/vandalism problems, or an inventory-counting process error at restock."
    },
    {
      "q": "How do cashless payment systems affect shrink?",
      "a": "Card and mobile-pay readers essentially eliminate coin-jam-related free dispenses and most forms of currency-based fraud, and many operators report a 1-2 percentage point shrink reduction after adding cashless readers, on top of the sales lift cashless typically provides."
    },
    {
      "q": "How should I handle perishable shrink differently?",
      "a": "Track perishable shrink (spoiled sandwiches, expired dairy) as a separate category from mechanical/theft shrink, since the fix is different — shorter restock cycles or smaller batch sizes for perishables versus mechanical repair or relocation for theft-driven shrink."
    },
    {
      "q": "What do I do with a location that has chronically high shrink?",
      "a": "First rule out a mechanical cause by testing the machine at another location. If shrink persists and is location-specific, either add camera coverage if the site allows it, switch to a bill/card-only unit, or exit the location if the shrink cost consistently erodes the margin below what the location contributes."
    }
  ],
  "related": [
    "https://www.revenuelab.fyi/toolbox/vending-machine-route-profit",
    "https://www.revenuelab.fyi/toolbox/vending-machine-slot-velocity",
    "https://www.revenuelab.fyi/toolbox/vending-machine-roi"
  ],
  "license": "CC-BY-4.0",
  "citation": "RevenueLab — Vending Machine Shrink Loss Calculator (https://www.revenuelab.fyi/toolbox/vending-machine-shrink-loss)"
}