Note: You are currently viewing documentation for Moodle 3.1. Up-to-date documentation for the latest stable version of Moodle is probably available here: Upload users.
Location: Administration > Users > Accounts > Upload users
Firstly, note that it is usually not necessary to import users in bulk - to keep maintenance work down you should first explore forms of authentication that do not require manual maintenance, such as connecting to existing external databases or letting the users create their own accounts. See Manage authentication for more information.
If you are sure you want to import multiple user accounts from a text file, then you need to format your text file as follows:
Upload file format
- Each line of the file contains one record
- Each record is a series of data separated by commas (or other delimiters)
- The first record of the file is special, and contains a list of fieldnames. This defines the format of the rest of the file.
- Required fieldnames: These fields must be included in the first record, and defined for each user
username, password, firstname, lastname, email
Remember that validity checks for the username, password, and email fields will be performed.Usernames can only contain alphabetical letters in lowercase, numbers, hypen '-', underscore '_', period '.', or at sign '@'. Passwords should meet the requirements specified for the site's Password policy. Emails should be in the format of a valid email.
- Optional fieldnames: If a value is present for the field in the file, then that value is used; else, the default value for that field is used
institution, department, city, country, lang, auth, ajax, timezone, idnumber, icq, phone1, phone2, address, url, description, mailformat, maildisplay, htmleditor, autosubscribe, emailstop
- Custom profile field names: Optional, xxxxx is the real custom user profile field name (i.e. the unique short name)
- Warning:: If you want to create custom profile fields, you need to follow the standard header in your .csv file to import users. You must create the custom fields BEFORE importing users from list. The "shortname" for your custom field is xxxxx, and the header collumn to all users data in .csv file have standard notation "profile_field_xxxxx".
- Example: If you want to create a custom field "genre" in your Moodle site, you must write a shortname "genre" in the new field, and write "profile_field_genre" in the header of the .csv file.
- Special field names: Used for changing of usernames and deleting of users
- Enrolment field names: Optional, the course names are the "shortnames" of the courses - if present then the user will be enrolled in those courses. "Type" means type of role to be used for associated course enrolment. Value 1 is default course role, 2 is legacy Teacher role and 3 is legacy Non-editing Teacher. You can use role field instead to specify roles directly - use either role short name or id (numeric names of roles are not supported). Users may be also assigned to groups in course (group1 in course1, group2 in course2, etc.). Groups are again identified by its names or ids (numeric names of groups are not supported). From Moodle 2.0, you can also set the enrolment duration in days for each course (enrolperiod1 for course1, enrolperiod2 for course 2, etc.).
course1, type1, role1, group1, enrolperiod1, course2, type2, role2, group2, enrolperiod2etc.
- Commas within the data should be encoded as , - the script will automatically decode these back to commas.
- For Boolean fields, use 0 for false and 1 for true.
- Force password change: Set the password field for desired users to changeme.
- Turn email off: The parameter emailstop must be set to 1 if the email address should not work. If you set it to 0 then the email address is switched on. If you want to have all the email addresses active then you do not need the additional parameter in your upload file.
- In order to prevent users from receiving a larger number of emails from courses and forced subscription forums use the maildigest fieldname. The options for this fieldname are 0 = No digest, 1 = Complete digest and 2 = Digest with just subjects.
Here is an example of a valid import file:
username, password, firstname, lastname, email, lang, idnumber, maildisplay, course1, group1, type1<br /> jonest, verysecret, Tom, Jones, email@example.com, en, 3663737, 1, Junk102, Section 1, 1<br /> reznort, somesecret, Trent, Reznor, firstname.lastname@example.org, en_us, 6736733, 0, Junk102, Section 3, 3
The default values are processed as templates in which the following codes are allowed:
- %l - will be replaced by the lastname
- %f - will be replaced by the firstname
- %u - will be replaced by the username
- %% - will be replaced by the %
Between the percent sign (%) and any code letter (l, f or u) the following modifiers are allowed:
- (-) minus sign - the information specified by the code letter will be converted to lowercase
- (+) plus sign - the information specified by the code letter will be converted to UPPERCASE
- (~) tilde sign - the information specified by the code letter will be converted to Title Case
- a decimal number - the information specified by the code letter will be truncated to that many characters
For example, if the firstname is John and the lastname is Doe, the following values will be obtained with the specified templates:
- %l%f = DoeJohn
- %l%1f = DoeJ
- %-l%+f = doeJOHN
- %-f_%-l = john_doe
- http://www.example.com/~%u/ = http://www.example.com/~jdoe/ (if the username is jdoe or %-1f%-l)
Template processing is done only on default values, and not on the values retrieved from the CSV file.
In order to create correct Moodle usernames, the username is always converted to lowercase. Moreover, if the "Allow extended characters in usernames" option in the Site policies page is off, characters different to letters, digits, dash (-) and dot (.) are removed. For example if the firstname is John Jr. and the lastname is Doe, the username %-f_%-l will produce john jr._doe when Allow extended characters in usernames is on, and johnjr.doe when off.
When the "New username duplicate handling" setting is set to Append counter, an auto-increment counter will be append to duplicate usernames produced by the template. For example, if the CSV file contains the users named John Doe, Jane Doe and Jenny Doe without explicit usernames, the default username is %-1f%-l and New username duplicate handling is set to Append counter, then the usernames produced will be jdoe, jdoe2 and jdoe3.
Updating existing accounts
By default Moodle assumes that you will be creating new user accounts, and skips records where the username matches an existing account. However, if you set "Update existing accounts" to Yes, the existing user account will be updated.When updating existing accounts you can change usernames as well. Set "Allow renames" to Yes and include in your file a field called
Warning: any errors updating existing accounts can affect your users badly. Be careful when using the options to update.
Deleting accountsIf the
deletedfield is present, users with value 1 for it will be deleted. In this case, all the fields may be omitted, except for
Deleting and uploading accounts could be done with a single CSV file. For example, the following file will add the user Tom Jones and delete the user reznort:
username, firstname, lastname, deleted jonest, Tom, Jones, 0 reznort, , , 1
In Moodle 1.8 the file must be UTF-8. In Moodle 1.9 onwards, the encoding may be selected from a large list, including ISO-8859-1.
If you use a spreadsheet program such as Excel to create your .csv file, check the resulting output in a text editor before you upload it. It is possible to get trailing commas on each line from an empty field if you have added and deleted columns of information prior to saving the final file. Also check the character encoding. A csv file is a simple text file (ASCII or Unicode) that can be used to upload user accounts.
Excel translates passwords that begin with - (minus) or + (plus) as zero. Even when saving as .csv and saying "Yes" to "Keep this format, and leave out any incompatible features." Check for this before uploading, as a zero halts the upload process.
If you use a formula in Excel to create fields (for example, the concatenate function to create a user name), then remember to copy the cells with the formula and use special paste with values checked to make them into an acceptable data for a csv file.
The country should be written as a two letter code, in capitals. For example, use BE for Belgium or NL for the Netherlands. Using "be" or "nl" as a country code will result in a database error.
- Tip: If you are having trouble working out the two-letter code for a country, you can consult this Moodle source code file /moodle/lang/en_utf8/countries.php or click here for a 1.9 STABLE list.
ISO Website: 
Using Moodle forum discussions: