This guide is for course providers (Course Owners and System Admins) who want to add their full list of courses at once from a CSV or Excel spreadsheet, instead of creating them one by one, or to update many courses they already have.
Each row of the file creates one course, or updates a course you already have. Course imports are available on every Cademy plan. A course import does not create course dates, lessons or bookings. Every course it creates or updates is set to Unpublished until you publish it. An import cannot be cancelled or undone once it has started: correct the courses, or import a corrected file with Update existing courses on.
Start with a small test file. Check the mappings and results with a few rows before you import the complete file.
Prepare Your Course Spreadsheet (Example File)
Save the file as CSV or Excel. In an Excel file, Cademy reads the first sheet only. Put the column headings in the first row, and one course in each row below it.
Use the example course file as a starting point, and keep a copy of your original file. The example file has a Cademy ID in every row. Delete those IDs before you import new courses.
Your headings can be anything, because you map the columns after the upload. In the example file, map the columns for Name, Type, Delivery, Course Code, Owner, Spaces and Online Join URL yourself; the others are matched for you, and duration_config is not used.
Required Columns: Name and Type
Every row needs a value for two fields. A row that leaves either one blank fails.
Name: the name of the course.
Type: the kind of course. Enter one of the four values in this table exactly as shown, in lower case. Any other value fails the row.
Type value | Course format in Cademy |
| On set dates: workshops, events, classes and webinars that run on scheduled dates. |
| On-demand online course: pre-recorded content and self-paced e-learning. |
| On-request: private training, 1-to-1 sessions, coaching and tuition. |
| Blended course: modules, learning programmes and degrees. |
Optional Columns and What a Blank Cell Gives
The last column shows what a new course gets when the field is left out or the cell is blank. Yes or no fields accept yes, no, true, false, 1 or 0.
Field | What to enter | If blank on a new course |
Cademy ID | Only to update a course that already exists. Copy it from the course page address in the admin dashboard: the code after | Cademy creates an ID. |
Course Code | Your own reference for the course. | No code. |
Slug | The last part of the course’s web address. | Made from the Name. |
Description | Text or HTML. | Empty. |
Course Welcome Content | Text or HTML that learners see after they enrol. | None. |
Meta Description | Text. | None. |
Keyword | A keyword from the course editor’s keyword list, in lower case, for example | None. |
Level |
| All. |
Course Categories | Category names separated by commas. To place a category under a parent, write the parent first, for example | No categories. |
Course Tags | Tag names separated by commas, or by the separator you choose when you map the field. Cademy creates a tag that does not exist yet. | No tags. |
External Image URL | The web address of a PNG, JPEG, GIF or WebP image. Cademy saves a copy as the course image. If Cademy cannot fetch it, the course is imported without an image. | No image. |
Currency |
| Your account currency. |
Offer 1 Name to Offer 4 Name, Offer 1 Price to Offer 4 Price | Up to four prices, each with a name. Write a price as a plain number, such as | No prices. |
Spaces | A number. Class and blended courses only. | 0. |
Delivery |
| In-person for class and blended courses. On-demand for on-demand courses. |
Location Name, Address: Street, Address: City, Address: Postcode, Address: Country | The venue. See “Assign Saved Locations” below. Class, blended and on-request courses only. | No location. |
Online Join URL | A web address. Class and blended courses only. | None. |
Timezone | A time zone name such as | Your account’s time zone. |
Duration | A number. You choose the unit (minutes, hours, days or weeks) when you map the field. On-demand and on-request courses only. | On-demand: no duration. On-request: Cademy adds a default duration, so check it after the import. |
Pricing Option | On-request courses only: | Price on enquiry. |
Available for in-person delivery, Available for online delivery, Student Travels to Educator, Educator Travels to Student | Yes or no. On-request courses only. | No. |
Educator Travel Settings |
| Internationally. |
Educator Travel Locations | City names separated by commas, for example | None. |
Owner | The email address of a user in your account, or the user’s Cademy Admin ID. You choose which of the two your column holds when you map the field. | No owner. |
Hosted Externally | Yes or no: whether the content is hosted on another platform. On-demand courses only. | Not set. |
External Hosting Details | Text that tells the customer how they get access to the content. On-demand courses only. | None. |
An unreadable value is not always rejected. In Delivery, Level, Keyword, Currency, Timezone, Pricing Option, Educator Travel Settings, the yes or no fields, Spaces and the offer prices, it is treated as blank and the default is used, so a Delivery of virtual becomes in-person.
Upload Your Course File
You need the Course Owner or System Admin role. A Facilitator cannot open the Imports page.
Go to Settings > Imports.
Under Start an Import, select Courses Import. The Import courses window opens.
Under Upload a file to import, drop your file into Drop or Select a file, or select it from your device. Upload one file at a time.
Wait for the upload to finish. Cademy opens Configure your import.
If Cademy shows There was an issue processing your file. Please try again., check that the file is a CSV or Excel file and that it has at least one course under the headings, then upload it again.
Map Your Columns to Course Fields
The mapping table lists every Cademy field in alphabetical order.
Check the fields that Cademy mapped for you. A column is mapped when its heading is the same as the field name or its internal name, ignoring capital letters. Every other field starts as Do not import.
For each field, choose a Value Source: Do not import (no value from your file), CSV column (a column of your file, also for Excel files) or Fixed value (the same value for every row).
With CSV column, choose the column under File Column, then check Sample Data. It shows values from the first five rows of your file.
For Owner, Duration, Course Categories and Course Tags, a second list appears beside the column: Cademy Admin ID or Email, the unit, or the separator your file uses. Choose the column first, because changing it resets the second list.
Map the required fields Name and Type. While either one is not mapped, Cademy shows Incomplete mappings and Next stays unavailable.
Select Next.
Does your Owner column hold email addresses? The second list for Owner starts on Cademy Admin ID. Change it to Email. If you leave it, every row that has an owner fails.
Here Name and Type are not mapped yet, so Incomplete mappings is shown.
Assign Saved Locations (Venues) to Imported Courses
Create and name your saved locations first. Go to Settings > Locations and give each venue a unique Name before importing. Do not reuse the Name of a deleted location: name matching also finds deleted locations.
A saved location is a venue stored under Settings > Locations. For class and blended courses, Cademy chooses the location in this order:
If Location Name matches the Name of a saved location, Cademy uses it. Capital letters and spaces before or after the name are ignored, but the rest must match exactly. Address values in the row are then not used.
Otherwise, if Address: City has a value, Cademy uses the first active saved location whose city, country, street and postcode contain the row’s text, ignoring capital letters. A blank Address: Country means United Kingdom. The match is loose: Newport also fits Newport Pagnell. A row with no street matches only a saved location with no street, and a row with no postcode only one with no postcode.
If no saved location matches, Cademy creates one from the address. This needs Address: Street, Address: City and Address: Postcode, a country name written in full, such as
United Kingdom, and an address that Cademy’s map lookup finds. Otherwise the row fails.With no matching Name and no city, the course is imported without a location.
On-demand courses: Location Name and the Address fields are not used.
On-request courses: Location Name is not used. To offer your own venue, map Student Travels to Educator as yes and supply the Address fields (matched or created as in steps 2 and 3). A row with it set to yes and no city fails.
Updating an existing class or blended course? Map the Location Name, or the Address fields, again. If the row gives no location, the update removes the saved location from the course.
Location notes cannot be imported. A location that the import creates has no Name and no Public note, so add them under Settings > Locations afterwards. See Set the Course Venue or Online Joining Link.
Choose Whether to Update Existing Courses from Your Spreadsheet
After you select Next, Cademy shows how many records it will try to import and the Update existing courses switch. The switch is on to begin with. Leave it on to update the courses that match and create the rest. Switch it off to create a new course from every row.
Start the Course Import
Check the number of records and the Update existing courses switch.
Select Import Data.
The window closes and Cademy shows Import is being processed.
Check Which Courses Were Imported and Which Rows Failed
The import appears at the top of Your Imports on the Imports page, with the type Courses. PROCESSING means Cademy is working through the file. PROCESSED means Cademy has tried every row, not that every row succeeded, so always check the FAILED column.
When processing finishes, Cademy emails the user who started the import the number of courses imported and the rows that failed. If an import stays at PROCESSING with no email, look for its courses before uploading again, and contact Cademy Support with the import’s date and time.
In the Your Imports table:
If the number under IMPORTED is above 0, select it to open Imported Courses. It lists each course created or updated, with its type and Cademy ID. Select the eye button beside a course to open it in a new tab.
If the number under FAILED is above 0, select it to open Failed Courses. It shows a ROW NUMBER and a REASON for each failed row. Row 1 is the first record below your headings, which is row 2 of a spreadsheet with no empty rows.
Imported Courses Show Processed but Are Not in the Courses List
If Your Imports shows the import as PROCESSED but you cannot find the courses on the Courses page, check these points:
Check the FAILED number. A failed row creates no course.
Imported courses are Unpublished. On the Courses page, choose the All Courses view, not Published Courses.
Use the List layout. The Dates, Calendar and Timeline layouts show course dates, and a course import creates no dates.
Something Went Wrong with a Course Import? Why Rows Fail and How to Fix Them
A failed row does not create or update a course, and it does not stop the other rows. Correct the failed rows and import them again in a file that contains only those rows.
Reason shown | What to check |
The required field "Name" needs a value for this record | The Name cell is blank. The same reason names Type when the Type cell is blank. |
Admin with Email … not found, or Admin with Cademy Admin ID … not found | The Owner value is not a user with access to your account, for example an archived user. Also check that the second list for Owner was set to match your file. |
Multiple courses found that match the update criteria | More than one of your courses has the Course Code or Name that the row was matched on. |
Value: … is not a valid value for field 'Duration' | The Duration cell is not a number. |
An unknown error occurred importing this row | Check that Type is one of the four values in lower case; Cademy ID holds only IDs of your own courses, not those from the example file; the web address name is not used by another course, including an archived one, and has at least three characters (a very short Name, or one with no Latin letters or numbers, needs a Slug); Address: Country is a full country name; a new address has a street, city and postcode the map lookup can find; and a row with Student Travels to Educator set to yes has a city. If none applies, send the row and the import date to Cademy Support. |
Check and Publish Imported Courses
Every course that the import creates or updates is Unpublished: only you and learners already enrolled can see it.
Open each course from Imported Courses.
Check every important setting, not only the fields you mapped.
For class and blended courses, select Edit Course, open Pricing & Delivery and check the venue.
Add course dates with Import Course Dates (Classes and Sessions) from a Spreadsheet.
The Currency column sets the course default. A date can have its own currency: see Choose the Currency for Your Course Prices.
When the details are correct, publish the course.
Publish All Imported Courses at Once
There is no action that publishes several courses together. On the Courses page, in the List layout, select each course’s Unpublished label and choose Public, or Private if your plan includes private courses. It saves straight away. Public and Private courses both count towards your plan’s published-course limit. See Publish and Share a Course.
Add Course Images to All Imported Courses Together
There is no action that adds an image to several courses at once. Before you import, put each image’s web address in the External Image URL column. For courses already imported, add the image in each course: see Add and Manage Course Images. Importing the complete file again with that column and Update existing courses on also works, but an update unpublishes each course and resets some settings (see “What an Update Changes on an Existing Course”).
How the Import Updates Courses You Already Have
What happens to each row when Update existing courses is on or off.
How Cademy Finds the Course to Update
When the switch is on, Cademy looks for an existing course with one identifier: the first of these that has a value in the row.
Cademy ID (Cademy Course ID on this screen)
Course Code
Name (Course Name on this screen)
The value must match exactly, including capital letters. Cademy does not try the three in turn, as the Deduplication Logic box suggests: if the first value matches no course, it does not try the next, even when the Name matches.
One course matches: Cademy updates it.
More than one course matches: the row fails with the reason Multiple courses found that match the update criteria.
No course matches: Cademy creates a new course, which can be a second copy of a course you have. The row fails if the new course’s web address name (the Slug, or a name made from the Name) is already used by another course in your account. A Cademy ID from the row becomes the new course’s ID, and the row fails if a course in another account has that ID.
Archived courses count as existing courses: a matching row updates an archived course, which stays archived, and an archived and an active course with the same Code or Name make the row fail as “Multiple courses found”. Archiving courses does not stop a later import from matching them. To create new courses with the same names, switch Update existing courses off. To restore a course, see Publish and Share a Course.
What an Update Changes on an Existing Course
An update does more than fill in the cells you mapped: Cademy rebuilds the course settings from the row.
The course is set to Unpublished, whatever its visibility was.
The Type and Name in the row are saved to the course. Keep the Type the same as the existing course.
For every course type, Level goes back to All and Currency goes back to your account currency when the row gives no value. The course forum setting goes back to your account’s default.
For class and blended courses, when the row gives no value, Spaces goes back to 0, Delivery goes back to in-person and Timezone goes back to your account’s time zone. Under Booking Options, Date requests, Group requests and Allow Waitlist are switched on, and a course that accepts bookings Manually changes to Instantly.
For on-demand courses, Delivery goes back to on-demand when the row gives no value.
For on-request courses, Pricing Option, the availability and travel fields, Duration and Timezone are saved again from the row. The prices saved on the course are replaced by the row’s Pricing Option, and its saved duration options are replaced by one.
Description, Course Code, Keyword, Meta Description, Owner, Course Welcome Content, the image, categories and tags are kept when the row gives no value. For class, blended and on-demand courses, prices are kept too. For class and blended courses, so is the Online Join URL. When the row does give prices, categories, tags or an image, they replace the ones saved on the course. Course Welcome Content from the row also removes the attachments saved with the old welcome content.
The Cademy ID, the Slug and the course’s lessons are not written by the import.
Check currency before updating booked courses. The import does not apply the course editor’s currency lock. Give the course’s current currency in the row: a blank, unmapped or invalid Currency resets it to your account currency. If a booked course needs a different currency, contact Cademy Support before importing the change.
When Update Existing Courses Is Off
Every row creates a new course. A Cademy ID in the file is ignored. If the web address name is already used by another of your courses, Cademy adds a short code to the end of it.
Related Guides
Frequently Asked Questions
Can an import assign an archived user as Owner?
No, the row fails. A System Admin must reactivate the user first. See Remove a Team Member’s Access (Archive a User).


