Admin GuidesData Import (Switcher)

Data Import — Switcher Program

Who this guide is for: Tenant admins moving to EmbayLMS from another LMS who need to bring over their users, course enrollments, and historical completion records via CSV.


Overview

The Switcher Program lets you import nine kinds of data from any other LMS using plain CSV files — no per-vendor connectors. Imports are platform-agnostic: export to CSV from Moodle, Canvas, TalentLMS, Docebo, Cornerstone, Absorb, or anything else, match the columns below, and upload. The nine entities are: users, groups, group members, categories, learning paths, path courses, enrollments, completion history, and path enrollments.

You can import each entity from its own CSV, or fill one multi-tab workbook (one sheet per entity) and upload it all at once — see Multi-tab workbook below.

Every import runs in two steps:

  1. Validate (dry run) — we parse your file and show a preview with a per-row error list. Nothing is written until you confirm.
  2. Confirm — valid rows are applied in the background; you get an email when it finishes, and any failed rows can be downloaded as an error CSV to fix and re-upload.

Imported records are tagged source = import so reporting can tell historical data from native activity, and imported completions keep their original completion dates.


Prerequisites

  • The admin role (Settings → Data Management → Data Import requires it).
  • Your courses already exist in EmbayLMS with a slug (or external ID) set, so enrollment and completion rows can resolve to them.
  • A CSV file (UTF-8). Excel “Save As → CSV UTF-8” works; a BOM is handled automatically.

Step-by-step

  1. Go to Settings → Data Management → Data Import.
  2. Choose what you’re importing: Users, Enrollments, or Completion history.
  3. Click Choose file and select your CSV, then Validate.
  4. Review the preview: total rows, valid rows, and any rows with errors (with the reason).
  5. If there are errors, fix them in your CSV and re-upload. When you’re happy, click Import N rows.
  6. Wait for the confirmation (or check Import history later). For failed rows, click Download errors to get a CSV of just those rows with their error messages.

CSV formats

external_id is the primary matching key; email is the fallback. Provide at least one.

Users (users)

ColumnRequiredNotes
external_idone ofSource-LMS user ID — the stable dedup key
emailone ofUsed to match when external_id is absent; required to create a new user
first_nameno
last_nameno
rolenolearner (default), author, manager, admin
localenoen (default) or fr-CA
manager_external_idnoexternal_id of this user’s manager (resolved after all users are created)
group_namesnoPipe-separated, e.g. `Sales
external_id,email,first_name,last_name,role,locale,manager_external_id,group_names
e-1001,jdoe@acme.com,Jane,Doe,learner,en,e-1000,Sales|Ontario
e-1000,boss@acme.com,Pat,Lee,manager,en,,Sales

New users are created without sending an activation email — this is a historical backfill. Invite them through normal user management when you’re ready.

Enrollments (enrollments)

ColumnRequiredNotes
external_id / emailone ofIdentifies the learner
course_slugyesMatched against the course slug, then external ID
statusnoactive (default), completed, dropped, expired
due_datenoISO 8601, e.g. 2025-03-31
email,course_slug,status,due_date
jdoe@acme.com,whmis-2024,active,2025-03-31

Completion history (completions)

ColumnRequiredNotes
external_id / emailone ofIdentifies the learner
course_slugyesMatched against slug, then external ID
completed_atyesISO 8601 — the original completion date, preserved as-is
scorenoNumeric
email,course_slug,completed_at,score
jdoe@acme.com,whmis-2024,2023-05-01,92

A completion with no existing enrollment auto-creates a completed enrollment so the transcript and compliance evidence are intact.

Groups (groups)

Dedup key: name.

ColumnRequiredNotes
nameyesGroup name — the dedup key
descriptionno
typenostatic (default) or dynamic

Group members (group_members)

Maps users into groups. Import users and groups first.

ColumnRequiredNotes
group_nameyesMust match an existing group
external_id / emailone ofIdentifies the learner

Categories (categories)

Dedup key: slug.

ColumnRequiredNotes
slugyesUnique slug — the dedup key
nameyesDisplay name
descriptionno
parent_slugnoSlug of the parent category (for a hierarchy)
order_indexnoSort order (number)

Learning paths (learning_paths)

Dedup key: title. New paths are created as draft and hidden so an import never publishes a path by surprise.

ColumnRequiredNotes
titleyesPath title — the dedup key
descriptionno
statusnodraft (default), published, archived

Path courses (path_courses)

Maps courses onto a path. Import learning paths and the courses first.

ColumnRequiredNotes
path_titleyesMust match an existing path
course_slugyesMatched against course slug, then external ID
order_indexnoPosition on the path (number, default 0)
is_requirednotrue (default) / false (also yes/no, 1/0)
prerequisite_course_slugnoCourse that must be completed first

Path enrollments (path_enrollments)

Enrolls users onto a path. Import learning paths and users first. Path completion stays derived from course completions — this only records the enrollment.

ColumnRequiredNotes
path_titleyesMust match an existing path
external_id / emailone ofIdentifies the learner
statusnoactive (default), completed, dropped

Multi-tab workbook

For a full migration, use the workbook instead of nine separate uploads:

  1. Go to Settings → Data Management → Data Import → Multi-tab workbook and click Download workbook template. You get an .xlsx with one sheet per entity, each with the right headers (your tenant’s custom user fields are included on the Users sheet).
  2. Fill in the sheets you need — leave the rest empty.
  3. Upload the filled workbook. Each non-empty sheet is validated and shown with its row counts, then imported in dependency order (users → groups → group members → categories → learning paths → path courses → enrollments → completions → path enrollments) when you click Import N sheets.

The workbook headers always match the current CSV contract above — if a column is added to an import, the next template download includes it automatically.


Configuration reference

SettingValue
Max file size8 MB
EncodingUTF-8 (BOM tolerated)
Matching keysexternal_id (primary), email (fallback); courses by slug then external_id
Date formatISO 8601 (YYYY-MM-DD or full timestamp)
IdempotencyRe-running an import updates matched records instead of duplicating
AuditEvery import (create / confirm / complete) is written to the audit log

Troubleshooting

ProblemCause / fix
”Missing required column: …”Your header row is missing a required column. Compare against the tables above (download a template from the page).
”Unknown column: …”A header doesn’t match a known column — check spelling/case.
”Invalid email” / “Invalid date”Fix the cell format (lowercase email; ISO date).
”User not found” (enrollments/completions)The learner isn’t in EmbayLMS yet — run the Users import first.
”Course not found”The course_slug doesn’t match any course slug or external ID. Set the slug on the course, or correct the value.
”Learning path not found”The path_title doesn’t match an existing path. Import the learning paths sheet first, with matching titles.
”Group not found” (group members)Import the groups sheet (or run a Groups CSV) before group members.
”Prerequisite course not found”The prerequisite_course_slug must resolve to a course that exists.
Some rows imported, some failedClick Download errors on the history row to get just the failed rows + reasons, fix, and re-upload.
Manager not linkedThe manager’s row must be present in the same (or an earlier) Users import; managers are resolved after all users are created.
”No recognized data sheets in the workbook”Sheet names must match the entity keys (users, groups, …). Use the downloaded template rather than renaming sheets.