The Bulk Import page (Settings > Bulk Import, or the “Import CSV” button on the Users or Schools list) lets you upload a users.csv file, a sites.csv file, or both at once. Each file is validated and shown in a preview — nothing is written to the database until you confirm.
If you upload both files together, sites are always processed before users, so a new user row referencing a school from the same upload can already resolve it.
Every upload keeps a history entry (Date/File, Uploaded By, Total Records, Result, Status) at the bottom of the Bulk Import page.
users.csv
How matching works
emailis the match key.- An email that doesn’t already exist creates a new account.
- An email that already exists updates that person’s name, status, and school — it never changes their role. Re-uploading a roster is not a way to grant or revoke admin access; role changes are made on the Users page itself.
- A new account never gets a visible password. It gets an email with a link to set its own password (valid 7 days).
- Any column not listed below is simply ignored, so your file can include extra columns from another system’s export without causing an error.
Columns
| Column | Required? | Description |
|---|---|---|
first_name |
Required | First name. |
middle_name |
Optional | Middle name. |
last_name |
Required | Last name. |
email |
Required | The match key — see above. |
site_name |
Optional | The exact school name as it appears in LicenseHubK12. Recorded for any role (shown on the Users page); required only when a new row is being created with the role School Administrator. |
status |
Optional | Active or Inactive. New accounts default to Active if left blank. For an existing account, leaving it blank leaves the current status unchanged. |
role |
Optional, not part of the standard roster export | Administrator, IT Administrator, Curriculum Administrator, School Administrator, or Viewer. Only used when creating a new account — a new account with no role column defaults to Viewer, the least-privileged role. Ignored for an existing account. |
Template
first_name,middle_name,last_name,email,site_name,status
Jane,,Doe,jane.doe@example.org,Calexico High School,Active
John,A,Smith,john.smith@example.org,Rockwood Elementary,Active
A downloadable copy of this template is available from the “Users Template” button on the Bulk Import page.
sites.csv
How matching works
site_codeis the match key. A code that already exists updates that school’s fields; a new code creates a new school. Re-uploading a refreshed site directory naturally syncs it — it will never error out on a duplicate code.
Columns
| Column | Required? | Description |
|---|---|---|
site_name |
Required | School name. |
site_acronyms |
Optional | Short nickname/abbreviation, e.g. CHS. |
site_cds |
Optional | State-assigned identifier (e.g. California’s County-District-School code). |
site_code |
Required | Unique code — the match key described above. |
site_address |
Optional | Street address. |
sitecity |
Optional | City. |
sitestate |
Optional | 2-letter state code. |
sitezip |
Optional | ZIP code. |
prnfirstn |
Optional | Principal’s first name. |
prnlastn |
Optional | Principal’s last name. |
email |
Optional | School office email. |
phone |
Optional | School office phone. |
site_type |
Required | One of: Elementary, Middle School, High School, Alternative, District Office, Other — or the shorthand ES, MS, HS (case-insensitive; normalized automatically). |
grades |
Optional, not part of the standard export | Comma-separated grades served, e.g. 9,10,11,12. |
student_count |
Optional, not part of the standard export | Enrollment count. |
Template
site_name,site_acronyms,site_cds,site_code,site_address,sitecity,sitestate,sitezip,prnfirstn,prnlastn,email,phone,site_type
Calexico High School,CHS,12345670123456,CHS-01,123 Main St,Calexico,CA,92231,Jane,Rivera,chs@example.org,7605551234,HS
Rockwood Elementary,RES,12345670654321,RES-02,456 Oak Ave,Calexico,CA,92231,Sam,Torres,res@example.org,7605555678,ES
A downloadable copy of this template is available from the “Sites Template” button on the Bulk Import page.
Uploading
- Go to Settings > Bulk Import (or click “Import CSV” from the Users or Schools list).
- Drag and drop
users.csvand/orsites.csvonto the upload area — or click it to browse for the file(s). You can upload one file or both together. - Review the preview. Each row is marked valid, warning (imported, but flagged for review), or error (never imported).
- Click Confirm import. Rows with errors are skipped; everything else is written to the database.
If anything looks wrong at the preview step, click Cancel — nothing is written until you confirm.
Common errors and warnings
| Message | What it means |
|---|---|
| “Missing required column(s): …” | The file’s header row is missing a required column name. Column names must match exactly (case-sensitive). |
| “’…’ is not a valid role. Must be one of: …” | The role column has a value that doesn’t match one of the five role names exactly (only checked when creating a new account). |
| “site_name is required for role School Administrator.” / “School ‘…’ does not exist in LicenseHubK12.” | A new School Administrator account needs a valid, exact, existing school name in site_name. |
| “A user with email ‘…’ already exists and will be updated (its role is never changed by import).” | Informational — this row will update the existing account’s name/status/school only. |
| “’…’ keeps its current role (…) - the role column is ignored for existing users.” | Informational — the role value in this row doesn’t match the account’s actual current role, but it’s ignored either way. |
| “School ‘…’ does not exist and will be ignored.” | The site name/code didn’t match anything in the system, so that field was skipped for this row. |
| “Duplicate email/code ‘…’ elsewhere in this file.” | The same email or site code appears twice in your file — only the first occurrence is kept. |