{
  "slug": "espresso-shot-cost",
  "title": "Cost Per Espresso Shot Calculator",
  "heading": "Espresso Shot Cost Calculator",
  "category": "financial",
  "url": "https://www.revenuelab.fyi/toolbox/espresso-shot-cost",
  "summary": "True cost of a single or double shot from bean price to cup.",
  "description": "Baristas price drinks off gut feel and lose margin on every double shot. This calculator takes your green or roasted bean cost per pound, the dose you actually pull, and grind waste, then converts it into a hard cost per shot. It also folds in portafilter purge waste, which most cost sheets ignore even though it can run 1-2 grams per pull on a busy bar. Use it to check whether a $4.50 latte with a double shot and 8oz of milk is actually profitable once you account for cups, lids, and labor seconds, not just the bean line. Roasters change price twice a year and baristas drift their dose up over months without anyone re-costing the menu, so this is meant to be rerun quarterly with your actual invoice price, not the price you paid two years ago.",
  "formula": "Shot cost = (dose grams + waste grams) ÷ 453.6 × cost per lb. Drink cost = shot cost × shots + milk cost + cup/lid cost.",
  "dateModified": "2026-09-30",
  "run_url": "https://www.revenuelab.fyi/api/public/calc?tool=espresso-shot-cost",
  "inputs": [
    {
      "id": "doseG",
      "label": "Dose per shot",
      "kind": "number",
      "hint": null,
      "default": 18,
      "unit": "g",
      "min": 5,
      "max": 30
    },
    {
      "id": "shots",
      "label": "Shots per drink",
      "kind": "number",
      "hint": null,
      "default": 2,
      "unit": null,
      "min": 1,
      "max": 4
    },
    {
      "id": "wasteG",
      "label": "Grind/purge waste per shot",
      "kind": "number",
      "hint": null,
      "default": 1.5,
      "unit": "g",
      "min": 0,
      "max": 5
    },
    {
      "id": "beanCostLb",
      "label": "Roasted bean cost per lb",
      "kind": "number",
      "hint": null,
      "default": 8.5,
      "unit": "$",
      "min": 1,
      "max": null
    },
    {
      "id": "milkCost",
      "label": "Milk & syrup cost per drink",
      "kind": "number",
      "hint": null,
      "default": 0.45,
      "unit": "$",
      "min": 0,
      "max": null
    },
    {
      "id": "cupCost",
      "label": "Cup, lid, sleeve cost",
      "kind": "number",
      "hint": null,
      "default": 0.28,
      "unit": "$",
      "min": 0,
      "max": null
    },
    {
      "id": "price",
      "label": "Menu price",
      "kind": "number",
      "hint": null,
      "default": 5.25,
      "unit": "$",
      "min": 0,
      "max": null
    }
  ],
  "outputs": [
    {
      "id": "drinkCost",
      "label": "Total drink cost",
      "format": "currency",
      "hint": null,
      "primary": true
    },
    {
      "id": "shotCost",
      "label": "Cost per single shot",
      "format": "currency",
      "hint": null,
      "primary": false
    },
    {
      "id": "espressoCost",
      "label": "Espresso cost for this drink",
      "format": "currency",
      "hint": null,
      "primary": false
    },
    {
      "id": "margin",
      "label": "Gross margin per drink",
      "format": "currency",
      "hint": null,
      "primary": false
    },
    {
      "id": "marginPct",
      "label": "Margin percent",
      "format": "percent",
      "hint": null,
      "primary": false
    },
    {
      "id": "shotsPerLb",
      "label": "Shots per pound of beans",
      "format": "number",
      "hint": null,
      "primary": false
    }
  ],
  "worked_example": {
    "inputs": [
      "Dose per shot: 18 g",
      "Shots per drink: 2",
      "Grind/purge waste per shot: 1.5 g",
      "Roasted bean cost per lb: 8.5 $",
      "Milk & syrup cost per drink: 0.45 $",
      "Cup, lid, sleeve cost: 0.28 $",
      "Menu price: 5.25 $"
    ],
    "outputs": [
      "Total drink cost: $1.46",
      "Cost per single shot: $0.365",
      "Espresso cost for this drink: $0.73",
      "Gross margin per drink: $3.79",
      "Margin percent: 72.2%",
      "Shots per pound of beans: 23"
    ]
  },
  "how_to": {
    "title": "How to use this",
    "steps": [
      "Enter dose per shot (g).",
      "Enter shots per drink.",
      "Enter grind/purge waste per shot (g).",
      "Enter roasted bean cost per lb ($).",
      "Enter milk & syrup cost per drink ($).",
      "Enter cup, lid, sleeve cost ($).",
      "Enter menu price ($).",
      "Read your total drink cost 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": {
        "doseG": 10.799999999999999,
        "shots": 1,
        "wasteG": 0.8999999999999999,
        "beanCostLb": 5.1,
        "milkCost": 0.27,
        "cupCost": 0.168,
        "price": 3.15
      }
    },
    {
      "name": "Typical",
      "description": "Defaults — the most common real-world setup.",
      "values": {
        "doseG": 18,
        "shots": 2,
        "wasteG": 1.5,
        "beanCostLb": 8.5,
        "milkCost": 0.45,
        "cupCost": 0.28,
        "price": 5.25
      }
    },
    {
      "name": "Ambitious",
      "description": "Higher-end numbers — what if things really pop?",
      "values": {
        "doseG": 28.8,
        "shots": 3,
        "wasteG": 2.4000000000000004,
        "beanCostLb": 13.600000000000001,
        "milkCost": 0.7200000000000001,
        "cupCost": 0.44800000000000006,
        "price": 8.4
      }
    }
  ],
  "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 dose should I use for a single vs double shot?",
      "a": "Most modern espresso standards run 18-20g in for a double (36-40g out) and 8-10g for a single. Older-style single-basket bars sometimes still pull 7g singles. Use whatever your actual recipe card says, since dose creep from 16g to 20g over a year quietly adds real cost per drink without anyone noticing on the P&L."
    },
    {
      "q": "Why include waste grams separately from dose?",
      "a": "Dose is what ends up in the cup; waste is what gets knocked out during dosing, distributing, and purging the group head before and after the shot. On a busy bar with frequent purges this can add 5-10% to real bean consumption versus the recipe dose alone, which is why cost-per-pound math based on dose alone always underestimates actual usage."
    },
    {
      "q": "How often should I recalculate this?",
      "a": "Every time your roaster changes price, which is typically twice a year as green coffee futures move, and any time you change your dose or grind recipe. A lot of shops set menu prices once and never revisit them even as bean cost rises 15-20% year over year."
    },
    {
      "q": "What's a healthy margin percent for espresso drinks?",
      "a": "Coffee shops typically target 75-85% gross margin on espresso-based drinks before labor and occupancy, since the beverage itself is cheap relative to price. If you're under 70% margin on a latte, check your dose, milk waste, and cup cost before raising prices."
    }
  ],
  "related": [
    "https://www.revenuelab.fyi/toolbox/milk-steaming-waste-cost",
    "https://www.revenuelab.fyi/toolbox/cafe-daily-breakeven-cups",
    "https://www.revenuelab.fyi/toolbox/green-coffee-landed-cost"
  ],
  "license": "CC-BY-4.0",
  "citation": "RevenueLab — Cost Per Espresso Shot Calculator (https://www.revenuelab.fyi/toolbox/espresso-shot-cost)"
}