This guide is for course providers who want to add or change many records at once from a spreadsheet instead of entering them one by one. It explains what each of Cademy’s six imports does, how to prepare your file, how its columns are matched to Cademy fields, and what happens to records that already exist.
Each import also has its own guide. Use this guide to choose the import and prepare your data, then follow the guide for that import.
Imports are in the admin dashboard under Settings. You need the System Admin or Course Owner role to open the Imports page. A Facilitator can start the Registrations import from the Registrants tab of a course. Every Cademy plan includes all six imports. The plan limit that matters for most files is the number of rows in an Orders or Registrations file, given under “Prepare your file” below.
A course date is one scheduled session of a course; some screens call it an occurrence. A contact stores a person’s details. An organisation is a company or other body that contacts belong to. An order records a purchase. A registration records a person’s place on a course.
Choose the right import
The Imports page offers six imports. Each one creates or updates one type of record, so choose by the record you need.
Courses Import: creates courses, or updates courses that already exist. Every row needs a course name and a course type. Each course it creates starts as unpublished.
Course Dates Import: adds dates to courses that are already in Cademy, or updates existing dates. Every row needs the course, a start and an end. Rows that share a block name are imported as one block of dates. It does not accept on-demand courses, which learners take without a course date.
Orders: creates one order per row, for one contact on one course, with the cost and payment status from your file. The contact in the row is recorded as attending. It always creates new orders and never changes an existing order.
Registrations: gives a contact a place on a course without creating an order. It can also update your custom registration fields on registrations that already exist.
Contacts Import: creates contacts, or updates contacts that already exist, including your custom contact fields.
Organisations Import: creates organisations, or updates organisations that already exist, including your custom organisation fields. Every row needs an organisation name.
To choose between Orders and Registrations: use Orders when you need a purchase record for each booking, with an amount and whether it was paid. Use Registrations when people only need their place on the course and no purchase record.
Some imports need records that are already in Cademy. When you are bringing a whole set of data into Cademy, import in this order:
Courses.
Course dates. Each row must name a course that already exists.
Orders or registrations. Each row must name a course that already exists. Unless the course is on-demand, the row also needs a course date that already exists. These imports do not create course dates.
Contacts and organisations do not depend on courses, so you can import them at any point. The Orders and Registrations imports find or create the contact in each row themselves, so you do not need to import contacts first.
Prepare your file
Every import reads the same kind of file. Check these points before you upload.
Save the file as CSV or Excel. In an Excel file, Cademy reads the first sheet only.
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ë.
Put the column headings in the first row. Each row below the headings is one record, for example one course or one contact.
Upload one file per import.
Headings that match Cademy’s field names are matched for you. The upload step of each import has a View example file link that opens a sample spreadsheet with suitable headings. The Registrations import has no example file.
Write every date in a column the same way, for example 25/12/2026 09:30. You tell Cademy which date format the column uses when you map it.
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, and Sample Data in the mapping table shows that number. A date field or a date and time field is then saved as a date in 1970, and in the Course Date field of the Orders and Registrations imports the row fails. In a CSV file every date is already text.
For yes or no values, use yes or no, true or false, or 1 or 0. The exception is Marketing Consent: write yes only for people who gave consent, and leave the cell empty for everyone else. A no is saved as consent given, and so are false and 0 in a CSV file. See the guide to the Contacts Import.
If one cell holds several values, such as several tags, separate them with commas, with the | character or with line breaks, and use the same separator throughout the column.
Leave a cell empty when a record has no value for that field. An empty cell in a required field makes that row fail.
An Orders or Registrations file can hold up to 1,000 rows on the Free, Starter and Pro plans. The Teams plan has no row limit. On an Enterprise plan the limit is set for your account. The other four imports have no fixed row limit.
Keep a copy of your original file, and try a file with a few rows first. An import cannot be undone, so a small test shows you the result before you import the full list.
Start an import
All six imports start on the same page and follow the same stages: upload the file, map its columns, choose whether existing records are updated, then start.
Open the Imports page
Sign in to the admin dashboard.
Select Settings in the main menu.
Select Imports, under Tools. The page shows Start an Import with the six imports, and Your Imports with the imports already run.
If Imports is not listed, your login has the Facilitator role. You can still start the Registrations import from the Registrants tab of a course you can open. For any other import, ask a System Admin or Course Owner on your account to run it, or ask a System Admin to change your role.
Upload, map and start
These steps cover what the six imports share. The guide for each import lists that import’s fields.
Under Start an Import, select the import you chose. A window opens and asks for the file.
Drop your file into the window, or select it from your computer. Cademy reads the file and shows a mapping table. In the Orders and Registrations imports, this first table is for the contact’s details.
Check every row of the mapping table, as explained under “Map your columns to Cademy fields” below. A warning titled Incomplete mappings lists each required field that still needs a column or a value. You cannot continue until it is gone.
Select Continue in the Orders and Registrations imports, or Next in the other four. Cademy shows how many records it will try to import, with a switch that controls whether existing records are updated. Set it as explained under “Updating records that already exist” below.
In the Orders and Registrations imports, select Continue again. A second mapping table opens for the order or registration fields. Check it in the same way.
Start the import. In the Orders and Registrations imports the button is Import. In the other four it is Import Data.
You can also start a contacts import from the Contacts page, and an orders or registrations import from inside a course, where the course is already filled in. These open the same import windows.
Map your columns to Cademy fields
Mapping tells Cademy which column of your file fills which field. The mapping table lists the import’s fields in alphabetical order, one per row, under four headings: Cademy Field, Value Source, File Column and Sample Data.
For each field, Value Source offers three choices:
Do not import: the import takes no value for this field from your file. When a row updates an existing record, this does not always leave the saved value as it is. See “Updating records that already exist” below.
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.
Fixed value: every row gets the same value, which you enter or choose in the table. For example, choose one course as the fixed value for Course when every row belongs to that course.
Cademy fills in the table to begin with. A field whose name matches one of your column headings, ignoring capital letters, is set to that column. Every other field is set to Do not import, so a column with a heading Cademy does not recognise is ignored until you map it.
Check these points before you continue:
Fields marked REQUIRED must have a column or a fixed value.
Sample Data shows values from the first rows of the chosen column. Use it to confirm that you picked the right column.
Some fields show a second list beside the column, where you choose how your file writes the value, for example the date format, the separator between several values, or whether a course is identified by its name, its Cademy ID or its course code. Choose the column first, because choosing a different column sets the second list back to its first option. Then check that the second list matches your file. If a date format does not match, the result depends on the value. A date that can still be read in the chosen format is saved as a different date. A date that cannot be read makes the row fail when the field is required. In a field that is not required, the date is left out, nothing reports it, and the row is handled as if the cell were empty. The exception is Course Date in the Orders and Registrations imports: a date that cannot be read makes the row fail.
On a new record, a field left as Do not import gets Cademy’s default where one applies. For example, an order with no mapped payment status is recorded as paid.
Updating records that already exist
Before an import starts, a switch controls what happens when a row matches a record that is already in Cademy. The switch, and what it changes, depends on the import.
Courses Import and Course Dates Import: the switch is Update existing courses or Update existing occurrences. It is on to begin with.
Orders: the switch is Update existing Contact. It is on to begin with and applies only to the contact in each row. Orders themselves are never matched or updated.
Registrations: there are two switches. Update existing Contact is on to begin with and applies to the contact. Update Existing Registrations, above the second mapping table, is off to begin with. Turn it on to update your custom registration fields on registrations that already exist.
Contacts Import and Organisations Import: the switch is Update existing contacts or Update existing organisations. It is on to begin with.
With the switch on, Cademy looks for an existing record using the identifiers below and updates the record it finds. A row with no match creates a new record. A Cademy ID is the identifier Cademy gives each record; a file that comes from another system has none. In the Courses, Course Dates, Contacts and Organisations imports, a box titled Deduplication Logic under the switch summarises how records are matched.
Courses: the course’s Cademy ID, its course code or its name. Cademy uses only the first of these that has a value in the row.
Course dates: the date’s Cademy ID, its code, or the same course with the same start and end. Cademy uses only the first of these that has a value in the row.
Registrations: the registration’s reference or code, or the contact’s email address together with the course and course date. A reference or code that is not found makes the row fail.
Contacts: the contact’s Cademy ID, then the email address.
Organisations: the organisation’s Cademy ID, then its name. Domains are not used for matching.
To get a spreadsheet of the records that are already in Cademy, export them. See the guide to exporting data.
Important: An import cannot be undone. Check the switch before you start. The wrong setting either changes records you meant to keep or creates records you already have.
These are the cases to check for:
Matching by name: with the switch on, a row that has no ID or code is matched by name. A course or organisation in your file that shares its name with a different record in Cademy updates that record. If more than one course matches, the row fails and no course is changed.
An ID or code that matches nothing, in the Courses and Course Dates imports: Cademy does not go on to try the name, or the course, start and end. The row is treated as a new record, not as an update, even when a course with the same name or a date with the same times already exists. For a course, the row then fails if another course in your account already uses the web address the new course would get. Cademy builds that address from the course name unless your file supplies one.
Switch off in the Courses, Course Dates and Organisations imports: every row creates a new record, even when the same record is already in Cademy. Importing the same file twice gives you each record twice.
Orders: uploading the same rows in a second import creates a second set of orders. To retry, import only the rows that failed.
Registrations: with Update Existing Registrations off, a contact who already has a place on the same course and course date is not given a second one. The row is reported as failed.
Switch off in the Contacts import: a row whose email address already belongs to a contact does not create a second contact, and the values in your file do not replace that contact’s saved details. Tags in the file are still added.
Contacts without an email address: a row with no email address and no Cademy ID cannot be matched, so it creates a new contact each time it is imported.
An update can also change details that are not in your file:
Courses: every updated course is set to unpublished, and some settings that your file does not supply are set back to their defaults. Review each updated course afterwards, and publish it again if it was published.
Organisations: an update replaces the organisation’s saved domains and tags with the ones in the row. When the domain field or Tags is left as Do not import, the saved domains or tags are removed.
Contacts, including the contact in an Orders or Registrations row while Update existing Contact is on: an update also saves Marketing Consent. When that field is left as Do not import, or the row’s cell is empty, the contact’s consent is saved as off. A cell that says no is saved as consent given, so write yes only for people who gave consent.
Before you update many records, import a file with a few rows and check those records in Cademy.
Check the result
Cademy processes the file after you start the import. You can keep working in Cademy while it does.
In the Orders and Registrations imports, the window shows Processing Import and then Import Complete, with the number imported and the number of failed rows. You can close it while it is processing.
In the other four imports, the window closes and a message confirms that the import is being processed.
When processing finishes, Cademy emails the result to the user who started the import, if that user still has access to the account.
To review any import, open Settings, then Imports, and find it in the Your Imports table. The newest import is at the top, and the table refreshes while an import is processing.
TYPE: the import that was run. A Course Dates import is listed as Occurrences, and an Orders import as Orders (unified). The types Bookings and Orders belong to imports that cannot be started from this page.
DATE: when the file was uploaded.
IMPORTED: the number of rows that did not fail. Select the number to list their records. The eye button beside a record opens it in a new tab.
FAILED: the number of rows that were not imported. When the number is a link, select it to see each failed row’s ROW NUMBER and REASON. A number that cannot be selected means that no reasons were stored for that import. Row 1 is the first record below your headings, which is row 2 of a spreadsheet with no empty rows.
SOURCE: always CSV File, for Excel files too.
STATUS: PROCESSING while Cademy works through the file, then PROCESSED when it has finished. PROCESSED does not mean that every row succeeded, so always check the FAILED column. The status FAILED means the import stopped with an error before it finished. Check whether any records were created before you try again. Only the Orders and Registrations imports show the status FAILED. If one of the other four imports stays at PROCESSING and no email arrives, look for its records in Cademy before you upload the file again, and contact Cademy Support with the import’s type and the date and time shown in Your Imports.
The Orders import handles failed rows differently: the FAILED column shows the number only. The email sent when the import finishes lists each failed row with its error.
Apart from blocks of course dates, whose rows are imported together, each row is imported on its own, so one failed row does not stop the others.
To fix failed rows, correct them in your spreadsheet and import a file that contains only those rows. Importing rows that already succeeded can create duplicates, as described under “Updating records that already exist” above.
Guides for each import
Each import has its own guide:
Frequently asked questions
Which file types can I import?
CSV and Excel files. In an Excel file only the first sheet is read, and the first row must contain the column headings.
Can an import change records that already exist?
Yes, in every import except Orders. The Courses, Course Dates, Contacts and Organisations imports update matching records while their update switch is on. The Registrations import updates custom registration fields when Update Existing Registrations is on. The Orders import only ever creates new orders, although it can update the contact in each row.
Can I undo an import?
No. Cademy has no undo for imports. Select the IMPORTED number in Your Imports to list the records the import created or updated, then correct them in Cademy.
Why are some rows listed as failed?
Each failed row has a reason. Common reasons are an empty cell in a required field, a course or course date that Cademy could not find, and a date that Cademy cannot read in the format you chose, in a required field or in Course Date. Select the FAILED number in Your Imports to read the reasons. For an Orders import, read them in the email sent when the import finishes.
Do the Orders and Registrations imports email the people in my file?
They send a confirmation only for rows where Send Confirmation is set to yes. If you leave that field as Do not import, no confirmation is sent. The guides for those two imports explain which other emails a new order or registration can lead to.

