Distribute staff tips fairly based on hours worked.
Staff Name
Hours Worked
Distribution Summary
How Tip Pooling Works
Tip pooling is a common practice in restaurants, bars, and hospitality venues where all tips collected during a shift are combined into a single "pool." This pool is then redistributed among eligible staff members based on a predetermined formula—most commonly the pro-rata hours method.
The Pro-Rata Hours Formula
This calculator uses the following logic to ensure every staff member receives their fair share based on their time contribution:
Step 1: Sum the total hours worked by all eligible employees.
Step 2: Divide the Total Tip Pool by the Total Hours to find the "Hourly Tip Rate."
Step 3: Multiply each individual's hours by that Hourly Tip Rate.
Example Calculation
If your team collected $400 in tips and the hours worked were:
Server A: 8 hours
Server B: 8 hours
Busser: 4 hours
The total hours are 20. The hourly rate is $400 / 20 = $20/hour. Server A and B would each receive $160, while the Busser receives $80.
Legal Considerations
Under the Fair Labor Standards Act (FLSA), tip pooling is legal, but there are strict rules. Management and owners are generally prohibited from participating in the tip pool, even if they perform "line duties." Ensure your pooling policy is documented and follows local state labor laws, as some states have more restrictive requirements than federal guidelines.
function addStaffRow() {
var table = document.getElementById("staffBody");
var row = table.insertRow();
var cell1 = row.insertCell(0);
var cell2 = row.insertCell(1);
var cell3 = row.insertCell(2);
cell1.innerHTML = ";
cell2.innerHTML = ";
cell3.innerHTML = '';
}
function removeStaffRow(btn) {
var row = btn.parentNode.parentNode;
row.parentNode.removeChild(row);
}
function calculateTipPool() {
var totalPool = parseFloat(document.getElementById("totalPool").value);
var names = document.getElementsByClassName("staff-name");
var hours = document.getElementsByClassName("staff-hours");
var resultsArea = document.getElementById("resultsArea");
var individualResults = document.getElementById("individualResults");
var summaryStats = document.getElementById("summaryStats");
if (isNaN(totalPool) || totalPool <= 0) {
alert("Please enter a valid total tip pool amount.");
return;
}
var totalHours = 0;
var staffData = [];
for (var i = 0; i 0) {
totalHours += h;
staffData.push({
name: name,
hours: h
});
}
}
if (totalHours === 0) {
alert("Please enter hours worked for at least one staff member.");
return;
}
var tipPerHour = totalPool / totalHours;
var resultsHtml = "";
for (var j = 0; j < staffData.length; j++) {
var share = staffData[j].hours * tipPerHour;
resultsHtml += '