Migrating 3,400 Learners and Their Course History Off a Legacy LMS
- Client
- An education provider running certification courses online
- Industry
- Education / E-learning
- Engagement
- Project engagement
- Involved
- Moodle WordPress LearnDash MySQL Custom migration scripts
The situation
An education provider was moving its certification training from a legacy Moodle installation to a modern WordPress platform running LearnDash. The catch was history. Roughly 3,400 existing users held enrollments, progress records, quiz scores, and completions in Moodle, and that history mattered for recertification. The interim workaround, granting every legacy user blanket access to a single certification course, threw away the per-user record entirely. Standard migration tools could not map the data faithfully.
What I did
This was a database archaeology project. I analyzed the Moodle schema to untangle the relationships between its user, enrollment, module completion, and grade tables, then designed a field-by-field mapping onto WordPress users and LearnDash’s course, lesson, quiz, and progress structures.
I wrote custom migration scripts to extract user profiles, enrollments, and granular progress from Moodle, create or synchronize the corresponding WordPress accounts, and programmatically populate LearnDash: assigning courses, marking lessons and topics complete, and writing quiz results and overall progress for each of the 3,400 users based on their Moodle history. Because of the record volume, the scripts worked directly against the database with integrity checks rather than through slower plugin import paths. A validation pass confirmed that migrated users could log in and see their historical progress accurately in the new system.
The outcome
Learners arrived on the new platform with their history intact: no lost completions, no re-taking courses already passed, and a clean basis for recertification. The provider retired the legacy system without the data loss that usually makes organizations afraid to leave old platforms.
Dealing with something similar?
Start a conversation