Leave tracker for teams of 10 to 200
Every balance is backed by a ledger entry, so "why is my balance 12.5?" always has an answer.
Free for teams up to 5 · No credit card
Balances you can audit
Accrued
12.5
+0.63 this period
Available
8.5
4.0 pending
Used
6.0
this year
| 31 Jul | Accrual · semi-monthly | +0.63 | 12.50 |
| 19 Jul | Usage · 1 day, approved | −1.00 | 11.87 |
| 15 Jul | Accrual · semi-monthly | +0.63 | 12.87 |
| 15 Jun | Opening · prorated first year | +10.96 | 10.96 |
Every number is a sum of ledger entries — nothing stored that can drift.
A ledger, not a number in a column
Running balances drift. Ours is derived by summing immutable entries, so it can be recomputed from scratch at any time and every change has a date, an amount and a reason attached to it.
Balances you can audit
Accrued
12.5
+0.63 this period
Available
8.5
4.0 pending
Used
6.0
this year
| 31 Jul | Accrual · semi-monthly | +0.63 | 12.50 |
| 19 Jul | Usage · 1 day, approved | −1.00 | 11.87 |
| 15 Jul | Accrual · semi-monthly | +0.63 | 12.87 |
| 15 Jun | Opening · prorated first year | +10.96 | 10.96 |
Every number is a sum of ledger entries — nothing stored that can drift.
Accrual that shows its working
Fifteen days across twenty-four semi-monthly periods is 0.625 a cheque. The schedule is visible, the arithmetic is printed, and the nightly run is idempotent — running it three times produces exactly the same ledger.
Accrual that shows its working
Vacation · semi-monthly
24 periods / year15 days ÷ 24 pay periods = 0.625 per cheque
Tenure tiers step up on the service anniversary
0–2 yrs
10 days
3–5 yrs
15 days
6+ yrs
20 days
Hired in June, correct on day one
Twenty days times two hundred days present divided by three hundred and sixty-five is 10.96. That calculation is automatic and shown in the interface. The market leader's own users report doing it by hand.
Hired mid-year, correct on day one
Sara Malik
Hired 15 June 2026
10.96
days opening balance
How that is worked out
The market leader's own users report this as broken and calculated by hand. Here it is automatic, and the working is printed under the balance.
Carryover and expiry, both on the record
At year end the balance is capped and carried, and the difference is written as an explicit expiry entry rather than quietly disappearing. Carried days can expire after N days if your policy says so.
Year end, settled and shown
31 December closing
cap 5 days12.0 carried
5.0 expired
7.0
Both entries hit the ledger
Nothing vanishes silently — "where did my days go?" has an answer.
How this compares
The honest version. We are not the simplest tool in this category and we do not try to be.
| Leave tracker | Typical | PTODesk |
|---|---|---|
| How the balance is stored | A running total | Summed ledger entries |
| Recomputable from history | No | Yes, at any time |
| Mid-year proration | Often manual | Automatic, arithmetic shown |
| Expired days | Silently removed | Explicit expiry entry |
| Re-running the accrual job | Risks double-credit | Idempotent by design |
Questions
Why does it matter how the balance is stored?
Because when it is wrong you need to find out why. A stored total can only tell you what it is now. A ledger tells you every event that produced it, which is the difference between answering an employee and guessing.
What happens if the nightly accrual runs twice?
Nothing. Every posting carries a period key with a unique constraint behind it, so a second run for the same period is skipped rather than double-credited.
Can we set opening balances when we migrate?
Yes — they are posted as an opening-balance entry with a note, so the ledger starts with an explicit, auditable statement of where each person stood on day one.
Plans
Retire the PTO spreadsheet this week
Import your team from a CSV and go live in under an hour.
Try for free