Download classes as CSV, edit offline, then preview and commit updates. Columns match the staff round-trip format below (UTF-8 CSV or first sheet of Excel). The separate class report export is for reading only — instructor, enrolment and member price are not import fields.
Two files, both scoped by the filters below. Download CSV for re-import uses the staff import column layout — edit it and upload it back. Download class report adds instructor, enrolled/waitlisted and member price with separate date and 12-hour time columns, and is for reading only.
The class report cannot be uploaded back
Its instructor, enrolment, member price and split date/time columns are not import fields. The importer ignores unknown headers without complaining, so editing the report and uploading it would report “0 errors” and change nothing. Use Download CSV for re-import for any edit you intend to save.
Preview changes from CSV or Excel, then confirm to create or update classes by class_code.
Header row should use these column names (snake_case). Easiest path: use Export classes above, edit, then Preview import. You can also start from sample CSV.
Tip: Exports are UTF-8 with a byte-order mark (BOM) — that is what makes accented names read correctly in Excel and Numbers. Leave it in place: re-uploading an unmodified export works as-is, because the importer strips the BOM before matching headers. For Excel uploads, only the first sheet is read.
| Column | Required | Description |
|---|---|---|
| class_code | No | Stable upsert key. Leave empty only for new rows; must match an existing class to update. Export fills this for you. |
| name | Yes | Product / class display name. |
| language | No | e.g. Spanish, French. |
| level | No | e.g. A1, B2 (CEFR-style labels). |
| term | No | spring, summer, or fall (aliases: sp, su, fa). |
| semester_name | No | Must match an existing semester name, or use a creatable pattern like "Spring 2026" for new semesters. Required when creating a class without an existing class_code. |
| session_number | No | Integer session index. |
| session_name | No | e.g. Session 1. |
| days_of_week | No | Comma-separated: Mon, Wed or Tuesday, Thursday. |
| start_datetime | No | ISO-8601 recommended (matches export). Other strings are parsed with JavaScript Date where possible. |
| end_datetime | No | Same as start_datetime; must be after start when both set. |
| location_type | No | In-Person, Online, Hybrid (inferred from text if fuzzy). |
| room | No | Room or space name. |
| capacity | No | Max seats (integer). |
| min_capacity | No | Minimum enrollment (integer). |
| base_price_cents | No | Price in cents (integer), e.g. 35000 for $350. Alias header: price (mapped to cents in some parsers). |
| member_discount_percent | No | Legacy percent field. NOT used for class pricing — member price for classes comes from the fixed per-class session rates. Leave blank. (Existing non-blank values on older classes are dead data and are ignored at checkout.) To see the member price a class actually charges, use the class report export. |
| intensity | No | regular or intensive (partial text match). |
| active | No | true/false, yes/no, 1/0. |