Bulk Import
Adding employees one at a time is practical for small teams, but organizations onboarding dozens or hundreds of employees need a faster method. Udyamo HRMS provides a bulk import feature through the ImportsController that supports CSV and Excel file uploads with preview, validation, and error handling. This chapter covers importing employees, attendance records, and leave data.
Prerequisites
Required: Before importing employees in bulk, ensure the following are configured:
- Departments and Designations exist and match the values you will use in the import file
- Offices are set up with correct names
- Your import file uses the exact department, designation, and office names as configured in the system
Navigating to the Import Screen
- From the sidebar, click Employees.
- Click the Import button in the top-right area of the Employees list page.
- The Import page opens, displaying options for downloading templates and uploading files.

Import Types
Udyamo HRMS supports importing several types of data:
| Import Type | Description | Template Available |
|---|---|---|
| Employee Import | Bulk-create employee records with personal details, department, designation, office, CTC, and more | Yes |
| Attendance Import | Upload historical or corrected attendance records (date, check-in, check-out) | Yes |
| Leave Import | Import leave balances or historical leave records | Yes |
Employee Import — Step by Step
Step 1: Download the Import Template
- On the Import page, select Employee Import as the import type.
- Click Download Template.
- A CSV or Excel file downloads to your computer with pre-defined column headers.
Tip: Always use the downloaded template rather than creating your own file. The template contains the exact column headers the system expects, and using different headers will cause the import to fail.
Step 2: Understanding the Template Columns
The employee import template contains the following columns:
| Column | Required | Description | Example |
|---|---|---|---|
| first_name | Yes | Employee's first name | Priya |
| last_name | Yes | Employee's last name | Sharma |
| Yes | Unique work email | priya@example.com | |
| emp_id | Yes | Unique employee ID | EMP-001 |
| department | Yes | Must match an existing department name exactly | Engineering |
| designation | Yes | Must match an existing designation name under the department | Software Engineer |
| office | Yes | Must match an existing office name exactly | Mumbai HQ |
| date_of_joining | Yes | Format: YYYY-MM-DD | 2025-04-01 |
| worker_type | Yes | employee or contractor | employee |
| annual_ctc | Yes | Annual CTC in INR (numeric, no commas) | 600000 |
| status | No | active, inactive, or terminated. Defaults to active | active |
| date_of_birth | No | Format: YYYY-MM-DD | 1990-05-15 |
| gender | No | male, female, or other | female |
| aadhar_number | No | 12-digit Aadhar number | 123456789012 |
| pan | No | 10-character PAN | ABCDE1234F |
| phone | No | Phone number with country code | +919876543210 |
| bank_name | No | Name of the bank | State Bank of India |
| account_number | No | Bank account number | 12345678901234 |
| ifsc_code | No | 11-character IFSC code | SBIN0001234 |
| epf_number | No | EPF member ID | MH/BOM/12345/000/0001234 |
| esic_number | No | 17-digit ESIC number | 12345678901234567 |
| uan_number | No | 12-digit UAN | 123456789012 |
Step 3: Fill In Employee Data
- Open the downloaded template in a spreadsheet application (Excel, Google Sheets, LibreOffice Calc).
- Enter one employee per row.
- Ensure all required fields are filled.
- Save the file in CSV (.csv) or Excel (.xlsx) format.
Warning: Do not modify, rename, or delete the header row. The system uses the exact column headers to map data to fields.

Step 4: Upload the File
- On the Import page, click Choose File or drag and drop the file into the upload area.
- Select your prepared CSV or Excel file.
- Click Upload.
Step 5: Preview Before Import
After uploading, the ImportsController parses the file and presents a preview screen. This is a critical step that shows you exactly what will be imported.
The preview displays:
| Element | Description |
|---|---|
| Total rows | Number of employee records found in the file |
| Valid rows | Rows that passed all validation checks and are ready to import |
| Rows with errors | Rows that have validation issues and will be skipped unless corrected |
| Data table | A scrollable table showing each row with its parsed values |
| Error indicators | Red highlighting or error icons on rows/cells with issues |

Tip: Review the preview carefully. Pay special attention to rows highlighted with errors. This is your last chance to catch issues before records are created.
Step 6: Review and Resolve Errors
If any rows have errors, the preview screen displays the specific error for each problematic row.
Common validation errors:
| Error | Cause | Fix |
|---|---|---|
| "Email already exists" | An employee with this email is already in the system | Remove the duplicate row or use a different email |
| "Employee ID already exists" | The emp_id is already assigned to another employee | Assign a unique employee ID |
| "Department not found" | The department name does not match any existing department | Check the spelling and capitalization; create the department if needed |
| "Designation not found" | The designation does not exist under the specified department | Verify the designation exists under the correct department |
| "Office not found" | The office name does not match any existing office | Check the spelling; create the office if needed |
| "Invalid date format" | The date is not in YYYY-MM-DD format | Correct the date format |
| "Annual CTC is not a number" | The CTC field contains non-numeric characters (commas, currency symbols) | Remove commas and symbols; enter only digits |
| "Invalid worker type" | The worker_type value is not employee or contractor | Use one of the two accepted values |
You have two options:
- Proceed with valid rows only — Click Import to import all valid rows and skip error rows.
- Fix and re-upload — Download the error report, correct the issues in your file, and upload again.
Step 7: Confirm and Execute Import
- After reviewing the preview, click the Import or Confirm Import button.
- The system processes the import in a batch.
- A progress indicator shows the import status.
- Upon completion, a summary displays:
- Number of employees successfully created
- Number of rows skipped due to errors
- Link to download the error report (if any errors occurred)
Warning: The import process creates employee records and queues invitation emails for each new employee. Ensure you are ready for employees to receive invitations before importing.
Attendance Import
When to Use Attendance Import
- Migrating historical attendance data from a previous system
- Correcting attendance records in bulk
- Uploading attendance from an external time-tracking device that does not integrate directly
Attendance Import Template Columns
| Column | Required | Description | Format |
|---|---|---|---|
| emp_id | Yes | Employee ID (must match an existing employee) | EMP-001 |
| date | Yes | Attendance date | YYYY-MM-DD |
| check_in_time | Yes | Check-in time | HH:MM (24-hour) |
| check_out_time | No | Check-out time | HH:MM (24-hour) |
| working_hour | No | Total working hours (auto-calculated if check-out is provided) | Decimal (e.g., 8.5) |
Steps
- On the Import page, select Attendance Import.
- Click Download Template to get the attendance import template.
- Fill in attendance records — one row per employee per date.
- Upload the file.
- Review the preview. The system validates that each emp_id exists and dates are valid.
- Confirm the import.
Warning: Importing attendance for a date that already has a record for the same employee will either update the existing record or create a duplicate, depending on your system settings. Verify the behavior before importing to avoid duplicates.
Leave Import
When to Use Leave Import
- Migrating leave balances from a previous system at the start of a fiscal year
- Importing historical leave records for reporting continuity
Leave Import Template Columns
| Column | Required | Description | Format |
|---|---|---|---|
| emp_id | Yes | Employee ID | EMP-001 |
| leave_category | Yes | Must match an existing leave category name | Earned Leave |
| from_date | Yes | Leave start date | YYYY-MM-DD |
| to_date | Yes | Leave end date | YYYY-MM-DD |
| leave_type | No | full_day or half_day | full_day |
| reason | No | Reason for leave | Personal |
Steps
- On the Import page, select Leave Import.
- Download the template.
- Fill in leave records.
- Upload and preview.
- Resolve any errors (e.g., leave category name mismatches, invalid employee IDs).
- Confirm the import.
Tips for Clean Data
Following these practices minimizes errors during import:
- Use exact names — Department, designation, office, and leave category names must match the system configuration exactly, including capitalization and spacing.
- Consistent date format — Always use YYYY-MM-DD. Avoid regional date formats like DD/MM/YYYY or MM/DD/YYYY.
- No commas in numbers — Enter
600000, not6,00,000or600,000. - Trim whitespace — Remove leading and trailing spaces from all cells.
- Validate emails — Ensure all email addresses are properly formatted and unique.
- Check for duplicates — Remove duplicate rows before uploading. The system will flag duplicates, but it is faster to clean them beforehand.
- Test with a small batch first — Before importing hundreds of records, test with 5-10 records to ensure your template is correctly formatted.
- Save as CSV UTF-8 — If your data contains non-English characters (Hindi names, for example), save the file as CSV with UTF-8 encoding.
Tip: Keep a backup of your import file and the error report. If you need to re-import or investigate discrepancies later, these files serve as your audit trail.
Batch Processing and Performance
For large imports (500+ records), the system processes records in batches to maintain performance.
| Batch Size | Estimated Time | Notes |
|---|---|---|
| 1-50 records | Under 30 seconds | Processed immediately |
| 50-200 records | 1-2 minutes | Processed in background |
| 200-500 records | 2-5 minutes | Processed in background with progress indicator |
| 500+ records | 5-15 minutes | Processed in background; you will receive a notification upon completion |
Tip: You can navigate away from the import page while a large batch is processing. The import continues in the background, and you will see a notification when it completes.
Downloading Error Reports
If your import had errors:
- After the import completes, click Download Error Report.
- The report is a CSV file listing only the rows that failed, with an additional column showing the error message for each row.
- Correct the errors in the report file.
- Re-upload only the corrected rows.
Next Steps
- Send invitations to the newly imported employees — see Inviting Employees & Self-Service
- Complete employee profiles with additional details — see Employee Profiles
- Set up attendance tracking for imported employees — see Creating & Assigning Shifts