Restaurant Table Turnover Rate Calculator
ANA›Life Services Authority›National Calculator Authority›Restaurant Table Turnover Rate Calculator
.calc-container { max-width: 640px; margin: 2rem 0; padding: 1.5rem; background: #fff; border: 1px solid #ddd; border-radius: 8px; box-shadow: 0 1px 3px rgba(0,0,0,0.06); font-family: system-ui, -apple-system, sans-serif; } .calc-container h3 { font-family: Georgia, serif; font-size: 1.15rem; color: #1a1a1a; margin-bottom: 1rem; padding-bottom: 0.5rem; border-bottom: 2px solid var(--ac, #3d5a80); } .calc-row { display: flex; align-items: center; gap: 0.75rem; margin-bottom: 0.75rem; flex-wrap: wrap; } .calc-row label { min-width: 160px; font-size: 0.9rem; color: #333; font-weight: 500; } .calc-row input[type="number"], .calc-row select { flex: 1; min-width: 120px; max-width: 200px; padding: 0.5rem 0.6rem; border: 1px solid #ccc; border-radius: 4px; font-size: 0.9rem; font-family: system-ui, sans-serif; color: #1a1a1a; background: #fafaf8; } .calc-row input:focus, .calc-row select:focus { outline: none; border-color: var(--ac, #3d5a80); box-shadow: 0 0 0 2px rgba(26,74,138,0.12); } .calc-row .unit { font-size: 0.82rem; color: #888; min-width: 30px; } .calc-btn { display: inline-block; margin-top: 0.5rem; padding: 0.55rem 1.5rem; background: var(--ac, #3d5a80); color: #fff; border: none; border-radius: 4px; font-size: 0.9rem; font-weight: 600; cursor: pointer; font-family: system-ui, sans-serif; } .calc-btn:hover { opacity: 0.9; } .calc-result { margin-top: 1.25rem; padding: 1rem 1.25rem; background: #f0f6fc; border-left: 3px solid var(--ac, #3d5a80); border-radius: 0 6px 6px 0; display: none; } .calc-result.visible { display: block; } .calc-result-label { font-size: 0.78rem; text-transform: uppercase; letter-spacing: 0.06em; color: #666; margin-bottom: 0.25rem; } .calc-result-value { font-size: 1.6rem; font-weight: 700; color: var(--ac, #3d5a80); } .calc-result-detail { font-size: 0.85rem; color: #555; margin-top: 0.5rem; line-height: 1.5; } .calc-note { margin-top: 1rem; font-size: 0.8rem; color: #888; font-style: italic; } .calc-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0.75rem; margin-top: 0.75rem; } .calc-grid-item { padding: 0.6rem 0.8rem; background: #f8f9fa; border-radius: 4px; border: 1px solid #eee; } .calc-grid-item .label { font-size: 0.75rem; color: #888; text-transform: uppercase; letter-spacing: 0.04em; } .calc-grid-item .value { font-size: 1.1rem; font-weight: 600; color: #1a1a1a; } @media (max-width: 720px) { .calc-row { flex-direction: column; align-items: flex-start; gap: 0.3rem; } .calc-row label { min-width: auto; } .calc-row input[type="number"], .calc-row select { max-width: 100%; width: 100%; } .calc-grid { grid-template-columns: 1fr; } } .calc-chart { margin: 1rem 0; text-align: center; } .calc-chart svg { max-width: 100%; height: auto; } .calc-chart-legend { display: flex; flex-wrap: wrap; justify-content: center; gap: 0.6rem 1.2rem; margin-top: 0.6rem; font-size: 0.8rem; color: #555; } .calc-chart-legend span { display: inline-flex; align-items: center; gap: 0.3rem; } .calc-chart-legend i { display: inline-block; width: 10px; height: 10px; border-radius: 2px; font-style: normal; } .calc-related { max-width: 640px; margin: 2rem 0 1rem; padding: 1.25rem 1.5rem; background: #f8f9fa; border: 1px solid #e8e8e8; border-radius: 8px; } .calc-related h3 { font-family: Georgia, serif; font-size: 1rem; color: #1a1a1a; margin: 0 0 0.75rem; padding-bottom: 0.4rem; border-bottom: 2px solid var(--ac, #3d5a80); } .calc-related-list { list-style: none; padding: 0; margin: 0 0 0.75rem; display: grid; grid-template-columns: 1fr 1fr; gap: 0.4rem 1.5rem; } .calc-related-list li a { font-size: 0.88rem; color: var(--ac, #3d5a80); text-decoration: none; } .calc-related-list li a:hover { text-decoration: underline; } .calc-browse-all { margin: 0.5rem 0 0; font-size: 0.9rem; font-weight: 600; } .calc-browse-all a { color: var(--ac, #3d5a80); text-decoration: none; } .calc-browse-all a:hover { text-decoration: underline; } @media (max-width: 720px) { .calc-related-list { grid-template-columns: 1fr; } }
Restaurant Table Turnover Rate Calculator
Calculate how many times your tables are turned over during a service period to measure seating efficiency, optimize staffing, and maximize revenue potential.
Total Parties Served During Period
Total number of guest parties (groups) seated during the service period
Total Number of Tables Available
Total seating tables available in the dining area
Service Period Duration (hours)
Total hours the restaurant was open and serving during this period (e.g. lunch = 2–3 hrs)
Average Meal Duration (minutes)
Average time a party occupies a table from seating to departure
Calculate Turnover Rate
function resCalc() { const resultDiv = document.getElementById('res-result');
const partiesServed = parseFloat(document.getElementById('res-parties-served').value); const totalTables = parseFloat(document.getElementById('res-total-tables').value); const serviceHours = parseFloat(document.getElementById('res-service-hours').value); const avgMealMinutes = parseFloat(document.getElementById('res-avg-meal-duration').value);
// --- Validation --- const errors = []; if (isNaN(partiesServed) || partiesServed serviceHours * 60) { errors.push("Average meal duration cannot exceed the total service period."); }
if (errors.length > 0) { resultDiv.style.display = 'block'; resultDiv.innerHTML = 'Please fix the following:' + errors.map(e => '').join('') + ''; return; }
// --- Core Calculations --- // Actual Turnover Rate = Parties Served / Total Tables const actualTurnoverRate = partiesServed / totalTables;
// Theoretical Max Turnover Rate = Service Period (min) / Avg Meal Duration (min) const serviceMinutes = serviceHours * 60; const theoreticalMaxTurnover = serviceMinutes / avgMealMinutes;
// Seat Utilization Efficiency = (Actual / Theoretical) * 100 const seatUtilizationPct = (actualTurnoverRate / theoreticalMaxTurnover) * 100;
// Avg time between turns (turnaround/reset time implied) // Total table-time used = partiesServed * avgMealMinutes // Total table-time available = totalTables * serviceMinutes const totalTableTimeUsed = partiesServed * avgMealMinutes; const totalTableTimeAvailable = totalTables * serviceMinutes; const tableOccupancyPct = (totalTableTimeUsed / totalTableTimeAvailable) * 100;
// Implied avg turnaround time between parties // Each table had actualTurnoverRate turns; total time = serviceMinutes // Time per turn = serviceMinutes / actualTurnoverRate // Turnaround = time per turn - avgMealMinutes const timePerTurn = serviceMinutes / actualTurnoverRate; const impliedTurnaround = Math.max(0, timePerTurn - avgMealMinutes);
// Revenue opportunity: additional parties possible at theoretical max const additionalPartiesPossible = Math.max(0, Math.round((theoreticalMaxTurnover - actualTurnoverRate) * totalTables));
// --- Rating --- let ratingLabel, ratingClass, ratingAdvice; if (actualTurnoverRate >= theoreticalMaxTurnover * 0.85) { ratingLabel = "Excellent"; ratingClass = "calc-badge-green"; ratingAdvice = "Your tables are turning over at near-maximum efficiency. Focus on maintaining service quality while sustaining this pace."; } else if (actualTurnoverRate >= theoreticalMaxTurnover * 0.65) { ratingLabel = "Good"; ratingClass = "calc-badge-blue"; ratingAdvice = "Solid turnover rate. Small improvements in table reset speed or reservation pacing could push you toward excellent."; } else if (actualTurnoverRate >= theoreticalMaxTurnover * 0.45) { ratingLabel = "Average"; ratingClass = "calc-badge-yellow"; ratingAdvice = "There is meaningful room to improve. Review table reset times, reservation gaps, and peak-hour staffing."; } else { ratingLabel = "Below Average"; ratingClass = "calc-badge-red"; ratingAdvice = "Turnover is significantly below potential. Investigate long meal durations, slow table resets, or under-utilised seating capacity."; }
// --- Output --- resultDiv.style.display = 'block'; resultDiv.innerHTML = ` ### Table Turnover Results
Actual Turnover Rate ${actualTurnoverRate.toFixed(2)}x turns per table per service period
Theoretical Max Turnover ${theoreticalMaxTurnover.toFixed(2)}x based on meal duration & service hours
Seat Utilisation Efficiency ${seatUtilizationPct.toFixed(1)}% actual vs. theoretical capacity used
Table Occupancy Rate ${tableOccupancyPct.toFixed(1)}% of total available table-minutes used
Implied Avg Turnaround Time ${impliedTurnaround.toFixed(1)} min avg gap between parties per table
Additional Parties Possible ${additionalPartiesPossible} if operating at theoretical maximum
${ratingLabel} ${ratingAdvice}
#### Calculation Breakdown
Parties Served${partiesServed.toFixed(0)} Tables Available${totalTables.toFixed(0)} Service Period${serviceHours.toFixed(1)} hrs (${serviceMinutes.toFixed(0)} min) Avg Meal Duration${avgMealMinutes.toFixed(0)} min Actual Turnover Rate${partiesServed.toFixed(0)} ÷ ${totalTables.toFixed(0)} = ${actualTurnoverRate.toFixed(2)}x Theoretical Max Turnover${serviceMinutes.toFixed(0)} ÷ ${avgMealMinutes.toFixed(0)} = ${theoreticalMaxTurnover.toFixed(2)}x Seat Utilisation(${actualTurnoverRate.toFixed(2)} ÷ ${theoreticalMaxTurnover.toFixed(2)}) × 100 = ${seatUtilizationPct.toFixed(1)}%
`; }
.calc-result-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 12px; margin: 16px 0; } .calc-result-card { background: #f8fafc; border: 1px solid #e2e8f0; border-radius: 8px; padding: 14px; display: flex; flex-direction: column; gap: 4px; } .calc-result-card.calc-highlight { background: #eff6ff; border-color: #3b82f6; } .calc-result-label { font-size: 0.78rem; color: #64748b; font-weight: 600; text-transform: uppercase; letter-spacing: 0.04em; } .calc-result-value { font-size: 1.6rem; font-weight: 700; color: #1e293b; } .calc-result-sub { font-size: 0.75rem; color: #94a3b8; } .calc-rating-box { background: #f1f5f9; border-left: 4px solid #3b82f6; border-radius: 6px; padding: 14px 16px; margin: 16px 0; } .calc-rating-box p { margin: 8px 0 0; color: #334155; font-size: 0.9rem; } .calc-badge { display: inline-block; padding: 4px 12px; border-radius: 20px; font-size: 0.82rem; font-weight: 700; } .calc-badge-green { background: #dcfce7; color: #166534; } .calc-badge-blue { background: #dbeafe; color: #1e40af; } .calc-badge-yellow { background: #fef9c3; color: #854d0e; } .calc-badge-red { background: #fee2e2; color: #991b1b; } .calc-breakdown { margin-top: 16px; } .calc-breakdown h4 { margin-bottom: 8px; color: #1e293b; } .calc-table { width: 100%; border-collapse: collapse; font-size: 0.88rem; } .calc-table tr:nth-child(even) { background: #f8fafc; } .calc-table td { padding: 7px 10px; border: 1px solid #e2e8f0; color: #334155; } .calc-table td:last-child { text-align: right; font-family: monospace; } .calc-error { background: #fee2e2; border: 1px solid #fca5a5; border-radius: 6px; padding: 12px 16px; color: #991b1b; } .calc-error ul { margin: 6px 0 0 16px; }
#### Formulas Used
Actual Turnover Rate = Total Parties Served ÷ Total Tables Available
Theoretical Maximum Turnover Rate = Service Period (min) ÷ Average Meal Duration (min)
Seat Utilisation Efficiency (%) = (Actual Turnover Rate ÷ Theoretical Max Turnover Rate) × 100
Table Occupancy Rate (%) = (Parties Served × Avg Meal Duration) ÷ (Total Tables × Service Period in min) × 100
Implied Turnaround Time = (Service Period ÷ Actual Turnover Rate) − Avg Meal Duration
#### Assumptions & References
More Calculators
- Pool Evaporation & Water Loss Calculator
- Pool Turnover Rate Calculator
- Pool Energy Cost Calculator
- Pool Fence Compliance Calculator
- Pressure Washer Cleaning Unit Calculator
- Cleaning Service Cost Estimator
Read Next
Study Time Planner Authority Network America › Life Services Authority › National Calculator Authority .calc-container { max-width: 640px;...