Skip to main content

Import a List of Courses from a CSV or Excel File

Create or update courses in bulk from a spreadsheet, map columns, match existing courses and publish them after the import.

Written by Artur Binzaru

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

class

On set dates: workshops, events, classes and webinars that run on scheduled dates.

on-demand

On-demand online course: pre-recorded content and self-paced e-learning.

on-request

On-request: private training, 1-to-1 sessions, coaching and tuition.

blended

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 /courses/, up to the next / or ?, not from the Imported Courses list, which shows it in capital letters. Leave it blank for new courses.

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 course, workshop or training session. To pick one for every row, choose Fixed value.

None.

Level

All, Beginner, Intermediate or Advanced.

All.

Course Categories

Category names separated by commas. To place a category under a parent, write the parent first, for example Health and Safety / First Aid. Cademy creates a category that does not exist yet.

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

GBP, USD, EUR, AUD, CAD, NZD, ZAR or MYR.

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 49.99, with no currency symbol. A price with no name is named General Admission (Offer 1) or Offer 2 to Offer 4. A name with no readable price gets a price of 0.

No prices.

Spaces

A number. Class and blended courses only.

0.

Delivery

in-person, online or hybrid for class and blended courses. On-demand courses use on-demand. On-request courses do not use this field.

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 Europe/London. Class, blended and on-request courses only.

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, free, price-range or price-offers. With price-range, the lowest and highest offer prices in the row become the range. With price-offers, the offers in the row are the prices.

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

UK Wide, Internationally or Specific Locations. On-request courses only.

Internationally.

Educator Travel Locations

City names separated by commas, for example Edinburgh, Glasgow. Cities that Cademy does not recognise are left out. On-request courses only.

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.

  1. Under Start an Import, select Courses Import. The Import courses window opens.

  2. 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.

  3. 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.

​

Import courses window at Upload a file to import, with the links View example file and Learn more about imports, the Drop or Select a file area with a Select file button, and Cancel and Next

​


​

Map Your Columns to Course Fields

The mapping table lists every Cademy field in alphabetical order.

  1. 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.

  2. 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).

  3. With CSV column, choose the column under File Column, then check Sample Data. It shows values from the first five rows of your file.

  4. 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.

  5. Map the required fields Name and Type. While either one is not mapped, Cademy shows Incomplete mappings and Next stays unavailable.

  6. 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.

​

Import courses window at Configure your import: a warning box titled Incomplete mappings lists No mapping for required field Name and No mapping for required field Type; below it the mapping table, where most fields are set to Do not import and Course Categories and Course Code take columns of the file

​


​

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:

  1. 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.

  2. 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.

  3. 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.

  4. 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.

​

Import courses window reading We will attempt to import 6 records, with the switch Update existing courses turned on and outlined, a box titled Deduplication Logic that lists Cademy Course ID, Course Code and Course Name, and the buttons Back and Import Data

​

Start the Course Import

  1. Check the number of records and the Update existing courses switch.

  2. Select Import Data.

  3. 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.

Your Imports table with the columns Type, Date, Imported, Failed, Source and Status: two Courses imports with 0 imported and 4 failed, then Organisations, Contacts and Bookings imports with no failures, all from a CSV File and Processed

​

Failed Courses (2) window with the columns Row Number and Reason: row 3, a reason saying that the required field Type needs a value for this record; row 5, Admin with Email <a href="mailto:bookings@example.com" rel="nofollow noopener noreferrer" target="_blank">bookings@example.com</a> not found

​

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.

  1. Open each course from Imported Courses.

  2. Check every important setting, not only the fields you mapped.

  3. For class and blended courses, select Edit Course, open Pricing & Delivery and check the venue.

  4. ​

    The Currency column sets the course default. A date can have its own currency: see Choose the Currency for Your Course Prices.

  5. 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.

  1. Cademy ID (Cademy Course ID on this screen)

  2. Course Code

  3. 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).

Did this answer your question?