Tip Pooling Calculator

.tp-calc-container { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; max-width: 800px; margin: 20px auto; padding: 25px; border: 1px solid #e1e1e1; border-radius: 12px; background-color: #ffffff; box-shadow: 0 4px 6px rgba(0,0,0,0.05); } .tp-header { text-align: center; margin-bottom: 30px; } .tp-header h2 { color: #2c3e50; margin-bottom: 10px; } .tp-input-group { margin-bottom: 20px; padding: 15px; background: #f8f9fa; border-radius: 8px; } .tp-label { display: block; font-weight: 600; margin-bottom: 8px; color: #34495e; } .tp-input { width: 100%; padding: 12px; border: 2px solid #ddd; border-radius: 6px; font-size: 16px; box-sizing: border-box; } .tp-input:focus { border-color: #3498db; outline: none; } .tp-staff-table { width: 100%; border-collapse: collapse; margin-bottom: 20px; } .tp-staff-table th { text-align: left; padding: 10px; border-bottom: 2px solid #eee; color: #7f8c8d; } .tp-staff-table td { padding: 10px; vertical-align: middle; } .tp-btn { cursor: pointer; padding: 12px 20px; border: none; border-radius: 6px; font-weight: 600; transition: background 0.2s; } .tp-btn-add { background-color: #27ae60; color: white; margin-bottom: 20px; } .tp-btn-calc { background-color: #3498db; color: white; width: 100%; font-size: 18px; } .tp-btn-remove { background-color: #e74c3c; color: white; padding: 5px 10px; } .tp-results { margin-top: 30px; padding: 20px; background: #eef2f7; border-radius: 8px; display: none; } .tp-results h3 { margin-top: 0; color: #2c3e50; } .tp-result-item { display: flex; justify-content: space-between; padding: 8px 0; border-bottom: 1px solid #dcdde1; } .tp-article { margin-top: 40px; line-height: 1.6; color: #333; } .tp-article h3 { color: #2c3e50; margin-top: 25px; }

Tip Pooling Calculator

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 += '
' + '' + staffData[j].name + ' (' + staffData[j].hours + ' hrs)' + '$' + share.toFixed(2) + '' + '
'; } summaryStats.innerHTML = "Total Pool: $" + totalPool.toFixed(2) + " | Tip Rate: $" + tipPerHour.toFixed(2) + " / hour"; individualResults.innerHTML = resultsHtml; resultsArea.style.display = "block"; resultsArea.scrollIntoView({ behavior: 'smooth' }); }

Leave a Reply

Your email address will not be published. Required fields are marked *