How it works
- Switch on the Leave Ledger first, because opening balances are posted into it.
- Choose Opening leave balances in Data Import and prepare one row per employee and leave type.
- Each row needs the employee ID, the leave type as a code or name such as CL or Casual Leave, and the balance in days.
- Add an as-on date if the balance is valid from a particular day; a blank date means today.
- The row check flags unknown employee IDs, leave types that do not exist, balances outside 0 to 366 days, more than two decimals and repeats in the file.
- Anyone who already has an opening balance for that leave type is skipped; change it with a leave adjustment instead.
What you can set
- Columns: employee ID, leave type, opening balance in days, balance as on, note.
- Leave type: the code or name of an existing leave type.
- Balance: 0 to 366 days, up to 2 decimals, such as 6.5.
- As-on date: optional, and a blank date uses today.
- One opening balance per employee and leave type.
- Posted to the leave ledger as an opening entry, noted as coming from Data Import.
- Needs the Leave Ledger switched on.
- Up to 10,000 rows.
Why opening balances need care
Leave balances are money: earned leave can be carried forward and encashed, and a balance that is too high or too low will be paid out wrongly one day. Under the OSH Code, a worker earns annual leave with wages and may carry forward up to 30 days, as explained in the leave entitlement rules. Carrying the closing balance from the old system exactly, with the date it was valid on, keeps the ledger honest from its first entry, and every later accrual, debit and lapse builds on it.
Worked example: switching systems on 1 April
A pharma distributor in Lucknow moves to ZeniaHR on 1 April 2026. HR freezes leave in the old system on 31 March and exports closing balances. For employee EMP-0104, the sheet has three rows: CL 3, SL 5.5 and EL 18, each with the as-on date 01/04/2026. After import, her ledger starts with those three opening entries. With the default leave types, the April accrual adds 1 day of CL, 0.5 of SL and 1.5 of EL, so her balances become 4, 6 and 19.5. When she applies for leave in May, the live preview uses these figures.
A careful cut-over
Treat the leave cut-over as a small project with an owner, a date and a check at the end. Balances carried wrongly are hard to explain months later, when the old system has been switched off and nobody remembers the closing figures.
- Stop leave approvals in the old system on the cut-over day.
- Use the same leave codes in the sheet as in ZeniaHR, such as CL, SL and EL.
- Share each employee's opening balance with them in the first week.
- Correct any mistake with a leave adjustment, not a second opening balance.
See opening leave balance import in a demo
We show it on a video call with your own shifts, leave types and rules. Free for your first 50 employees.
Book a free demoSee pricingFrequently asked questions
How do I carry forward leave balances from my old HR system?
Export each employee's closing balance per leave type from the old system, put one row per employee and leave type in a sheet with the employee ID, leave type and days, and import it as Opening leave balances. The Leave Ledger must be switched on first, since the balances are posted into it.
Can I import half-day leave balances?
Yes. Balances can have up to two decimals, so 6.5 or 2.25 are accepted. Values must be between 0 and 366 days. The row check flags anything outside these limits before the import, with the reason shown next to the row so it can be corrected.
What if I imported a wrong opening balance?
Correct it with a manual adjustment entry in the Leave Ledger rather than importing again. A second import for the same employee and leave type is skipped on purpose, so a balance is never counted twice. The adjustment stays visible in the ledger history with its note.
Do I need the Leave Ledger switched on to import balances?
Yes. Opening balances are entries in the Leave Ledger, so the import stops with a clear message if the ledger is off for your company. Switch it on from the Leave Ledger page, check that your leave types exist, then run the import.