Designing Bulk User Onboarding for My Placement Portal: CSV Import, Email Automation, and Audit Logs
While working on the authentication module of my Placement Portal, I started thinking beyond the login page.
A university doesn't create student accounts one by one.
Every academic session, hundreds or even thousands of students join the institution.
Creating every account manually would waste hours of administrative effort.
That led me to my next architectural decision:
Build a Bulk User Onboarding module.
The Problem
Imagine a university admitting 2,000 students.
If an administrator has to manually:
- Create every account
- Generate passwords
- Send login credentials
- Track successful account creation
the onboarding process quickly becomes inefficient.
The system should automate these repetitive tasks while maintaining complete transparency.
My Proposed Workflow
The onboarding process begins with a simple CSV file uploaded through the Django Admin portal.
The CSV contains only two mandatory fields:
- Email Address
- User Role
The supported roles are:
- Student
- University
- Company
- Admin
Keeping the file structure minimal reduces the chances of human error and makes it easier for administrators to prepare data using spreadsheet software.
Validating Before Import
Before creating a single user, the uploaded CSV is validated.
The system checks for:
- Missing email addresses
- Invalid email formats
- Missing roles
- Unsupported role values
- Duplicate entries inside the uploaded file
If validation fails, administrators receive feedback before any records are written to the database.
This prevents partial imports and improves data quality.
Automatic User Creation
Once validation succeeds, the system processes each record individually.
For every row:
- If the user already exists, the record is skipped.
- If the user does not exist, a new account is created.
- A secure password is automatically generated.
- The user is assigned the specified role.
The administrator doesn't need to perform any additional actions.
Automated Email Notifications
Immediately after a successful account is created, the system sends an email containing:
- Login email
- Temporary password
- Instructions to log in
- Guidance for resetting the password
This mirrors the onboarding experience used by many universities and enterprise portals.
The goal is to ensure that new users can access the platform without manual communication from administrators.
Maintaining Complete Transparency
Automation is useful only if administrators can verify what actually happened.
To achieve this, every bulk upload is assigned a unique Batch ID.
Each processed record generates its own audit log.
The log captures:
- Unique Log ID
- Batch ID
- Assigned Role
- Generated Password
- Processing Status
- Remarks
- Created Timestamp
- Updated Timestamp
This makes every imported account traceable.
Tracking Email Delivery
Creating an account is only part of the onboarding process.
The administrator should also know whether the notification email was successfully delivered.
For every imported record, the system stores:
- Email Body
- Email Sent Status
- Email Delivery Remarks
This makes troubleshooting significantly easier if email delivery fails.
Building a Reusable Email Module
Instead of embedding email logic throughout the project, I plan to create a dedicated Email Service.
The module will provide:
- Reusable email templates
- Centralized email sending
- Consistent branding
- Future support for password resets
- Future support for notifications and alerts
This keeps the project modular and makes future features easier to implement.
What Comes Next?
Once users receive their credentials, the onboarding journey isn't complete.
The next feature on my roadmap is Password Reset.
Every newly created user should change their temporary password before using the system.
That will complete the onboarding lifecycle:
- Administrator uploads CSV
- User account is created
- Credentials are emailed
- User logs in
- User resets password
- User starts using the Placement Portal
Final Thoughts
One thing I've learned while building this Placement Portal is that software isn't just about writing code.
It's about reducing repetitive work for people.
If a university administrator can onboard thousands of users in minutes instead of hours, the software has delivered real value.
This is another architectural decision in my "Building the Placement Portal in Public" series, where I document not just what I build, but why I build it that way.