This guide is for course providers who want to add many learners to courses at once, or fill in custom registration fields on registrations they already have, from a CSV or Excel file. It covers the Registrations import: how to prepare the file, map its columns, choose between creating and updating, and check the result.
A contact stores a person’s details. A registration is that person’s place on one course and, unless the course is on-demand (a self-paced online course with no dates), on one course date. The Registrations import creates registrations without an order, an invoice or a payment record.
If you need to import purchases, prices or payment records, follow Import Bookings and Orders instead. If you are not sure which import you need, start with the imports overview. To add one learner by hand, see Adding a Registration Manually.
What the import can and cannot do
The Registrations import is available on every Cademy plan; plans differ only in how many rows one file can hold. Each row of your file is one learner on one course. For each row, the import can:
Create a registration on an on-demand course, or on a course date that already exists for any other type of course.
Create the learner’s contact if you have none with that email address, or use the contact you already have.
Save answers in your custom Registration fields.
Send the learner a confirmation email, if you choose to.
Update custom Registration fields on a registration that already exists, including one that came from an order.
The import does not:
Create orders, invoices or payment records.
Create courses or course dates. Create these first.
Move a learner to another course date, cancel a registration, or change attendance or completion.
Check how many spaces are left on a course date. Check that the date has room before you import.
Offer an undo. Cademy has no option to reverse an import, so test with a small file first.
Prepare your file
To start the import from Settings you need the Course Owner or System Admin role. A Facilitator cannot open the Imports page, but can start the same import from the Registrants tab of a course they can open.
Use a CSV or Excel file with the column headings in the first row and one learner on one course in each row after it. In an Excel file, Cademy reads the first sheet only. Completely empty rows are skipped. If your file has letters with accents or symbols, such as é or £, save it as Excel. Depending on the program that saved it, a CSV file is read with these characters wrong, for example Zoë as Zoë.
One file can hold up to 1,000 rows on the Free, Starter and Pro plans. The Teams plan has no row limit, and on the Enterprise plan the limit is set for your account. A file with more rows is refused when you upload it.
Create the courses first, and the course dates of every course that is not on-demand. A row for such a course fails if Cademy finds no matching course date.
Give each learner’s email address. Cademy uses it to find the contact you already have. A row with no email address and no Cademy ID (the contact’s ID in Cademy) creates a new contact every time.
To import answers to your own registration questions, create the Registration fields first in Settings > Fields, on the Registrations tab, and add a column for each one. See Registration Fields.
Keep a copy of your file, and import two or three rows first to check the result.
How Cademy reads dates, yes/no values and choices
Dates in Excel. In an Excel file, enter dates as text: format the column as Text before you type the dates. A cell that Excel stores as a date reaches Cademy as a number, not as the date you see: a row with such a Course Date fails, and such a Created date or custom Date field is saved as a date in 1970. In the mapping tables, Sample Data then shows a number such as 45975.4 where you expect the date. In a CSV file every date is already text.
Date formats. When you map a date you choose its format, and the format must match your file exactly, including whether the year has two or four digits. Cademy does not reject a date written in another format if it can still read it. For example, 03/04/2026 is 3 April with the format D/M/YYYY and 4 March with MM/DD/YYYY.
Yes/no values. Use yes, no, true, false, 1 or 0. In an Excel file, type them as text: a cell that Excel stores as FALSE or as the number 0 is read as blank. The exception is Marketing Consent, described under “How contacts are matched and updated” below.
Choices. For a dropdown, single choice or checkbox field, each value must be one of the field’s options. A value that is not an option is left out and the row is still imported, so check the spelling. For a checkbox field with several choices in one cell, choose the separator your file uses (comma, pipe or new line) in the second list beside the column.
Upload and map contact details
These steps start the import and tell Cademy which columns describe the learner.
Sign in to the admin dashboard. In the main menu, select Settings, then select Imports in the Tools group.
Under Start an Import, select Registrations. The Import Registrations window opens.
Drop your file into the upload area or select Select file. When the upload finishes, the window moves to the Map Contacts step and shows the contact mapping table, headed Configure your import. If the file is empty or has more rows than your plan allows, a message says so and the window stays on the upload screen.
For each contact field you want to import, choose CSV column under Value Source and select the column under File Column. Map Email, and map First Name and Last Name for new learners. Leave the other fields on Do not import, then select Continue. If you are only updating registrations that you identify by Registration Reference or Registration Code, you can leave every contact field on Do not import.
Decide whether to leave Update existing Contact on. It is on to begin with. With it on, the details you mapped replace those saved on matching contacts, and Marketing Consent is rewritten on every matching contact. Read “How contacts are matched and updated” below before you continue. Then select Continue to open the Map Registrations step.
You can also start from a course: open the course, select its Registrants tab and select Import. When the actions are folded into the menu button marked with three dots, the item is Import Registrations…. The same window opens. In the Map Registrations step the course, and the course date you are viewing, are already filled in as fixed values. Check them before you import.
How mapping works
Mapping tells Cademy which column of your file fills which field. For example, map a column named “Email Address” to Email. Cademy selects a column by itself when its heading is the same as the field’s name, so check every row of the table before you continue. Under Value Source, each field has one of three settings:
Do not import: the import takes no value for this field from your file.
CSV column: the field takes its value from a column of your file. Choose the column under File Column. The choice has this name for Excel files too. Where a second list appears beside the column, choose the option that matches your file, such as the date format.
Fixed value: every row gets the same value, which you enter or choose in the table.
Sample Data shows values from the first five rows of your file for the column you chose. If you choose a different column, the second list goes back to its first option, so check it again.
Important: Selecting Back rebuilds the screens you pass through again. Mappings you chose by hand return to the automatic ones, Update existing Contact returns to on and Update Existing Registrations returns to off. Check each screen again before you continue.
How contacts are matched and updated
Cademy looks for the learner by email address. If you already have a contact with that address, the registration is added to that contact. Otherwise a new contact is created. If you map Cademy ID and Update existing Contact is on, Cademy looks for the contact by that ID first, and by email address if the ID is not found. With Update Existing Registrations on, a Cademy ID that is not found fails the row.
With Update existing Contact on, the details you mapped replace the details saved on a matching contact. Blank cells do not clear saved details. With the switch off, a matching contact keeps its details, except that tags in your file are still added.
Two details work differently while the switch is on. If a row has a value for any part of the address, the whole saved address is replaced by the parts in the row, so include every part. The contact’s first name, last name and email address are saved again: where the row has no value for one of them, Cademy uses the value from the learner account that person has with Cademy. Import Contacts describes how an import updates a contact.
Important: The Marketing Consent field does not follow those rules. Cademy saves consent as given for every yes/no value it reads in the cell, not only for yes: a no is saved as consent given, and so are false and 0 in a CSV file. Consent is saved as not given when the cell is blank or the field is not mapped. With Update existing Contact on, this is written to every matching contact. To keep the consent already saved on your contacts, turn the switch off. If you do import consent, write yes only for people who gave consent, and leave the cell empty for everyone else. Import Contacts has the full rule.
This import does not use the Organisation field in the contact mapping table to set the learner’s organisation. Leave it on Do not import. If you map it while Create organisations when auto-linking is on in your account, a name or domain that matches no organisation creates one. When the column holds domains (the Domains option in the second list) and Automatically link contacts to organisations by domain is on, Cademy can then link the new organisation to contacts in your account that have an email address at that domain and no organisation. To set a contact’s organisation from a file, follow Import Contacts.
Create registrations or update existing ones
The Map Registrations step has the switch Update Existing Registrations, which is off to begin with, and a mapping table for the registration fields.
Off: every row creates a registration. If the contact already has a registration on the same course and course date that is not cancelled or deleted, the row fails as a duplicate and nothing is created.
On: Cademy first looks for an existing registration for the row. If it finds one, it updates the custom Registration fields that have a value in the row. If it finds none, it creates a registration.
Important: With updates on, a row whose contact, course and course date match no registration creates one, if the row has the details a new registration needs. A row with a Registration Reference or Registration Code that Cademy cannot find fails instead. Check your matching columns before you import.
Registration fields you can map
The table lists these fields in alphabetical order, together with your custom Registration fields:
Course: required to create a registration, and marked REQUIRED while updates are off. With updates on, a row that you identify by Registration Reference or Registration Code does not need it. In the second list, choose how your file names the course: Course Name, Cademy Course ID or Course Code. A name must be exactly the course’s name, and an ID or a code avoids confusing courses with similar names. A row whose course is not found fails. In an Excel file, a course name or code made only of digits, such as 101, must be in a cell formatted as Text. Excel otherwise stores it as a number, and the course is not found.
Course Date: needed for every course that is not on-demand. Put the start of the course date in the cell and choose the matching format. A format with a time finds the course date that starts at that minute. A format with the date only finds a course date that starts on that day, so use a format with a time if the course has two dates starting on the same day. The one exception is D-MMM-YY, which finds only a course date that starts at midnight. Times are read in your account’s time zone. Leave this field on Do not import for on-demand courses.
Created date: the date and time the learner originally registered, for historical records. The value needs a time as well as a date and is read in your account’s time zone. A value that is blank or cannot be read is ignored, and the registration is dated at the time of the import. This field is used only when a registration is created.
Registration Code and Registration Reference: identify an existing registration when updates are on. They do not set the code or reference of a new registration. With updates off, a row with a value in either field fails, so set both to Do not import when you only create registrations.
Role: optional. Accepted values are direct, booker and guest. A blank cell means direct, which is meant for a learner who did not come through an order. Any other value fails the row. The role does not create or link an order.
Send Confirmation: decides whether Cademy emails the learner a confirmation for a new registration. Choose Fixed value and turn the switch on to send it to everyone in the file, or map a column of yes/no values to decide row by row. Left on Do not import, no confirmation is sent. A learner with the role guest receives it only if the course has Send guest participants emails switched on. Updating a registration never sends a confirmation.
Your custom Registration fields: each learner’s answers for this registration. These are separate from the contact fields in the Map Contacts step. An Address field appears as six separate parts. File Upload and Statement fields cannot be imported.
How Cademy finds the registration to update
With Update Existing Registrations on, Cademy uses the first of these that the row provides:
Registration Reference: the registration’s unique ID.
Registration Code: the code shown in the Registration Code column of your registrations.
The contact, the course and the course date: the contact’s Email or Cademy ID from the contact mapping table, the Course and, for a course that is not on-demand, a Course Date that matches exactly one date of that course. For an on-demand course, leave the Course Date cell blank.
The reference and the code must match exactly. The simplest way to get them is to export your registrations with the Registration Reference and Registration Code columns, add or correct the field values in that file and import it. Cademy maps columns with those two headings by itself. See Managing Registrations: Search, Filter, and Export.
Important: If your export includes contact columns whose headings match a contact field, such as Marketing Consent, Cademy maps them by itself in the Map Contacts step. Before you import an exported file, set the contact fields you do not want to change to Do not import and turn Update existing Contact off.
A reference or code also finds a cancelled registration, which is updated and stays cancelled. Matching by contact, course and course date skips cancelled registrations, so a row for a learner whose only registration there is cancelled creates a new one.
A row fails, and nothing is changed, when:
The reference or code is not found in your account.
The row also holds a contact, course or course date that disagrees with the registration found.
The Cademy ID is not found, or the row’s email address does not belong to that contact.
More than one contact, or more than one registration, matches the row.
The row has no reference or code and is missing the contact’s email or Cademy ID, the course, or a single matching course date.
An update writes only the custom Registration fields that have a value in the row. Blank cells, and cells holding only spaces, leave the saved answers unchanged. The update does not change which learner, course or course date the registration belongs to, its role, its created date, attendance or completion, or any order or payment. The contact’s own details change only if Update existing Contact is on.
Start the import
Check every mapping and its Sample Data. If a required field is not mapped, a warning headed Incomplete mappings names it and Import cannot be selected.
Select Import. The message Import started appears and the window shows Processing Import.
Lesson access and notifications
Imported learners follow the course’s lesson opening times and deadlines. Send Confirmation controls the registration confirmation only. Turning it off does not turn off lesson opening or deadline notifications; those follow the lesson schedules and due dates.
On a blended course, timings that count from the course start or end use the course date on each learner’s registration.
Timings that count from enrolling use the registration’s created date. For an imported registration this is the Created date from your file, or the time of the import if you mapped none. If the course gives access For a limited time, that period counts from the same date. A created date far in the past can therefore mean that lessons are already open or overdue, or that access has already run out. Check the course’s lesson and access settings before you import historical dates.
Review the result
You can leave the window open or close it and keep working. When processing ends, the window shows Import Complete with the number of registrations imported and, if any rows failed, the number of failed rows.
The steps below need the Course Owner or System Admin role, because they use Settings > Imports. If you are a Facilitator, use the result email described after the steps: it lists each failed row and its reason.
Open Settings, then Imports.
Under Your Imports, find the newest row with the type Registrations and read IMPORTED, FAILED and STATUS.
Select the number under IMPORTED to list the registrations that were created or updated. The eye button beside a registration opens it in a new tab, which needs the System Admin role.
Select the number under FAILED to see the ROW NUMBER and REASON of each failed row. Row 1 is the first row under your column headings, not counting empty rows.
Correct those rows and import a file that contains only the rows that need retrying.
STATUS shows PROCESSING while the import runs, PROCESSED when processing has finished, including when some rows failed, and FAILED when the import as a whole stopped. A failed import shows a dash under IMPORTED and FAILED, and the table does not show why it failed. If the window is still open, it shows Import failed with the reason.
Cademy also emails the result to the person who started the import, as long as they still have access to the account. The email lists each failed row with the values from your file and the reason, but without the row number. It is separate from the learners’ confirmations.
Common reasons a row fails
This contact is already registered on this course date. The row was skipped to avoid creating a duplicate registration. The learner already has a registration there that is not cancelled or deleted. No registration was created.
Could not find a matching course date for this row. The course is not on-demand, and no date of that course starts at the date or time in the row. Check the date, the format you chose and whether the year has two or four digits.
Course date does not match the course. A course date starts at the date or time in the row, but it belongs to another course.
Role must be one of: booker, guest, direct. The Role cell holds another value.
Value: … is not a valid value for field 'Course Date'. The Course Date could not be read in the format you chose, or the Excel cell is stored as a date.
Course with Course Name … not found. The name, ID or code in the row matches no course in your account.
The required field "Course" needs a value for this record. The Course cell is blank.
Enable Update Existing Registrations to use a registration reference/code. The row has a Registration Reference or Registration Code but updates are off.
Error importing registration. A general reason. One cause is an email address that is not valid.
The first four reasons in this list are found only after the row’s contact has been saved. For such a row the contact has already been created if you did not have it, or updated if Update existing Contact is on, and only the registration was not created. If the row has no email address and no Cademy ID, importing it again creates another contact.
Frequently asked questions
Does this import create an order or invoice?
No. It creates registrations only. Use the Orders import, described in Import Bookings and Orders, when you need purchase or payment records. Choosing booker as the role does not create an order.
Can I update registration fields for learners who booked through an order?
Yes. Turn Update Existing Registrations on and identify each registration. The update changes the custom Registration fields that have a value in the row. It does not change the order or the payment.
Can I move someone by importing another course date?
No. An update never moves a registration. A row with the same contact and course but a different course date matches no registration, so it creates a second one. To move a learner, see Changing or Moving a Registrant: Reschedule, Transfer, or Replace.
Why was a duplicate or ambiguous row skipped?
With updates off, Cademy does not create a second registration for the same contact, course and course date while one exists that is not cancelled or deleted. With updates on, a row that matches more than one registration fails, because Cademy does not choose between them. Use the Registration Reference or Registration Code, and import only the rows you want to update.
Can blank cells clear existing registration answers?
No. During an update, blank cells leave the saved answers unchanged. To remove an answer, edit the registration itself.
Where do I find the Registration Reference?
In an export of your registrations that includes the Registration Reference column. Do not copy the ID from the Imported Registrations list of an earlier import. That list shows IDs in capital letters, the IDs of registrations created by an import use small letters, and the reference must match exactly.
