Upload courses


Note: This page is about creating courses with a text (.csv) file. If you want to upload a course backup in .mbz or .tgz format, see Course restore.


Upload courses

In addition to creating new courses, the upload courses functionality may also be used to update or delete courses, or import content from another course. For information on using this functionality to create course templates, see Adding a new course.

To upload one or more courses

  1. Go to Administration > Site administration > Courses > Upload courses
  2. Either drag and drop the CSV file or click the 'Choose a file' button and select the file in the file picker
  3. Select appropriate import options carefully, then click the preview button.

Note: It is also possible to use the command-line tool admin/tool/uploadcourse/cli/uploadcourse.php.

When using the web interface, use the Preview option to see if any errors were detected in the previewed rows. If you proceed with the upload and there were something wrong detected with a course, it will be ignored.

Short file example


Note: shortname, fullname, and category are required.

The category field takes the id of the category, with the default category Miscellaneous having id 1. Categories must already exist. If you put a category id that does not exist, we will receive a "Could not resolve category by ID" error during upload preview, and courses in that category will not be created.

courserestored,Course restored,1,a summary,manual,student,1 month,
courserestored2,Course restored 2,1,a summary,,,,
courserestored3,Course restored 3,1,a summary,,,,padawan
courserestored4,Course restored 4,1,"a summary, with comma",manual,student,1 month,padawan

Notice there are no spaces between the items.

Creating the text file

The text file to upload courses must be a CSV file. It accepts the following columns which are divided in two categories, the course information, and the course actions.

Course information fields

Most of those settings are available on the settings page of a course. Please refer to Course settings for more information. Field names must be lower-case.


The shortname


The full name


The ID number


The ID of the category to place the course in. This takes precedence over category_idnumber and category_path.


The ID number of the category to place the course in. This takes precedence over category_path.


The path of the category to place the course in. If you want to place the course in a category named "Science-Fiction" which is located under the category "Movies", the value to provide is:
Movies / Science-Fiction
. Note that the separator must be
. Also note that the category MUST exist, it will not be created. If you want to place the course in the top-level category "Movies", the value to provide is:


1 if the course is visible, 0 if hidden


The time at which the course starts. Please note that this value is passed to the PHP function strtotime to generate a timestamp. Example 01.12.2014 (1st December 2014)


The time at which the course ends. Please note as with startdate that this value is passed to the PHP function strtotime to generate a timestamp. Example 01.12.2014 (1st December 2014)


The summary of the course


The course format to use, this must be a valid course format plugin name. E.g. weeks, topics.


The theme to use


The language to use


The number of news items


1 to show the gradebook to students, 0 to hide it.


1 to show the activity reports, 0 to hide it.


1 to enable the legacy course files, 0 not to.


The maximum upload size of the course in bytes. Use 0 for the site limit.


0 for No groups, 1 for Separate groups and 2 for Visible groups.


1 to force the group mode, otherwise enter 0.


1 to enable the activity completion, 0 not to.

Enrolment fields

Some fields can be constructed to enable and configure enrolment methods. The fields must be named enrolment_[number] for the enrolment method name, and enrolment_[number]_property for its properties.


The name of the enrolment method (eg, manual, guest, self)


1 to delete this enrolment method from the course, if set to 1 all the other properties will be ignored.


1 to disable this enrolment method from the course, if set to 1 all the other properties will be ignored.


The enrolment start date. This value is passed to the PHP function strtotime().


The enrolment end date. This value is passed to the PHP function strtotime().


Number of seconds, or if not a value understood by strtotime() such as "4 days".


The role short name


Where property is understood by the specified enrolment method


The course enrolment key

Note: Upload courses is not yet compatible with all enrolment methods (MDL-43127).


enrolment_1: manual
enrolment_1_role: student
enrolment_1_enrolperiod: 1 month

enrolment_2: self
enrolment_2_startdate: 2013-01-30

Role renaming

To rename some roles, using the following pattern:


The new name of the role [shortname].


role_student: Apprentice
role_teacher: Master
role_mycustomrole: Jedi

It is worth noting that the short name for the teacher role is editingteacher and the short name for the non-editing teacher is teacher.

Course action fields

Those settings take precedence over the Course process parameters.


1 to delete the course


The shortname to rename the course to


An absolute path to a backup file (.mbz) to import in the course.

(This means the full path to our course, for example /home/yourmoodle/public_html/moodle27/transfert/backup.mbz . If we are unsure of this, look at include_path in Site administration>Server>PHP info.)


The short name of a course to import the content from


1 to reset the course

Mandatory fields


This field is mandatory for every operation, with the only exception of creating new courses. See details on the course process parameter Shortname template for more information.


Required when creating a new course.

category, category_idnumber, category_path

One of these is required when creating a course.

Import options

To prevent unexpected behaviour, you have to specify what you want the tool to be able to do.

Upload mode

This allows us to specify if courses can be created and/or updated.

Update mode

If you allow courses to be updated, you also have to tell the tool what to update the courses with.

Allow deletes

Whether the delete field is accepted or not

Allow renames

Whether the rename field is accepted or not

Allow resets

Whether the reset field is accepted or not

Course process

This allows us to specify actions to be taken for every course uploaded.

Shortname template

If we are creating courses without a shortname, we can use this field to automatically generate a shortname. This field accepts two placeholders: %i for the ID number, %f for the summary.

Restore file

A backup file (.mbz) to import in the course after create/update.

Restore from course

The shortname of a course to import content from after create/update.

Reset after upload

Whether to reset the course after creating/updating it.

Default course values

Those are values that can be set in the web interface for all the fields that are not specified in the CSV file. Note that they are always used when creating a course, but only when specified during update (see Update mode).

Increasing speed

When importing the content of a backup file, or another course, we are advised to enable the setting keeptempdirectoriesonbackup. This will considerably speed up the process of the upload if we are importing multiple times from the same source.

See also