This guide is for Course Owners and System Admins who need to create or update many courses at once from a spreadsheet.
A course import reads a CSV or Excel file. Each row 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, and an import cannot be cancelled or undone once it has started.
Start with a small test file. Imported changes can affect several courses at once. Test the mappings and results with a few rows before importing the complete file.
Prepare the 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.
You match your columns to Cademy fields after the upload, so your headings do not have to follow a set format. A column is matched for you when its heading is the same as the field name, for example Name or Course Code. The example file uses Cademy’s internal names for most columns, such as address_city, and those are matched too. Its columns for Name, Type, Delivery, Course Code, Owner, Spaces and Online Join URL are not matched for you, so map them yourself. Its duration_config column is not used.
Required Columns
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
Add any of these fields that your file has information for. 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 | The ID Cademy gave the course. Copy it from the address of the course page in the admin dashboard: it is the long code that starts straight 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 | One of: | 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 an image address from your file, 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. Enter 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. A value that is not a number fails the row. | 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. A user Cademy cannot find fails the row. | No owner. |
Hosted Externally | Yes or no. Yes means the course 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. |
A value Cademy cannot read is not always rejected. For Delivery, Level, Keyword, Currency, Timezone, Pricing Option, Educator Travel Settings, the yes or no fields, Spaces and the offer prices, a value that is not accepted is treated as a blank cell. The row is still imported and the field gets its default. An offer that has a name still gets created, with a price of 0. For example, a class course with a Delivery of virtual is created as in-person. Check these columns before you upload the file.
Upload the 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. To open the example file from here, select View example file.
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 Cademy Fields
The mapping table lists every Cademy field in alphabetical order. It has four columns: Cademy Field, Value Source, File Column and Sample Data.
Check the fields that Cademy mapped for you. A file column is mapped when its heading is the same as the Cademy field name or the field’s internal name, ignoring capital letters and spaces before or after it. Every other field starts as Do not import. A heading with extra words, such as
name (required)in the example file, is not mapped for you.For each field, choose a Value Source. With Do not import, the import takes no value for this field from your file. With CSV column, the field takes its value from a column of your file. The choice has this name for Excel files too. With Fixed value, every row gets the same value, which you enter or choose in the table.
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. Choose the option that matches your file. For Owner, choose Cademy Admin ID or Email. For Duration, choose the unit. For Course Categories, choose the character your file puts between a parent and its child. For Course Tags, choose the character your file puts between tags. The list starts on its first option. Choose the column first, because choosing a different column sets the second list back to its first option.
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.
In this example, Name and Type are not mapped yet, so the Incomplete mappings box is shown above the table.
Assign Saved Locations
For predictable matching, create and name the saved locations first. Go to Settings > Locations and give each location a unique Name before importing.
A saved location is a venue stored under Settings > Locations that you can use on any course. For class and blended courses, Cademy chooses the location in this order:
If Location Name has a value, Cademy looks for a saved location with the same Name. Capital letters and spaces before or after the name are ignored, but the rest of the wording must match exactly.
If a saved Name matches, Cademy uses that saved location. Address values in the row do not change it.
If Location Name is blank or does not match, Cademy uses the Address fields. Address: City is required for this step. If Address: Country is blank, Cademy uses United Kingdom.
Cademy looks for an active saved location whose city, country, street and postcode contain the text in the row, ignoring capital letters, and uses the first one it finds. The match is loose: the city Newport in a row also fits a saved location in Newport Pagnell. A row without a street matches only a saved location without a street, and the same applies to the postcode.
If no saved location matches, Cademy creates one from the address and assigns it to the course. It can create a location only when the row has Address: Street, Address: City and Address: Postcode and Cademy’s map lookup finds the address. Otherwise the row fails.
If there is no matching Name and no city, the course is imported without a location.
Write the country name in full, for example United Kingdom. If Cademy has to create the location and does not recognise the country, the row fails.
Avoid duplicate or reused location Names. Name matching also finds a location that you have deleted under Settings > Locations, because Cademy keeps deleted locations in the background. Use unique Names, and do not reuse the Name of a deleted location in an import file.
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. Cademy matches or creates the location from the address as in steps 3 to 5 above, so give the street, city and postcode unless the address is already a saved location. If Student Travels to Educator is yes and the row has no city, the row 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, even if the course keeps its old address. Check the venue after importing.
Location notes cannot be imported. A saved location that the import matches keeps its Public note and Private / internal note. A location that the import creates has no Name and no Public note, so add them under Settings > Locations after the import.
For full location and note guidance, see Locations.
Choose Whether to Update Existing Courses
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.
How Cademy Finds the Course to Update
When the switch is on, Cademy looks for an existing course for each row. It uses one identifier: the first of these three that has a value in the row.
Cademy ID, called Cademy Course ID on this screen
Course Code
Name, called Course Name on this screen
The value must match exactly, including capital letters. The Deduplication Logic box on this screen lists the same three identifiers. The box reads as if Cademy tries each one in turn. It does not. Cademy searches with only the first one that has a value. If that value matches no course, Cademy does not go on to try the next identifier.
One course matches: Cademy updates that course.
More than one course matches: the row fails with the reason Multiple courses found that match the update criteria.
No course matches: Cademy tries to create a new course from the row. A new course needs a web address name that no other course in your account uses. This is the Slug, or a name made from the course Name when the row has no Slug. If that web address name is already in use, the row fails and no course is created.
Archived courses count as existing courses. A row that matches an archived course updates it, and the course stays archived. When an archived course and an active course have the Course Code or Name that the row is matched on, the row fails with the “Multiple courses found” reason. An archived course also keeps its web address name. Before you import, restore any archived course that a row is meant to update. To create new courses that share a Name with archived courses, switch Update existing courses off. To restore a course, see Publish, Share and Archive a Course.
Check identifiers carefully. A Cademy ID or Course Code that matches none of your courses stops the row from updating a course, even when its Name is the same as an existing course. Cademy then tries to create a new course. A valid Cademy ID from the row becomes the new course’s ID, and the row fails if a course in another account already has that ID. The row also fails when the web address name is taken. Otherwise the row creates a second course.
What an Update Changes
An update does more than fill in the cells you mapped. Cademy builds the course settings again from the row and saves them over the existing course.
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. The saved location is removed when the row gives no location. 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. Any that are blank get the defaults shown in the Optional Columns table. 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.
Put every value you want to keep into the file, test with a few rows first, and review each updated course before you publish it again.
When the Switch 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 so the new course can still be created.
Start the 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 the Results
The import appears at the top of Your Imports on the Imports page, with the type Courses. The table refreshes by itself while an import is processing.
PROCESSING: Cademy is working through the file.
PROCESSED: Cademy has tried every row. PROCESSED does not mean that every row succeeded, so always check the FAILED column.
The table also has a FAILED status, but a course import does not use it.
When processing finishes, Cademy emails the user who started the import, provided that user still has access to the account and has an email address. The email gives the number of courses imported and lists the rows that failed. If a course import stays at PROCESSING and no email arrives, look for its courses 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.
In the Your Imports table:
Select the number under IMPORTED to open Imported Courses. It lists each course that was created or updated, with its type and its Cademy ID, shown in capital letters. Select the eye button beside a course to open it in a new tab.
Select the number under FAILED 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.
In this example, two course imports were processed and all four rows of each one failed.
Why a Row Fails
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 | Cademy does not say which cause applies. Check each of these. Type is |
Review Imported Courses Before Publishing
Every course that the import creates or updates is Unpublished. An unpublished course is visible only to you and to learners who are already enrolled, until you publish it again.
Open each course from Imported Courses.
Check every important setting, not only the fields you mapped. Include the name, type, delivery, description, prices, owner and location.
For class and blended courses, select Edit Course, open Pricing & Delivery and check the venue.
Add course dates separately. A course import does not create dates. See Import Course Dates.
When the details are correct, select Share on the course and change its visibility from Unpublished to Public or Private. See Publish, Share and Archive a Course.
Related Guides
Frequently Asked Questions
Which fields are required?
Name and Type. Every other field is optional, including Delivery. Map Delivery when a course needs a delivery method other than the default.
Do I need a particular plan or role?
Course imports are available on every Cademy plan. You need the Course Owner or System Admin role to open Settings > Imports.
Can I update existing courses?
Yes. Leave Update existing courses on and supply a reliable Cademy ID, Course Code or Name. Cademy uses the first of those that has a value in the row. An update also resets some settings and sets the course to Unpublished, so test first and review every updated course.
Will blank or unmapped fields stay unchanged when I update a course?
Not always. Some fields are kept, such as Description and Owner. Others go back to their defaults, such as Level, Spaces and Delivery. “What an Update Changes” in this guide lists both groups. The Cademy ID and Slug are never changed.
Will an updated course stay published?
No. A course import sets every updated course to Unpublished. Review the course and publish it again after you have checked its details.
Why was a value in my file ignored?
Several fields treat a value they do not accept as a blank cell and use the default. They are Delivery, Level, Keyword, Currency, Timezone, Pricing Option, Educator Travel Settings, the yes or no fields, Spaces and the offer prices. Correct the course in Cademy, or correct the value in your file and import the row again with Update existing courses on.
How does Location Name match a saved location?
For class and blended courses, the wording must be the same as the saved Name. Capital letters and spaces before or after the name are ignored. Create and name your locations before importing, and avoid duplicate or reused Names.
Can I import a Public note or Private / internal note?
No. Those notes are not course import fields. A matched saved location keeps its notes. Add notes to a location that the import created under Settings > Locations after the import.
Does a course import create course dates or lessons?
No. Import the courses first. Then use Course Dates Import or add dates in the course, and add lessons in the course editor.
Why does a PROCESSED import show failed rows?
PROCESSED means Cademy has tried every row. Individual rows can still fail. Select the number under FAILED to see each row number and reason.
Can an import assign an archived user as Owner?
No. The row fails because Cademy cannot find the user. A System Admin must reactivate the user under Users & Facilitators before you import. See Archive and Reactivate a User or Facilitator.
Can I undo an import?
No. Cademy has no undo for an import. Correct each course yourself, or import a corrected file with Update existing courses on. Archiving the imported courses does not clear them for a later import: archived courses are still matched, and they keep their web address names.



