,200. Free 20-min migration risk review.">

LMS Migration Without Losing a Single Grade

We move Moodle™, Blackboard, Canvas, and Brightspace sites with the grade history intact — and hand you a verification report that proves it. Senior engineers, published prices, Nashville-based, working US-wide.

A zero-data-loss LMS migration means grades, grade history, user accounts, and SCORM tracking all arrive intact — verified by row counts and checksums, not promises. Sternfast migrates sites in or out of Moodle from $1,200, with a byte-for-byte verification report, a fix-it-free guarantee, and 30 days of post-move support.

The part nobody warns you about

Why most LMS migrations quietly lose grade history

Content moves easily. Records don't. Every migration rescue we've been called into — and we've done plenty — traces back to one of three gaps that standard export tools simply don't cover.

1. SCORM packages don't carry runtime history. The .zip you export from Blackboard or Brightspace contains the course itself. The tracking data — cmi.core.lesson_status, cmi.completion_status, scores, attempt timestamps — lives in the platform's database and never travels with the package. Re-upload that package on the new platform and every learner starts from zero.

2. Most platforms have no historical-import API. Canvas will happily accept a current grade through its Submissions API. It has no endpoint for "this student scored 71% on attempt two in March 2024." Neither does Blackboard. Neither does Brightspace. If a vendor tells you history "comes across automatically," ask them to show you the endpoint. There isn't one.

3. Moodle keeps grade history — and its own backup tool skips it by default. Every change to every grade in Moodle is written to mdl_grade_grades_history. But course backups honor a site setting called backup_general_histories, and it ships disabled. A naive backup-and-restore migration drops every historical grade event without a single warning. Most shops never notice, because the current grades look fine.

For a school district or a compliance-training operation, that history is the audit trail. Losing it isn't cosmetic.

Book a free 20-minute migration risk review

Migrations start at $1,200 — agencies typically quote $2,000–$8,000 for the same scope. We reply within 1 business hour, or call (615) 396-7139.

Our process

How a zero-data-loss migration actually works

Five stages. The first three happen before your live site is touched at all.

1. Discovery

We inventory every table that holds learner records — grades, grade history, SCORM attempts, users, enrollments, courses — and record baseline row counts. That snapshot becomes the contract: these numbers must reconcile on the other side.

2. Mapping

Field-by-field map of where each data class lands on the destination. Anything the target platform can't hold natively gets an archive strategy, agreed in writing, before we move a byte. No surprises discovered after cutover.

3. Dry run

Full migration into a staging environment. We re-run the counts, checksum every course gradebook, and hand you the keys so your own instructors can click through before anything is scheduled.

4. Cutover

Maintenance window — usually under four hours, scheduled overnight or on a weekend. Final delta sync, URL switch, and a fresh verification pass before we unlock the doors.

5. Verification report

Source-versus-destination row counts, per-course grade checksums, and an exception log. You get the proof in writing, plus 30 days of post-move support.

See what's included at each tier

Under the hood

Anatomy of a grade-history-preserving migration

Here's the actual playbook for the most common case — moving a self-hosted Moodle site to new infrastructure or a new host. We're publishing it because most of it isn't secret; it's just tedious, and tedious is where shortcuts get taken.

  1. Baseline the source. Before anything else, capture the numbers you'll verify against later:
    SELECT COUNT(*) FROM mdl_grade_grades;
    SELECT COUNT(*) FROM mdl_grade_grades_history;
    SELECT COUNT(*) FROM mdl_scorm_scoes_track;
    SELECT COUNT(*) FROM mdl_user WHERE deleted = 0;
    Save the output. Both sides sign it.
  2. Pick the right method. A full-site clone — database dump plus the moodledata directory — preserves everything, including history and SCORM attempts. Per-course .mbz backups do not, unless backup_general_histories was enabled before the backups were made. Flipping it on afterward doesn't retroactively fix backups you already created. For anything beyond a handful of courses, we clone.
  3. Match versions, then upgrade. A database restore must land on the exact same Moodle version it came from — you upgrade after the move, not during. Sites still on 4.1 or 4.4 have been past security EOL since December 8, 2025, so we fold the upgrade into the same project: restore on the matching version, then step up to 4.5 LTS, which is supported into October 2027. We steer institutions away from 5.0 — its end-of-support lands this October, which makes it a strange target for a fresh migration.
  4. Dry run and checksum. Run the whole migration into staging. Re-run the baseline queries. Then, for each course, concatenate userid:finalgrade for every graded item, sort, and hash. Same hash on both sides means that gradebook survived byte-for-byte. Different hash means we find out why before you ever see the new site.
  5. Chase the mismatches. There are almost always a few: grade items pointing at long-deleted activities, mdl_scorm_scoes_track rows from abandoned attempts, users suspended mid-course years ago. This is the tedious part. It's also the whole job — every mismatch gets a documented explanation or a fix, never a shrug.
  6. Cut over. Enable maintenance mode, sync the moodledata delta, take a final dump, restore, repoint DNS, and run the verification pass one last time against the live database. Then unlock.

Honest caveat: if you're running a same-version Moodle site with under ~50 users, you can do this yourself in an afternoon — dump the database, copy moodledata, restore, run the count queries above. Where it gets genuinely hard is version jumps, cross-platform moves, and SCORM attempt data. That's where we earn the fee.

Directions we run

Migration paths, and what each one actually involves

In or out of Moodle — we don't care which direction the ship is sailing, only that nothing goes overboard.

DirectionWhat moves cleanlyThe hard partWhere the history goes
Moodle → CanvasCourse content, users, enrollments, current grades via APICanvas has no historical-grade import; question banks need restructuringSealed read-only archive of mdl_grade_grades_history (CSV + database extract), delivered with the report
Blackboard → MoodleCourse exports convert; Grade Center final grades importQuestion pools and adaptive-release rules need hands-on rework; SCORM attempts don't travel in exportsHistorical grade events archived; SCORM packages re-linked and re-verified in SCORM Cloud
MoodleCloud → self-hostedEverything — a full site archive restores complete, history includedGetting the archive and sizing the new server correctlyNothing to archive: mdl_grade_grades_history lands intact. The clean escape from the 750-user cap
Brightspace → MoodleContent via Common Cartridge; gradebook export → final gradesQuizzes and release conditions need rebuilding by hand, not scriptsHistorical grades archived in agreed format before cutover

MoodleCloud-to-self-hosted deserves the highlight: it's the one direction where full history preservation is straightforward, and if you land on our managed Moodle hosting, the migration itself is free. A different direction not listed here? Ask — the mechanics rhyme.

Pricing

What it costs — published, like everything else we sell

Agencies typically quote $2,000–$8,000 for a migration, usually without defining what "done" means. Our prices are on the page, and "done" means the verification report reconciles.

Small site

from $1,200

Up to 200 users. Full process — discovery, mapping, dry run, cutover, verification report — plus 30 days of post-move support. No abridged version.

Start with the free risk review

Mid-size site

$2,500–$4,500

The typical school, association, or training company. Exact quote after the risk review — the price moves with data complexity, not user count alone.

Get a fixed quote

Large or multi-site

scoped individually

Districts, multi-tenant setups, sites with years of SCORM attempt data. Scoped after discovery, priced before work begins, never open-ended.

See all published prices

Book a free 20-minute migration risk review

Twenty minutes, no obligation. You'll leave knowing your version path, your data risks, and a real number. We reply within 1 business hour.

Proof, not promises

The verification report you receive at handover

"Everything transferred fine" is not a deliverable. This is:

Row-count reconciliation for every learner-data table — source count, destination count, side by side, for grades, history, attempts, users, and enrollments.

Per-course grade checksums computed on both sides. Matching hashes are mathematical proof that a gradebook survived unchanged.

SCORM attempt counts per package. If a package was mistracking before the move, the report says so — and our $350 flat-fee SCORM repair can fix it, but we'll never let a pre-existing fault masquerade as migration damage, in either direction.

User account reconciliation — created, merged, and suspended accounts, each one accounted for by name.

Exception log — anything excluded or archived, why, and exactly where it now lives.

The guarantee, in plain words: if anything turns out to be missing after cutover, we fix it free. Every migration includes 30 days of post-move support for the small stuff that only surfaces in real use. And because grade data is student-record data, the whole process runs FERPA-aware, with a DPA template ready for your counsel — details on our compliance page.

LMS migration questions we actually get asked

How long does an LMS migration take?

Small sites: one to two weeks end-to-end, and most of that is dry run and verification, not downtime. Mid-size: three to six weeks. The cutover window itself — the only time your site is actually offline — is usually under four hours, scheduled overnight or on a weekend.

Will my learners lose their grades or course progress?

No. Current grades, grade history, and SCORM attempt data are all in scope, and the verification report proves they arrived. Where a destination platform can't hold something natively — historical grade events on Canvas, for example — it's archived in a format we agree on before cutover, never silently dropped.

Can you get us off MoodleCloud?

Yes, and it's one of our most common jobs — usually a site bumping against the 750-user cap. It's also the cleanest direction: a full MoodleCloud site archive restores with mdl_grade_grades_history intact. Migration is free if you land on our managed hosting, which starts at $79/month.

Do you migrate away from Moodle too?

Yes. Moodle-to-Canvas is the most requested. We're straight with you about the trade-off: no major platform offers a historical-grade import API, so history is preserved as a sealed read-only archive delivered alongside the migration rather than injected into the new gradebook.

Do we need to upgrade Moodle before migrating?

No — we fold the upgrade into the migration. If you're on 4.1 or 4.4, you've been past security end-of-life since December 8, 2025, and the move is the right moment to land on 4.5 LTS, which is supported into October 2027.

What happens if something is missing after the migration?

We fix it free — that's the zero-data-loss guarantee, and the verification report gives you the numbers to check us against. Every project also includes 30 days of post-move support for anything that only surfaces once real learners are back in the courses.

Next step

Find out what your migration would actually involve

The free 20-minute risk review is a working call, not a sales pitch. We look at your platform and version, flag where your data is most at risk in a move, and give you a straight answer on scope and price — useful even if you never hire us.

Book your free 20-minute migration risk review

We reply within 1 business hour. Prefer to talk now? Call (615) 396-7139 — Nashville-based, working with organizations across the US.

Further reading. Migrating because your Moodle version went end-of-life? Start with Moodle 4.1 and 4.4 are end-of-life: your three upgrade paths — it maps the costs before you commit.