{
  "slug": "staff-scheduling-hours",
  "title": "Staff Scheduling Hours Calculator",
  "heading": "Restaurant Staff Scheduling Hours Calculator",
  "category": "financial",
  "url": "https://www.revenuelab.fyi/toolbox/staff-scheduling-hours",
  "summary": "Right-size staffing hours to projected sales and target labor percentage.",
  "description": "Scheduling by gut feel is the fastest way to blow a labor budget. This calculator works backward from your target labor cost percentage: given projected sales for a shift or day and your blended hourly wage rate, it tells you the maximum labor dollars and hours you can schedule while hitting target. It also compares that budget against your planned scheduled hours to flag overstaffing or understaffing before the shift happens, not after the labor report comes in a week later. The key discipline this enforces is scheduling to sales forecasts by daypart rather than a static weekly template — a Tuesday lunch and a Friday dinner should never carry the same staffing plan, and the gap between the two labor-hour budgets can be substantial even when total weekly sales look similar on paper.",
  "formula": "Labor budget $ = projected sales × target labor %. Budgeted hours = labor budget $ ÷ blended hourly rate.",
  "dateModified": "2026-09-30",
  "run_url": "https://www.revenuelab.fyi/api/public/calc?tool=staff-scheduling-hours",
  "inputs": [
    {
      "id": "projectedSales",
      "label": "Projected sales for shift/day",
      "kind": "number",
      "hint": null,
      "default": 4200,
      "unit": "$",
      "min": 0,
      "max": null
    },
    {
      "id": "targetLaborPct",
      "label": "Target labor %",
      "kind": "number",
      "hint": null,
      "default": 28,
      "unit": "%",
      "min": 5,
      "max": 60
    },
    {
      "id": "blendedRate",
      "label": "Blended hourly wage (loaded)",
      "kind": "number",
      "hint": null,
      "default": 19,
      "unit": "$/hr",
      "min": 0,
      "max": null
    },
    {
      "id": "plannedHours",
      "label": "Hours currently scheduled",
      "kind": "number",
      "hint": null,
      "default": 58,
      "unit": null,
      "min": 0,
      "max": null
    }
  ],
  "outputs": [
    {
      "id": "budgetedHours",
      "label": "Budgeted labor hours",
      "format": "number",
      "hint": null,
      "primary": true
    },
    {
      "id": "hoursGap",
      "label": "Scheduled vs. budgeted gap",
      "format": "number",
      "hint": null,
      "primary": false
    },
    {
      "id": "laborBudget",
      "label": "Labor dollar budget",
      "format": "currency",
      "hint": null,
      "primary": false
    },
    {
      "id": "projectedLaborPct",
      "label": "Projected labor % if scheduled as planned",
      "format": "percent",
      "hint": null,
      "primary": false
    }
  ],
  "worked_example": {
    "inputs": [
      "Projected sales for shift/day: 4200 $",
      "Target labor %: 28 %",
      "Blended hourly wage (loaded): 19 $/hr",
      "Hours currently scheduled: 58"
    ],
    "outputs": [
      "Budgeted labor hours: 61.9",
      "Scheduled vs. budgeted gap: -3.9",
      "Labor dollar budget: $1,176",
      "Projected labor % if scheduled as planned: 26.2%"
    ]
  },
  "how_to": {
    "title": "How to use this",
    "steps": [
      "Enter projected sales for shift/day ($).",
      "Enter target labor % (%).",
      "Enter blended hourly wage (loaded) ($/hr).",
      "Enter hours currently scheduled.",
      "Read your budgeted labor hours 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": {
        "projectedSales": 2500,
        "targetLaborPct": 17,
        "blendedRate": 11.4,
        "plannedHours": 35
      }
    },
    {
      "name": "Typical",
      "description": "Defaults — the most common real-world setup.",
      "values": {
        "projectedSales": 4200,
        "targetLaborPct": 28,
        "blendedRate": 19,
        "plannedHours": 58
      }
    },
    {
      "name": "Ambitious",
      "description": "Higher-end numbers — what if things really pop?",
      "values": {
        "projectedSales": 6700,
        "targetLaborPct": 45,
        "blendedRate": 30.400000000000002,
        "plannedHours": 93
      }
    }
  ],
  "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": "How do I forecast sales for a specific shift?",
      "a": "Use a trailing average of the same day-of-week and daypart over the last 4-8 weeks, adjusted for known factors like weather, local events, or holidays. POS systems with forecasting built in do this automatically and generally beat manual guessing once you have a few months of data."
    },
    {
      "q": "What if the hours gap shows I'm understaffed?",
      "a": "A negative gap (fewer hours scheduled than budget allows) isn't automatically bad — it might mean you're running lean and profitable, or it might mean service quality is suffering. Cross-check against wait times, table turn speed, and guest complaints before adding hours just because the budget allows it."
    },
    {
      "q": "Should every daypart use the same target labor %?",
      "a": "No — slow dayparts often need a minimum staffing floor (at least one cook, one server) regardless of what the percentage formula suggests, which can push labor % higher than target during those windows. Budget dayparts individually rather than applying one blanket target across the whole day."
    },
    {
      "q": "How often should schedules be built against this kind of budget?",
      "a": "Weekly, built from the sales forecast for that specific week, with a same-day adjustment window for extreme weather or unexpected events. Building the schedule two weeks out from stale sales data is a common source of labor percentage misses."
    }
  ],
  "related": [
    "https://www.revenuelab.fyi/toolbox/labor-cost-percentage",
    "https://www.revenuelab.fyi/toolbox/prime-cost-calculator",
    "https://www.revenuelab.fyi/toolbox/tip-pooling-split"
  ],
  "license": "CC-BY-4.0",
  "citation": "RevenueLab — Staff Scheduling Hours Calculator (https://www.revenuelab.fyi/toolbox/staff-scheduling-hours)"
}