Skip to content

Migrating patrons and rosters to Lyra

The most important decision in migrating patrons isn’t how to load them — it’s where they come from. Get the source right and the rest is mechanical.

Your SIS is the source of truth, not your old ILS

Section titled “Your SIS is the source of truth, not your old ILS”

Your old library system holds a patron list, so the obvious move is to export it and import it into Lyra. Resist that instinct. In almost every school the real owner of student and staff data is your Student Information System (PowerSchool, Blackbaud, Veracross, FACTS / RenWeb, Sycamore, Gradelink, Senior Systems, Alma, and so on). Your old ILS holds only a downstream copy of that data — one that was loaded at some point and has been drifting from the SIS ever since, as students enrolled, withdrew, and moved up grades.

Pulling fresh from the SIS gives you cleaner, more current data, and — if you can sync — sets you up so the roster stays current on its own instead of becoming a manual chore every term. So prefer your SIS even though your old ILS has a roster sitting right there.

  1. OneRoster sync (preferred). If your SIS can publish a OneRoster v1.1 feed, connect Lyra to it once and your roster — students, teachers, and homerooms — stays current automatically. New students and withdrawals flow through on their own. See OneRoster roster sync to set it up, and ask your SIS administrator whether OneRoster is available for your school; availability varies by vendor and often has to be enabled on their side.

  2. A roster file from your SIS. When OneRoster isn’t available, export your roster from the SIS and assemble it into Lyra’s roster templates — as the workbook your SIS gave you (.xlsx or the older .xls), or as .csv files. This is still a SIS-sourced roster — the clean source — just loaded by hand. Roster import walks the whole path: what to export, how to reconstruct the student-to-homeroom-teacher link, and how to assemble the files, with the column-by-column contract in Roster import formats. Follow it; don’t rebuild it from here.

  3. A roster file from your previous ILS (last resort). Only if you genuinely can’t get to the SIS — no access, no cooperation, a system no one maintains anymore — fall back to the patron list in your old ILS. It works, but you’re importing the stale downstream copy, so plan to reconcile it against reality sooner rather than later. The rest of this page is about doing this well.

If your SIS is unusual, or your patron data is spread across more than one system, reach out and we’ll help you scope the move.

Preparing a roster file from an old-ILS export

Section titled “Preparing a roster file from an old-ILS export”

The mechanics are the same as any roster import — the only difference is that your raw data comes out of a library system instead of an SIS, which usually means messier patron-type values and homeroom stored as a plain string. Export your patron list and remap it toward Lyra’s two patron files — the importer takes the spreadsheet as it is, so there is nothing to convert:

  • Students (students.csv, or a sheet named Students) — identifier (a stable ID; reuse your old patron ID so re-imports match rather than duplicate), first_name, last_name, preferred_name, email, class_year (graduation year), barcode (leave blank to have one assigned, or reuse the old one so existing cards keep working), guardian_emails (semicolon-joined), and homeroom_identifier.
  • Faculty (faculty.csv, or a sheet named Faculty) — identifier, first_name, last_name, preferred_name, email (required — teachers sign in with an emailed code), and honorific.

What does and doesn’t come across, whichever source you use:

Comes through
Names, barcodes, IDsYes
Email addressesYes, if populated
Patron type (faculty / student / etc.)Collapsed to two: Student and Faculty. Everyone non-student (faculty, staff, volunteer) becomes Faculty. See Staff
Graduation yearYes, as class_year; Lyra computes current grade from this plus your school calendar. A current-grade column works too: map it to Grade (sets class year) when you import
Homeroom (as a flat string)Translated to Lyra’s first-class homeroom object; see the callout below
Preferred name / nicknameYes
Parent / guardian emailsYes, flattened into a single guardian_emails column on student rows (student-only; for notices)
Patron PINs / passwordsNo. These are stored hashed and aren’t exportable, and Lyra has no patron password anyway. Students sign in with a 6-digit emailed code or the optional pin (student-only); teachers use the code
Patron photosNo. Lyra doesn’t currently support patron photos

Whatever the source, load it with a setting: Dry run first. A dry run previews the full set of changes — added, updated, and removed patrons and homerooms — without touching anything, so you can confirm the numbers and check the homeroom assignments before committing. When the diff looks right, run it for real. The import workflow, validation errors, and replace-vs-update behavior are in Roster import.

An uploaded roster isn’t a one-time load: plan to re-run it at the start of each school year, and again mid-year for new and withdrawn students. Reuse the same identifiers and homeroom slugs so Lyra updates records rather than duplicating them, and choose setting: Update for an additions-only pass so patrons missing from the file aren’t treated as withdrawals. (With a OneRoster sync, this upkeep happens on its own.)