Instructor CSV import

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

Step 1

Upload and copy file IDs

Upload files in File Manager, then copy each uploaded_file_id or prefilled outline file JSON.

Open File Manager
Step 2

Prepare CSV

Fill the v2026 columns. Put versioned content structure in outline_json.

Replace sample file IDs before importing.

Step 3

Validate and import

Upload the CSV in the instructor import wizard, validate, then execute.

Open import wizard
Step 4

Review 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_idOptional

Stable key for creating a new offering or initializing an existing empty-outline offering. Leave blank to generate one.

short_nameOptional

Optional shorter display name.

full_nameRequired

Offering title.

price_tierOptional

Price tier, such as free, 0, or 19.99.

join_membership_planOptional

yes/no or true/false. Yes requests inclusion in the membership plan.

join_platform_marketing_programOptional

yes/no or true/false. Yes allows admin promotion rules to target this offering.

category_l1 / category_1Required

Top category; used to infer Course or Resource.

category_l2 / category_2Optional

Required only when category_l1 has active child categories.

category_l3 / category_3Optional

Required only when category_l2 has active child categories.

languageOptional

Language code, such as en.

offering_versionRequired

Offering content version, saved to Offering.version.

type_payload_jsonOptional

Course or Resource metadata JSON. Use abstraction and description inside this JSON.

outline_jsonRequired

Versioned 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.
Course

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.

Resource

mode, abstraction, description, includes, catalogue

abstraction and description are saved on the shared Offering record.