Skip to main content

Import Courses

Create or update courses in bulk from a CSV or Excel file: prepare the file, map its columns, control how existing courses are matched and check the results.

Written by Artur Binzaru

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

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

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 /courses/ and ends before the next / or ?, if the address has one. Do not copy it from the Imported Courses list: that list shows the ID in capital letters, and the ID in your file must match the course’s ID exactly, including capital letters. Use it only to update a course that already exists. For new courses, leave it blank or set the field to Do not import.

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: bootcamp, class, clinic, coaching, conference, course, event, experience, forum, hackathon, lecture, lesson, masterclass, meeting, meetup, mentoring, micro-learning course, one-to-one, private session, private tuition, program, retreat, seminar, service, study group, summer camp, training program, training session, tutorial, webinar, workshop, workshop series.

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 an image address from your file, 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. Enter a price as a plain number, such as 25 or 49.99, with no currency symbol. A price with no name is named General Admission (offer 1) or Offer 2, Offer 3 or Offer 4. An offer with a name and no readable price is created with 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. 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, 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. 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.

  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. To open the example file from here, select View example file.

  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.

​

​


​

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.

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

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

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

  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.

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:

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

  2. If a saved Name matches, Cademy uses that saved location. Address values in the row do not change it.

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

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

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

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

  1. Cademy ID, called Cademy Course ID on this screen

  2. Course Code

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

  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 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 class, on-demand, on-request or blended in lower case. The Cademy ID column holds only IDs of your own courses, not IDs from the example file or another account. The row’s web address name is not already used by another course, including an archived course. The web address name has at least three characters: a Name that is very short, or has no Latin letters or numbers, needs a Slug. Address: Country is a full country name. A row whose address matches no saved location has a street, a city and a postcode that Cademy’s map lookup can find. A row with Student Travels to Educator set to yes has a city. If none of these applies, send the row and the date of the import to Cademy Support.

​


​

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.

  1. Open each course from Imported Courses.

  2. Check every important setting, not only the fields you mapped. Include the name, type, delivery, description, prices, owner and location.

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

  4. Add course dates separately. A course import does not create dates. See Import Course Dates.

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

​


​

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.

Did this answer your question?