Employee PTO Tracker Spreadsheet: Accruals, Requests and Balances for a Small Team

Most small-business leave tracking falls over in the same place. It is not the vacation itself — it is the question three months later: how much does she actually have left? Somebody opens a spreadsheet, finds a column labelled “days remaining” that was last typed by hand in January, and nobody can reconstruct how the number got there.

The fix is not a better-looking grid. It is deciding that no balance in the file is ever typed — every one of them is derived from three logs: who works here, what they worked, and what they took. Once that is true, the balance is correct on a random Tuesday in October without anyone maintaining it.

Full walkthrough of the template used in this guide.

Here is how to build that, worked end to end on an eight-person team, including the part most templates skip entirely: attendance points that expire on their own.

The Worked Example

Everything below runs on the same invented business — Northgate Supply Co., eight people, a mix of full- and part-time. The wages, dates and policy numbers are made up; the arithmetic is the arithmetic. The as-of date is 31 March 2026, one quarter into the year.

Employee PTO Attendance Tracker spreadsheet - what's inside
Employee PTO Attendance Tracker spreadsheet - what's inside

The policy, set once and never re-typed:

Setting Value
PTO entitlement (full-time) 80 hours/year
Accrual method Per hour worked
Accrual rate 0.0385 hours of PTO per hour worked
Sick leave 40 hours, front-loaded 1 Jan
Personal leave 16 hours, front-loaded 1 Jan
Attendance point window Rolling 12 months
Warning thresholds 4 verbal · 6 written · 8 final · 10 termination review

The accrual rate is not a guess. It is 80 ÷ 2,080 — the annual entitlement divided by the hours in a standard full-time year. Set it that way and part-time staff prorate themselves with no second policy and no second formula, which you will see two tables down.

Layer One: Accrued, Taken, Remaining

One row per person. Hours worked comes from payroll, hours taken comes from the approved-request log, and both of the last two columns are formulas.

Employee Role Wage Hire date Hours worked YTD PTO accrued PTO taken Balance
Dana Whitfield Warehouse Lead $26.00 08 Apr 2019 520 20.0 8.0 12.0
Marcus Ellery Driver $23.50 13 Sep 2021 512 19.7 16.0 3.7
Nadia Osei CSR $19.75 06 Feb 2023 500 19.3 0.0 19.3
Tom Brennan Warehouse $19.00 04 Nov 2024 520 20.0 24.0 −4.0
Lena Kowalczyk Picker (24 hrs/wk) $18.25 16 Jun 2025 312 12.0 0.0 12.0
Ruben Diaz Driver $23.50 02 Feb 2026 336 12.9 0.0 12.9
Amara Boateng Office Admin $21.00 19 Mar 2018 496 19.1 12.0 7.1
Grant Sheppard Warehouse $19.00 25 Jul 2022 464 17.9 0.0 17.9

Three things in that table are doing real work.

Lena prorated herself. She works 24 hours a week, nobody wrote a part-time policy, and she has accrued 12.0 hours against a full-timer’s 20.0 — exactly 60%, exactly her share of a full-time week. That falls out of accruing per hour worked instead of per calendar month. The full accrual-rate arithmetic, including the per-pay-period and front-loaded alternatives, is here.

Ruben needed no proration either. He started 2 February. Under a front-loaded policy somebody would now be calculating eleven-twelfths of 80 hours and writing 73.3 into a cell. Under per-hour accrual he has simply worked fewer hours, so he has simply accrued less. There is no mid-year-hire formula because there is no mid-year-hire problem.

Employee PTO Attendance Tracker spreadsheet - feature detail
Employee PTO Attendance Tracker spreadsheet - feature detail

Tom is at minus four. He took 24 hours having accrued 20. That is not a bug to be clamped away with MAX(0, ...) — it is a genuine liability sitting on your payroll, and the only version of the sheet worth having is the one that shows it.

The formula behind the accrued column, in Excel or Google Sheets:

=MIN( Settings!$B$3, SUMIFS(Payroll!$C:$C, Payroll!$A:$A, $A2) * Settings!$B$5 )

Settings!B3 is the annual cap, B5 is the 0.0385 rate. The MIN is the accrual cap: without it, somebody working heavy overtime quietly accrues more than a year’s entitlement.

And the balance, which is the whole point of the file:

=C2 - SUMIFS(Requests!$E:$E, Requests!$A:$A, $A2, Requests!$D:$D, "Approved")

Note "Approved". Pending requests must not reduce the balance, or a request that gets denied permanently eats four hours of somebody’s leave. But pending hours should be visible somewhere, because a manager approving Friday needs to know two other people already have Friday pending.

Layer Two: The Request Log

One row per request, and it is the only place leave is ever recorded.

Employee PTO Attendance Tracker spreadsheet - feature detail
Employee PTO Attendance Tracker spreadsheet - feature detail

Date submitted Employee Type Dates off Hours Status
04 Jan 2026 Marcus Ellery PTO 12–13 Feb 16.0 Approved
22 Jan 2026 Amara Boateng PTO 09–10 Mar 12.0 Approved
02 Feb 2026 Tom Brennan PTO 23–25 Feb 24.0 Approved
18 Feb 2026 Dana Whitfield PTO 27 Mar 8.0 Approved
03 Mar 2026 Nadia Osei Sick 05 Mar 8.0 Approved
19 Mar 2026 Grant Sheppard PTO 06–08 Apr 24.0 Pending
20 Mar 2026 Lena Kowalczyk PTO 07 Apr 8.0 Pending

Grant’s pending request is the useful case. He has 17.9 hours accrued and has asked for 24. Approve it and he goes to minus 6.1. A sheet that shows the balance after a pending request — before anyone clicks approve — turns that from an awkward conversation in April into a two-second decision in March.

Two pending requests also land on the same week in April. That is a coverage problem, not a balance problem, and it is the seam where leave tracking meets rostering: the hours are available, the people are not.

Layer Three: Attendance Points That Expire Themselves

This is the part homemade trackers almost never get right, and it is the part that carries the most risk.

Most no-fault attendance policies assign points to incidents and expire each point a fixed period after the incident — usually twelve months. Adding points up is trivial. Rolling them off is where the errors live, because every single point has its own expiry date, and the total changes on days when nothing at all happened.

Northgate’s point values, set once on the Settings tab:

Incident Points
Late, under 15 minutes 0.5
Late, over 15 minutes 1.0
Left early without approval 1.0
Absent, called in 1.0
Absent, no notice 2.0
No call, no show 3.0
Approved leave / protected leave 0.0

Marcus Ellery’s incident log, scored as of 31 March 2026:

Incident date Incident Points Expires Active on 31 Mar 2026?
14 Feb 2025 Late, over 15 min 1.0 14 Feb 2026 No — expired
02 May 2025 No call, no show 3.0 02 May 2026 Yes
20 Nov 2025 Absent, no notice 2.0 20 Nov 2026 Yes
09 Jan 2026 Late, under 15 min 0.5 09 Jan 2027 Yes
06 Mar 2026 Left early 1.0 06 Mar 2027 Yes
Lifetime total 7.5
Active total 6.5

Lifetime 7.5, active 6.5, and only the second number means anything. At 6.5 Marcus has crossed the written-warning threshold and sits 1.5 points below a final written warning.

Now watch what happens with nobody doing anything. On 3 May 2026 the no-call-no-show ages out. Marcus drops from 6.5 to 3.5 — below the written threshold, below the verbal threshold — on a morning when he did nothing but turn up on time. If your tracker is a typed running total, it will still say 6.5 on that day, and a disciplinary conversation held on that number is one you should not be having.

The single formula that does the whole job:

=SUMIFS(Points!$D:$D, Points!$B:$B, $A2,
        Points!$A:$A, ">="&EDATE(Settings!$B$2, -12),
        Points!$A:$A, "<="&Settings!$B$2)

Settings!B2 is your as-of date. EDATE(as_of, -12) is exactly twelve months back. Change the as-of date to any day you like and every point total in the file re-scores itself for that day — which is how you answer “what did this look like when we issued the warning” six months later.

Whether that window should roll at all, or reset every January, changes the answer dramatically: scored on a calendar year instead, Marcus has 1.5 points and no warning — same person, same five incidents, five points apart.

One carve-out you cannot skip. Legally protected absence — leave covered by the FMLA, an ADA accommodation, state paid-sick-leave law, jury duty, military leave and similar — should not earn attendance points under a no-fault policy. That is the single most common way these systems create liability. Build a “protected / excused” flag into the incident log that forces the points to zero, so the exclusion is a checkbox rather than something someone remembers. This is a record-keeping article, not legal advice; run your written policy past an employment lawyer in your state before you enforce a ladder against anyone.

Layer Four: What the Absence Actually Cost

The last column most trackers are missing is money. Unscheduled absence has a cash cost, and it is not the same as the absent person’s wage.

Northgate lost 96 unscheduled hours in Q1. The quarter’s cash cost came to $3,354 — about $34.94 for every absent hour, on an average wage of $21.50. The full three-part calculation, including why the cover costs more than the absence, is worked out here.

Putting that number on the dashboard changes what the tracker is for. A points column is a discipline tool and people treat it like paperwork. A dollar figure next to it is a business number, and business numbers get attention.

The Thresholds Ladder

Four thresholds, and the file should surface them automatically rather than waiting for someone to scan a column:

Active points Action
4.0 Verbal warning, documented
6.0 Written warning
8.0 Final written warning
10.0 Termination review

The specific numbers matter far less than their relationship to your point values — a ladder of 4/6/8/10 means something completely different if a no-call-no-show is worth 3 points rather than 1. How to set the ladder so it fires when you actually intend it to is a policy-design question, and it is worth answering before anybody is sitting across the desk from you.

The Thing Worth Remembering

Every number in a leave tracker should be a formula. The moment one balance is typed by hand, the file stops being a record and becomes an opinion — and the disagreement you have three months later is not about the vacation, it is about the spreadsheet.

Accrue per hour worked and part-time and mid-year hires solve themselves. Derive balances from an approved-request log and nothing drifts. Expire points on a rolling window with a real date formula and the total is right on days nobody touched it. Flag protected leave as zero and the riskiest failure mode becomes a checkbox.

That is four decisions, made once, and after that the tracker maintains itself.


Featured on ReadySheetGo

Employee PTO, Attendance & Absence Point Tracker — $18.99

Nine ready-built tabs with 250+ formulas already written and tested, and a full worked example of twelve employees pre-filled so you can see it running before you type anything.

A Settings tab holds your company details, the as-of date, your editable point values and your four disciplinary thresholds — and the entire workbook reads from it, so changing a point value re-scores every employee at once. The Employee Roster holds your people, wages, hire dates and annual PTO, sick and personal entitlements. Time-Off Requests logs every request with approved / pending / denied status and a running balance-after preview for that leave type, so you can see what approving Friday actually costs before you approve it.

The Attendance Points tab is the incident log, and it is the reason this file exists: point values auto-fill from your Settings, and old or excused points expire to zero on their own on a rolling twelve-month window you control — the most error-prone part of any attendance policy, automated. PTO Balances returns accrued, taken and remaining for all three leave types for every employee, with accrual prorating from the hire date. The Absence Calendar is an incident heatmap by employee and month, so patterns surface without anyone hunting for them. The Dashboard returns active points, who is over a threshold, PTO taken, estimated absence cost and your absenteeism rate. Employee Summary prints a full single-employee record for the HR file or a 1:1.

Verbal, written, final and termination-review flags fire automatically as points accumulate. Absence cost is calculated at each person’s own wage rate. Nothing is password-locked — every formula is visible and editable. Works in Excel, Google Sheets and Apple Numbers. No macros, no add-ons, no per-seat subscription.

Get the Employee PTO, Attendance & Absence Point Tracker →

Frequently Asked Questions

What does an employee PTO tracker actually need to hold?

Six things per person and the rest is decoration: hire date, hourly wage, hours worked in the period, the annual entitlement for each leave type, every approved request with its hours, and every attendance incident with its date. From those six, a sheet can return accrued hours, hours taken, remaining balance, a separate balance for sick and personal, active attendance points on a rolling window, and the cash cost of unscheduled absence. A grid of names with a single 'days left' column typed in by hand is a note, not a tracker, because nothing in it recalculates when somebody works a short week.

Should sick leave and PTO be tracked in the same balance?

Track them as separate columns even if your policy pools them, because the two behave differently and you will eventually need them apart. Sick leave in many states carries its own accrual rate, its own carryover rules and its own rules about what you may ask for as proof, and paid-sick-leave law applies in some places where a general PTO policy is entirely voluntary. Merging them into one number makes it impossible to answer 'how much protected sick time does this person have left' without re-deriving it from the request log. Two columns cost you nothing; one column costs you an audit.

How do I handle a PTO balance that goes negative?

Decide in advance whether you allow it, then let the sheet show it rather than clamping it to zero. An employee who takes 24 hours in March having accrued 20 is at minus 4, which is a real fact about your payroll — they have been paid for time they have not yet earned, and if they leave in April, most policies treat that as recoverable from the final cheque only where state law and a signed agreement permit it. Hiding the negative behind a MAX(0, ...) makes the balance column look tidy and makes the liability invisible.

Can a spreadsheet replace HR software for time off?

For a team of roughly three to forty people, usually yes, because the hard part of leave tracking is arithmetic — accrual per hour worked, prorating a mid-year hire, expiring attendance points on a rolling window, carryover caps — and arithmetic is exactly what a spreadsheet does well. What a sheet cannot do is let staff submit a request from their phone, sync to a payroll provider, or enforce an approval chain. If the friction you feel is administrative routing, buy software. If the friction is that nobody can agree what the balance is, the sheet fixes the actual problem for a fraction of the cost.

Expire the Points for You — the Part Every Attendance Template Gets Wrong

The Employee PTO, Attendance & Absence Point Tracker — 9 ready-built tabs with 250+ formulas already written and tested, and a full worked example of 12 employees pre-filled so you can see it running before you type anything. A Settings tab holding your company details, the as-of date, your editable point values and your four disciplinary thresholds — verbal, written, final and termination review — which the entire workbook reads from, so changing what a no-call-no-show is worth re-scores every employee at once; an Employee Roster holding your people, wages, hire dates and separate annual PTO, sick and personal entitlements; a Time-Off Requests log recording every request as approved, pending or denied, with a running balance-after preview for that leave type so you can see what approving Friday costs before you approve it, and pending days counted separately so nothing gets double-booked; an Attendance Points incident log where point values auto-fill from your Settings and old or excused points expire to zero on their own across a rolling 12-month window you control — the most error-prone part of any attendance policy, automated, with an excused / protected flag that forces points to zero where they should never have applied; a PTO Balances tab returning accrued, taken and remaining for all three leave types for every employee, with accrual prorating from the hire date so part-timers and mid-year starters come out right without a second policy; an Absence Calendar heatmapping incidents by employee and month so patterns jump out; a Dashboard returning active points, who is over a threshold, PTO taken, estimated absence cost at each person's own wage rate and your absenteeism rate; and an Employee Summary that prints a full single-employee record for the HR file or a 1:1. The as-of date is an input you set rather than a hardcoded TODAY(), so you can re-score the team as of any date and see exactly what a record looked like when a warning was issued. Nothing is password-locked — every formula is visible and editable so it can match your own written policy. Works in Excel, Google Sheets and Apple Numbers, no macros and no add-ons.

View on Etsy — $18.99