Split a tip pool by hours worked
A pool of 100 split across shifts of 8, 6 and 4 hours pays 44.45, 33.33 and 22.22, and the amounts add back to the full pool to the cent. Enter the pool and each person's hours to get every share and percentage. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Total tip
- 100
- Total hours
- 18
This tip pool calculator distributes a shared gratuity among staff according to the hours each person worked. Enter the total pool and one record per employee, and it returns each person’s percentage and money allocation. The calculation uses cent-accurate reconciliation, so the individual payments always add back to the complete pool even when proportional shares create fractions of a cent. It is useful for restaurants, bars, cafés, salons, event teams, and any workplace whose pooling policy treats every eligible hour equally.
Prepare the pool and staff hours
Start with the final tip pool that is actually available for distribution. If your workplace removes card processing fees, manager exclusions, service charges, or another adjustment, apply that policy before entering the pool here. Then add each eligible staff member with a unique name and the number of hours that count under your policy.
Hours may include decimals, which is useful when time records contain quarter hours or minute-based totals converted to decimal form. Zero hours are allowed for an individual, but the combined hours across the list must be greater than zero. Keep the source time report beside the result so reviewers can trace every number.
This calculator assumes that one eligible hour has the same weight for every person. It does not apply job multipliers, points, seniority weights, shift premiums, or different front-of-house and back-of-house percentages. If your policy uses any of those rules, convert the records into weighted hours first only when that conversion is authorized and documented by your organization.
Accurate inputs matter more than elaborate arithmetic: verify the covered pay period, confirm that nobody is missing or duplicated, and make sure the pool and hours refer to the same period before calculating.
Understand proportional shares and cent rounding
The calculator adds all submitted hours, divides each person’s hours by that total, and multiplies the resulting proportion by the tip pool. For example, someone who worked one quarter of all eligible hours receives one quarter of the pool before currency rounding. Real allocations often produce fractions of a cent, so independently rounding every result can make the payments differ from the available pool.
To prevent that accounting mismatch, this tool first assigns the whole cents contained in every raw share. It then distributes the remaining cents to the staff records with the largest fractional remainders. When two remainders are exactly equal, their order in the submitted list provides a stable tie-breaker.
This largest-remainder method is deterministic and ensures that all returned tip amounts sum exactly to the rounded pool. The output also includes each person’s share percentage and the combined hours for inspection. Percentages are explanatory and rounded to six decimal places; the money allocations, not the displayed percentages, are the authoritative payment amounts.
The entered pool itself is rounded to the nearest cent because the output represents payable currency rather than unlimited-precision accounting values.
Review, document, and use the result
After calculating, compare the returned total hours with the figure from your timekeeping system and add the individual tip amounts to confirm they equal the returned pool. The tool preserves input order in the allocation list, which makes it easy to compare the result with a roster or payroll export. A person with zero eligible hours remains visible and receives zero, helping document that the record was considered instead of accidentally omitted.
Save the inputs, output, pay period, policy version, and reviewer name together when the calculation supports payroll or cash distribution. The calculator performs arithmetic only; it does not decide who may legally participate in a pool, whether overtime hours receive special treatment, how taxes should be withheld, or whether local labor rules permit a particular arrangement. Those decisions belong in a written policy reviewed for the relevant jurisdiction.
Correct timekeeping records should also be resolved before distribution rather than adjusted informally inside the result. The same deterministic calculation can be run in the browser for an immediate manual check without uploading a spreadsheet.
What you can do with it
Close a restaurant shift
Allocate the shift’s pooled gratuities across eligible servers, bartenders, and support staff using their recorded hours.
Prepare weekly payroll
Turn a weekly tip pool and approved time report into cent-accurate employee amounts that reconcile to the pool.
Audit a prior distribution
Recalculate proportional shares from archived hours and compare the deterministic output with payments already recorded.
FAQ
Can individual staff members have zero hours?
Yes. A zero-hour member receives zero, provided at least one other member has positive hours.
Will all allocations add up to the tip pool?
Yes. Fractional cents are reconciled with the largest-remainder method, so returned money amounts sum exactly to the pool rounded to cents.
Can I use weighted roles or points?
The calculator treats every hour equally. If your approved policy uses weights, prepare documented weighted-hour values before using the tool.
How is each person's share of the tip pool worked out?
Their hours are divided by the total hours of the whole team, and that proportion is applied to the pool. With 8, 6 and 4 hours out of 18, the first person receives 44.45 of a pool of 100.
Can I enter hours with decimals, such as quarter hours?
Yes. Hours can include decimals, which suits time records kept in quarter hours or minutes converted to decimal form. Keep the original time report next to the result so anyone can trace every figure.
Related tools
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/math/tip-pool-split-by-hours \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"total_tip":240,"staff":[{"name":"Avery","hours":8},{"name":"Blake","hours":6},{"name":"Casey","hours":4}]}'const res = await fetch("https://api.kit.forhosting.com/math/tip-pool-split-by-hours", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"total_tip": 240,
"staff": [
{
"name": "Avery",
"hours": 8
},
{
"name": "Blake",
"hours": 6
},
{
"name": "Casey",
"hours": 4
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/math/tip-pool-split-by-hours",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"total_tip": 240,
"staff": [
{
"name": "Avery",
"hours": 8
},
{
"name": "Blake",
"hours": 6
},
{
"name": "Casey",
"hours": 4
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/math/tip-pool-split-by-hours", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"total_tip":240,"staff":[{"name":"Avery","hours":8},{"name":"Blake","hours":6},{"name":"Casey","hours":4}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"total_tip":240,"staff":[{"name":"Avery","hours":8},{"name":"Blake","hours":6},{"name":"Casey","hours":4}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/math/tip-pool-split-by-hours", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"total_tip": 240,
"staff": [
{
"name": "Avery",
"hours": 8
},
{
"name": "Blake",
"hours": 6
},
{
"name": "Casey",
"hours": 4
}
]
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "math.tip_pool_split_by_hours",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |
Technical notes
Review, document, and use the result
For recurring workflows, the API costs $0.002 per request and returns structured JSON suitable for payroll preparation, reconciliation sheets, or an approval process.
Technical questions
What does it cost?
It is free to run in your browser, or $0.002 per API request.
What happens if total hours are zero?
The request returns an invalid_input error because no proportional allocation can be calculated when every staff member has zero hours.