v2026 CSV offering import
Prepare a v2026 CSV for Course and Resource imports. Upload files first, then reference their file IDs in outline_json.
Instructor imports create draft offerings. Publishing and review status changes are handled outside the CSV import flow. The CSV version marker lives in outline_json, while offering_version is saved on the offering record.
If external_id matches an existing offering, import can only initialize it when it has no outline. Existing outline content is blocked unless outline_json explicitly uses append_all to add new content.
Who can import
Only active instructors can validate and import offerings from this page. Admin-managed imports must use a separate admin workflow. Register as an instructor first.
Steps
Upload and copy file IDs
Upload files in File Manager, then copy each uploaded_file_id or prefilled outline file JSON.
Open File ManagerValidate and import
Upload the CSV in the instructor import wizard, validate, then execute.
Open import wizardReview result summary
Check generated external IDs, draft revision status, row-level warnings, and blocking errors in the import result.
Import limits
- This import supports Course and Resource offerings.
- Imported offerings are saved as drafts. Review and publishing happen after import.
- Use the v2026 template columns exactly. Extra or older columns are rejected.
- Use price_tier for the public list price.
- Use join_membership_plan for membership inclusion and join_platform_marketing_program for promotion eligibility.
- An existing external_id can be imported only when the offering has no outline content, unless you intentionally use append_all=true to append new content.
- Cover images are managed after import from the offering editor.
CSV fields
Optional CSV columns are patch fields. If a column is missing or a cell is empty, import keeps the existing value.
type_payload_json is also patch-based. Missing keys do not clear existing Course or Resource metadata.
To update an optional field, provide a non-empty value in that row.
To intentionally clear an existing optional field, use the offering editor after import.
external_idOptionalStable key for creating a new offering or initializing an existing empty-outline offering. Leave blank to generate one.
short_nameOptionalOptional shorter display name.
full_nameRequiredOffering title.
price_tierOptionalPrice tier, such as free, 0, or 19.99.
join_membership_planOptionalyes/no or true/false. Yes requests inclusion in the membership plan.
join_platform_marketing_programOptionalyes/no or true/false. Yes allows admin promotion rules to target this offering.
category_l1 / category_1RequiredTop category; used to infer Course or Resource.
category_l2 / category_2OptionalRequired only when category_l1 has active child categories.
category_l3 / category_3OptionalRequired only when category_l2 has active child categories.
languageOptionalLanguage code, such as en.
offering_versionRequiredOffering content version, saved to Offering.version.
type_payload_jsonOptionalCourse or Resource metadata JSON. Use abstraction and description inside this JSON.
outline_jsonRequiredVersioned modules, lectures, and uploaded files JSON.
Category rules
- Import resolves the category by active category names, not by category ID.
- category_l1 is always required and must be a supported top category such as Course or Resource.
- category_l2 and category_l3 are conditional: fill the next level only when the selected parent has active child categories.
- The final selected category must be the deepest active category in that branch.
- If validation says a category is missing or inactive, check spelling first. If the category does not exist or is inactive, ask an admin to create or activate it before importing.
outline_json
- CSV no longer has a top-level schema_version column.
- outline_json must include schema_version with value v2026.
- outline_json uses modules, lectures, and files.
- Each file item must include filename and uploaded_file_id.
- Supported lecture types: video lecture, online doc, download.
- If an existing external_id already has outline content, normal import is blocked. Use append_all only when you intentionally append new content.
- Resource downloads still use one module and one download lecture.
type_payload_json
- Long text fields such as description, welcome_message, and congrats_message can contain real line breaks inside a quoted CSV cell.
- Spreadsheet exports with multiline cells are supported; users do not need to type literal \n for paragraphs.
mode, subtitle, abstraction, description, what_you_will_learn, requirement, who_is_this_for, welcome_message, congrats_message
overview is not used by CSV import. abstraction is saved to Offering.abstract, and description is saved to Offering.description.
mode, abstraction, description, includes, catalogue
abstraction and description are saved on the shared Offering record.