---
title: CSV imports
category: integrations
order: 1
lastUpdated: 2026-06-08
featureAvailability: GA
roles: [admin]
navigationPath: Administration → Imports
serverFunctions: [importStaffCsv, importTeachersCsv, importStudentAssignmentsCsv]
relatedArticles: [administration/teachers, student-management/importing-students, administration/import-history, integrations/sis]
---

## At a glance

- **Who uses it:** Admins rostering staff and students.
- **When to use it:** At year start, periodically for mid-year deltas, or any time you don't (yet) have an SIS / LMS integration.
- **Permissions required:** Administrator.
- **Navigation path:** Administration → Imports (with subpages for Teachers, Students, Student assignments, Staff).

## Purpose

CSV import is the universal rostering path — it works regardless of which SIS or LMS you use, and it is the foundation underneath the supported integrations.

## The four importers

| Importer | Required columns | Purpose |
|---|---|---|
| **Teachers** | `email`, `full_name` | Create/update teacher directory and send portal invites |
| **Students** | `student_id`, `first_name`, `last_name`, `grade` | Create/update student records |
| **Student assignments** | `student_id`, `teacher_email` and/or `facilitator_email` | Attach students to staff |
| **Staff** | `email`, `first_name`, `last_name`, `roles` (pipe-delimited) | Create/update non-teacher staff with one or more roles |

Detailed column lists live on each importer's own article:

- [Managing teachers](/help/administration/teachers) — teacher CSV
- [Importing students](/help/student-management/importing-students) — student + assignment CSVs

## How an import is processed

1. **Upload** — you pick a file.
2. **Preview** — the platform parses headers, validates rows, and shows counts (new / update / error) without writing anything.
3. **Seat-cap check** — if the import would exceed your plan's seat or student cap, the import is blocked before writes happen.
4. **Confirm** — you accept the preview. Writes happen in a single batch.
5. **History** — a batch record is created. See [Import history](/help/administration/import-history).

## Encoding & formatting

- **UTF-8** strongly recommended — apostrophes and accented characters fail or render wrong in other encodings.
- **CSV** with comma separator (no semicolons, no tabs).
- **First row** is the header.
- **Quoted fields** OK; quote any field that contains commas.
- **Empty cells** are treated as "leave unchanged" on updates, not "set to null."

## Idempotency

Re-importing the same CSV is safe. Matching rows update; new rows create. The platform deduplicates by `email` (for users / teachers) and `student_id` (for students).

## Tips & best practices

- Always do a small (5–10 row) test import first when working from a new source system.
- Run **Teachers** before **Student assignments** — assignments fail when the referenced teacher emails don't exist yet.
- Keep your source spreadsheet under version control (a Google Sheet with edit history works) so you can compare what you sent.

## Common mistakes

- Mixed encodings (a UTF-8 file saved as Windows-1252 from Excel) — open and resave in a UTF-8-aware editor.
- Trying to set `email` to a different value on update — that breaks auth identity. Edit through the Users page instead.

## Related articles

- [Managing teachers](/help/administration/teachers)
- [Importing students](/help/student-management/importing-students)
- [Import history](/help/administration/import-history)
- [SIS integrations](/help/integrations/sis)

## FAQ

**Is there a row cap per import?**
There is no hard cap; large imports are processed asynchronously. Plan-tier seat caps still apply.

**Will an import overwrite my data if I make a mistake?**
Empty cells don't overwrite existing values. Cells with content do update. Test with a small batch first if you're nervous.
