How to Migrate PTO Data Without Losing the Balances
A step-by-step migration: reconcile first, pick a clean cut-over date, import rather than retype, and handle the requests already approved but not taken.
Migrations fail in a predictable way. Not with an error message — with a balance that is quietly two days wrong, discovered nine months later by the person it belongs to.
The technical part is easy. Every tool worth using will read a spreadsheet. The part that goes wrong is everything around it: which numbers you carry over, what happens to time already booked, and whether anybody checked the figures before they became the new source of truth.
Step 1: Reconcile before you move anything
This is the step people skip, and it is the one that matters.
Do not migrate the balance your spreadsheet currently shows. Recalculate it, for every person, from first principles:
Start with the rule. Annual allowance, accrual method, start date, and any carryover brought in.
Add what they earned. Periods elapsed multiplied by the per-period rate — or hours worked divided by the ratio, if you accrue per hour. The PTO accrual calculator will do this quickly.
Apply the cap. On the running total, not the period. A cap applied per period limits how fast a balance grows but never stops it, and this is the single most common source of drift in a hand-built tracker.
Subtract what they took. From the record of days actually taken, not from a running balance someone has been editing.
Where your recalculated figure and the spreadsheet disagree, the spreadsheet is usually wrong — but not always, and the difference is worth understanding before you carry it forward.
Have people confirm their own number
Step 2: Decide what actually moves
You do not need everything.
| Data | Migrate? | Why |
|---|---|---|
| People, emails, departments | Yes | The roster is the system |
| Current balances | Yes | The whole point |
| Carryover brought in | Yes | Affects this year's cap |
| Approved future bookings | Yes | See step 3 |
| Full history of past leave | Usually no | Keep the old file instead |
| Approval trails from email | No | Not reconstructable anyway |
Full history is the item people agonise over and rarely need. Keeping the old spreadsheet read-only as a historical record is faster, costs nothing, and answers the same questions.
Step 3: The approved-but-not-taken problem
This is the item most commonly dropped, and it causes the most visible failure.
Someone was approved in March for two weeks in September. If that booking does not make it into the new system, the calendar shows them available, someone else books the same period, and the new tool has produced exactly the clash it was bought to prevent — in its first month.
Before go-live, list every approved booking with a start date in the future and enter them. It is usually a handful of rows and it is the difference between the new system being trusted and being second-guessed.
Step 4: Pick a clean cut-over date
| Cut-over point | Difficulty | Notes |
|---|---|---|
| Start of leave year | Easiest | Opening balances are simple, accrual starts fresh |
| Start of a pay period | Easy | Accrual maths stays clean |
| Mid-period | Workable | You must decide who owns the part-period accrual |
| Mid-year, mid-period | Hardest | Every balance is a partial calculation |
If you are switching mid-period, decide explicitly whether the old system or the new one accrues for that period. Both is a double credit; neither is a silent loss. Write the decision down — it will be asked about.
Step 5: Import rather than retype
Retyping a roster is slow and introduces errors precisely where they are most expensive.
Most tools read a spreadsheet with a header row containing a name and an email. Importing an existing sheet carries departments, allowances and carryover across, shows a preview of everyone who would be invited, and reports bad rows individually rather than rejecting the file.
Two practical notes:
- Delete the sample rows if your file came from a downloaded template. They usually use
@example.comaddresses that can never receive mail, and importing them sends invitations that bounce. - Check the preview before confirming. Nothing should send until you have read the list. If a tool imports without showing you first, that is worth knowing before you use it for anything else.
Step 6: Do not run both systems in parallel
The instinct is to keep the spreadsheet updated for a month "just in case". It is the wrong instinct.
Two live systems means two answers to the same question, and the moment they disagree — which is immediate — nobody knows which to believe. Worse, updating both is a chore that gets dropped in week two, silently, leaving a stale file that still looks authoritative.
Cut over properly. Keep the old file read-only, clearly marked, and answer historical questions from it.
Step 7: Tell people what changed
The migration is not finished when the data is in. Send one short message covering:
- Where to check their balance now
- How to request time off from today
- What their opening balance is, and that it was reconciled
- Where the old records live if they want to check something
Skipping this produces the most avoidable outcome of all: a correctly migrated system nobody uses, while requests keep arriving by chat.
A realistic timeline
For a team under thirty people:
- Reconcile balances — half a day
- Confirm figures with staff — two or three days of waiting
- Import and enter future bookings — under an hour
- Announce and cut over — one message
The waiting is the long part, and it is the part worth not rushing. Everything else is an afternoon.
When to switch from a spreadsheet covers whether you should be doing this at all, and why spreadsheets break for PTO covers the failure modes you are migrating away from.
Frequently asked questions
What is the best time of year to switch PTO systems?
The start of a leave year is cleanest, because opening balances are simple and accrual starts fresh. The start of a pay period is the next best. Mid-period switches work but require you to decide which system owns the part-period accrual.
Should I import historical time off or just current balances?
Current balances plus any approved future bookings, at minimum. Full history is nice but rarely worth the effort — keep the old file read-only as the historical record instead, which is faster and just as defensible.
What do I do about requests approved but not yet taken?
Enter them in the new system before go-live. They are the most commonly dropped item in a migration, and dropping them means the calendar shows people as available when they are not, which is exactly the failure the new system was meant to prevent.
How do I make sure the new balances are right?
Reconcile before you migrate, not after. Recalculate every balance from the accrual rule and the record of days taken, then have each employee confirm their own figure. A balance nobody has checked is not a starting point, it is an assumption.