Instructor CSV import

Bulk import offerings

Prepare a CSV for Course and Resource imports. Upload files first, then reference their file IDs in outline_json.

Who can import

Only active instructors can validate and import offerings from this page. Confirm instructor access first.

Steps

Step 1

Upload and copy file IDs

Upload files on the My Files page, then copy each uploaded_file_id or prefilled outline file JSON.

Open My Files
Step 2

Prepare CSV

Fill the template columns. Put modules, lectures, files, and assessments in outline_json.

Replace sample file IDs before importing.

Step 3

Validate and import

Upload the CSV in the instructor import wizard, validate it, then start the import.

Open import wizard
Step 4

Review results

If successful, open the Draft from your Instructor Dashboard to review and refine it before requesting Publish.

Open Instructor Dashboard

Import limits

  • This import supports Course and Resource offerings.
  • Imported content is saved to Draft.
  • Use the template columns exactly. Extra or older columns are rejected.
  • 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. You can copy your existing offering external ID from the Copy external ID button on your instructor offering list.

Large quiz or exam question sets

CSV import works best for setting up offering details, modules, lectures, files, and smaller quiz activities.

The importer can handle long content, but apps like Microsoft Excel, Google Sheets, or Apple Numbers may not keep very large quiz cells intact when you edit and save the CSV.

For large assessments, use the CSV for the offering structure and prepare questions in the platform editor, or contact support for assisted migration.

CSV fields

You can leave optional columns blank when they are not needed for this import.

To set or update an optional detail, enter the value in that offering row.

For type_payload_json, include only the Course or Resource details you want to set or update.

To remove information that is already saved on an offering, use the offering editor after import.

external_idOptional

Copy an existing offering external ID to update it, or leave this blank when creating a new offering.

full_nameRequired

Offering title.

price_tierOptional

Public list price. Use a supported tier value, or enter a numeric price to use the next available tier.

join_membership_planOptional

Membership inclusion request. Use one yes/no value from the template comments.

join_platform_promotionOptional

Promotion eligibility request. Use one yes/no value from the template comments.

category_l1Required

Top category. Use Course or Resource.

category_l2Optional

Second-level category, when your selected top category requires one.

category_l3Optional

Third-level category, when your selected second-level category requires one.

languageOptional

Language code. A blank value preserves an existing Draft language; new offerings and unsupported values default to en (English).

type_payload_jsonOptional

Course or Resource details in JSON. abstraction/abstract is limited to 4000 characters; description is limited to 20000 characters. Resource catalogue.text is included in the description.

outline_jsonRequired

Modules, lectures, uploaded files, and quiz content in JSON.

Category rules

  • category_l1 is always required and must be 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

  • outline_json contains modules, lectures, files, and quiz content.
  • Place append_all or replace_all alongside modules in outline_json, and set only one of them to true.
  • Use append_all=true to keep the current Outline and add the imported modules at the end. An empty modules list can be used when updating offering details only.
  • Use replace_all=true only to replace the complete Draft Outline of an eligible Upcoming offering. Validate will tell you if it is available.
  • Each file item must include filename and uploaded_file_id. You can copy this file information directly from My Files.
  • Supported Course/Resource lecture types: video lecture, online doc, download, quiz.
  • Quiz lectures do not require files, but must provide assessment inside the lecture object.
  • Course and Resource imports do not support Exam lectures.
Example
{
  "modules": [
    {
      "name": "Getting Started",
      "lectures": [
        {
          "title": "Course introduction",
          "type": "video lecture",
          "files": [
            {
              "filename": "intro.mp4",
              "uploaded_file_id": "00000000-0000-0000-0000-000000000101"
            }
          ]
        },
        {
          "title": "Quiz 1",
          "type": "quiz",
          "assessment": {
            "title": "Quiz 1",
            "quiz_type": "graded_quiz",
            "questions": [
              {
                "stem": "Which answer is correct?",
                "type": "single_choice",
                "points": "1.0",
                "required": true,
                "options": [
                  { "label": "A", "text": "Correct", "is_correct": true },
                  { "label": "B", "text": "Wrong", "is_correct": false }
                ],
                "scoring_rule": { "scoring_mode": "auto" }
              }
            ]
          }
        }
      ]
    }
  ]
}

type_payload_json

  • Multiline paragraphs are supported for long text fields such as description, welcome_message, and congrats_message.
  • abstraction/abstract is limited to 4000 characters. description is limited to 20000 characters.
  • For Resource rows, catalogue.text counts toward the description length.
Course

subtitle, abstraction, description, what_you_will_learn, requirement, who_is_this_for, welcome_message, congrats_message

Use these fields for course summary, learner-facing details, requirements, audience, and completion messages.

Resource

abstraction, description, includes, catalogue

Use these fields for the resource summary, description, included materials, and catalogue information.

Course example
{
  "subtitle": "Logic design fundamentals",
  "abstraction": "A concise course summary.",
  "description": "A practical course description.",
  "what_you_will_learn": [
    "Read timing diagrams",
    "Build simple RTL"
  ],
  "requirement": [
    "Basic digital logic"
  ],
  "who_is_this_for": [
    "New RTL learners"
  ]
}