The bulk import tool lets you onboard dozens or hundreds of employees in a single operation by uploading a filled Excel (.xlsx) file. Rows that fail a check are skipped and reported, while the valid rows are imported.
When to Use Bulk Import
- Initial setup: Migrating from a legacy HRMS, spreadsheet, or paper records into Octal HR
- Seasonal hiring: Onboarding a large intake of contract or seasonal workers at once
- Branch rollout: Adding all employees from a newly acquired branch or subsidiary
- Annual class hire: Graduate or trainee cohorts joining on the same date
For fewer than 10 employees, manual entry via HR → Employees → + New Employee is usually faster than preparing and uploading a spreadsheet.
Download the Import Template
Always start from the official template — it includes column headers, data-validation drop-downs (for Gender, Employment Type, and Status), and an example row. Required columns are shown with a blue, bold header. Do not add, remove, or reorder columns; the importer reads by column position.
The template includes an example row in row 2 showing the expected format for every column. Delete this row before uploading your actual data.
Required Fields
These columns must be filled for every row. Rows with a missing or invalid required value are skipped, and the reason is reported after the import.
| Column | Format / Accepted Values | Example |
|---|---|---|
| Employee Code Required | Text; unique per employee | EMP-001 |
| First Name Required | Text | Ali |
| Last Name Required | Text | Ahmed |
| Employment Type Required | full_time / part_time / contract / intern | full_time |
| Status Required | active / inactive / terminated / on_leave | active |
Optional Fields
These columns enhance the profile and are recommended for complete records, but leaving them blank will not prevent import.
| Column | Format | Notes |
|---|---|---|
| Title Optional | Text | E.g., Mr / Ms / Dr |
| Gender Optional | male / female / other | Drop-down in the template |
| Date of Birth Optional | YYYY-MM-DD | Set later if unknown |
| National ID Optional | Text | CNIC or other national identifier |
| Email Optional | Valid email address | Must be unique; rows with a duplicate email are skipped |
| Phone Optional | Text | E.g., +92 300 1234567 |
| Address Optional | Text | Residential address |
| Join Date Optional | YYYY-MM-DD | Original date of joining |
| Confirmation Date Optional | YYYY-MM-DD | Date probation was confirmed |
| Department Optional | Must match an existing department name | Drop-down in the template |
| Designation Optional | Must match an existing designation name | Drop-down in the template |
| Work Location Optional | Text | E.g., Head Office |
Data Formatting Rules
- Dates: Use YYYY-MM-DD format. The importer also understands Excel's own date cells, but a plain YYYY-MM-DD string is safest.
- Employee Code: Must be unique. If a code already exists, the row is skipped unless Override existing records is turned on (see below).
- Email: Must be unique across employees. A row whose email already belongs to a different employee is skipped.
- Department and Designation names: Must match an existing name (case-insensitive). If a name doesn't match, create the department or designation first, then retry.
- Drop-down values: Employment Type, Status, and Gender use the drop-downs built into the template. Enter the lowercase values exactly as listed (e.g.,
full_time,active).
Override existing records
By default, a row whose Employee Code already exists is skipped. Turn on the Override toggle before uploading to update those existing employees with the values in your file instead.
Plan limit: New active employees can never push your active headcount above your plan's allowed limit. Once the limit is reached, further new rows are skipped (existing-employee updates are unaffected). Upgrade your plan to add more.
Upload the File
Skipped Rows
The importer processes every valid row and skips only the ones it can't accept. After the upload, each skipped row is listed with its row number and the reason. Common reasons include:
| Reason | Common Cause | Fix |
|---|---|---|
| Required field missing | Employee Code, First Name, or Last Name is blank | Fill in the missing value |
| Invalid Employment Type | Value is not full_time, part_time, contract, or intern | Use one of the accepted lowercase values |
| Invalid Status | Value is not active, inactive, terminated, or on_leave | Use one of the accepted lowercase values |
| Department / Designation not found | The name does not match an existing record | Create it first, or correct the spelling |
| Duplicate email | The email already belongs to a different employee | Correct or clear the email |
| Code already exists | An employee with that code exists and Override is off | Turn on Override to update, or change the code |
| Plan limit reached | Adding this active employee would exceed your plan's limit | Upgrade your plan, then re-import the skipped rows |
Post-Import Tasks
After a successful import, complete these steps to fully set up your employee records:
- Enable portal login — For employees who need self-service access, enable their login from the Employees area (see the self-service guide).
- Assign salary structures — Open each employee and assign a salary structure under the Employment tab.
- Set departments and designations — If any were left blank or not matched, set them now from each employee's profile.
- Map biometric IDs — If using a biometric attendance device, use the separate Biometric IDs import or map templates to the new employees.
- Run a test payroll — Process a trial payroll for the imported batch to confirm salary structures and deductions look correct before the live run.