This guide is for Course Owners and System Admins who need to create or update courses in bulk from a spreadsheet.
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 and Upload the File
Go to Settings > Imports.
Under Start an Import, select Courses Import.
In Import courses, select View example file if you need a template.
Prepare a CSV or Excel file with one header row and one course per row. Cademy reads the first worksheet in the file.
Under Upload a file to import, drop the file into Drop or Select a file or select it from your device.
Wait for the upload to finish. Cademy opens Configure your import.
Use the current example course file as a starting point. Keep a backup of the original file.
Configure the Field Mapping
The mapping table shows Cademy Field, Value Source, File Column and Sample Data.
Check any fields Cademy mapped automatically. A file heading is matched when it equals the Cademy field label or internal field name after differences in capitalisation and outer spaces are ignored.
For each field, choose CSV column, Fixed value or Do not import.
When using CSV column, select the correct file column and check Sample Data.
Map the required fields Name and Type. The Next button remains unavailable while a required field is missing.
Map Delivery when the course needs a particular delivery method. It is not currently marked as a required field.
Select Next.
Accepted Type values are class, blended, on-demand and on-request. Use class for an On set dates course.
The importer accepts Delivery values in-person, online, hybrid, on-demand and on-request. For class and blended courses, use in-person, online or hybrid. For on-demand courses, use on-demand or leave Delivery blank. The Delivery mapping is not used for on-request courses; use the on-request availability and travel fields instead.
If Delivery is not supplied, a class or blended course defaults to in-person and an on-demand course defaults to on-demand.
Other available mappings include:
Course identity: Cademy ID, Course Code, Name and Slug
Course information: Description, Meta Description, Keyword, Level, Course Categories, Course Tags, Course Welcome Content and External Image URL
Pricing and capacity: Currency, Spaces, Pricing Option, Duration and up to four Offer Name and Offer Price pairs
Scheduled delivery: Location Name, Address fields, Online Join URL and Timezone
On-request delivery: Available for in-person delivery, Available for online delivery, Student Travels to Educator, Educator Travels to Student, Educator Travel Settings and Educator Travel Locations
Ownership and external hosting: Owner, Hosted Externally and External Hosting Details
Assign Saved Locations
For predictable matching, create and name the saved locations first. Go to Settings > Locations and give each active location a unique Name before importing.
For class and blended courses, Cademy resolves the location in this order:
If Location Name has a value, Cademy looks for a saved location with the same Name. Capitalisation and outer spaces are ignored, but the remaining wording must match exactly.
If a saved Name matches, Cademy uses that saved location. Address values in the row do not replace the matched location.
If Location Name is blank or does not match, Cademy uses the Address fields. Address: City is required for this fallback. If Address: Country is blank, Cademy uses United Kingdom.
Cademy first looks for an active saved location matching the address. If it cannot find one, it creates a saved location from the address and assigns it to the course.
If neither a matching Name nor a usable city is available, the course is imported without a venue.
Avoid duplicate or reused location Names. Name matching can include an archived saved location, so use unique Names and do not reuse the Name of an archived location in an import file.
On-demand: Location Name and the address fields do not assign a physical course venue.
On-request: Location Name is not used. To offer a saved provider venue, map Student Travels to Educator as true and supply Address: City, plus the other address fields when available.
Updating an existing class or blended course? Map the existing Location Name, or enough Address fields to match it, again. Leaving all location fields unmapped removes the saved-location link from the updated course, even if its existing address remains. Check the venue and location notes after importing.
Location notes are not separate course-import fields. When the import matches an existing saved location, that location keeps its Public note and Private / internal note. An automatically created location has no Public note, so add any customer instructions under Settings > Locations after the import.
For full location and note guidance, see Locations.
Choose Whether to Update Existing Courses
On the confirmation step, check the number of records and choose whether to use Update existing courses.
When Update existing courses is on, Cademy chooses the first populated identifier in this order:
Cademy ID, called Cademy Course ID in the confirmation message
Course Code
Name, called Course Name in the confirmation message
Cademy searches using that one identifier. It does not continue to a lower-priority identifier when the selected value is present but does not match. If no existing course matches, Cademy creates a new course.
Check identifiers carefully to avoid duplicates. For example, if a row contains a Cademy ID that does not match, Cademy creates a new course even when its Course Code or Name matches an existing course.
If more than one course matches the selected Course Code or Course Name, that row fails instead of choosing one. Course Code and Course Name matching is exact and case-sensitive.
Updating can change more than the mapped cells. Course Import reapplies defaults to some fields and sets the course's publish controls to unpublished. Do not assume a blank or unmapped optional field will be preserved. Use a small test file and review every affected course before publishing it again.
The existing Cademy ID and Slug are not changed when an existing course is updated.
When Update existing courses is off, every valid row creates a new course.
Review the record count and the update setting.
Select Import Data.
Cademy closes the window and shows Import is being processed.
Monitor and Review the Results
The import appears under Your Imports.
Processing: Cademy is working through the file.
Processed: The import finished. Some individual rows can still have failed.
Failed: The import itself could not complete.
When processing finishes, Cademy emails the admin account that started the import if that account still has active access and an email address.
In the Your Imports table:
Select the number under Imported to open Imported Courses. Use the eye button beside a course to open it.
Select the number under Failed to open Failed Courses and read each row number and reason.
Review Imported Courses Before Publishing
Course Import sets both new and updated courses to unpublished. They are not published on the branded minisite, Cademy Marketplace or embeds until you review and publish them again.
Open each test course from Imported Courses.
Check every important setting, not only the fields you mapped. Include the name, type, delivery, description, pricing, owner, saved location and publishing options.
For class and blended courses, check the venue under Pricing & Delivery. Confirm that the correct saved location and location notes are linked.
Add course dates separately when required. A course import does not create scheduled dates.
Publish the course only after the imported details are correct.
Related Guides
Frequently Asked Questions
Which fields are required?
Name and Type are currently marked as required. Delivery is optional, although mapping it is recommended when you need a specific delivery method.
Can I update existing courses?
Yes. Turn on Update existing courses and supply a reliable Cademy ID, Course Code or Name. Cademy uses the first populated identifier in that order. The importer reapplies some defaults and sets the course to unpublished, so test first and review every affected course.
Will blank or unmapped fields stay unchanged when I update a course?
Not always. The importer reapplies defaults to some course fields. Include any values you need to control, test with a small file and review every affected course. The existing Cademy ID and Slug stay unchanged.
Will an updated course stay published?
No. Course Import sets an updated course to unpublished. Review the course and publish it again after confirming its details.
What happens when Update existing courses is off?
Every valid row creates a new unpublished course.
How does Location Name match a saved location?
For class and blended courses, the wording must match the saved Name after capitalisation and outer spaces are ignored. Create and name active locations before importing and avoid duplicate or reused Names.
What happens when Location Name does not match?
For class and blended courses, Cademy tries the mapped Address fields. Address: City is required. It uses a matching active saved location or creates one. Without a matching Name or usable city, the course is imported without a venue.
Can I import a Public note or Private / internal note?
No. Those notes are not course-import fields. A matched saved location keeps its existing notes. Add instructions to an automatically created location under Settings > Locations after the import.
Does a course import create scheduled dates?
No. Import the courses first, then use Course Dates Import or add dates in the course editor.
Why does a Processed import show failed rows?
Processed means Cademy finished the import job. Individual rows can still fail. Select the Failed number to see each row number and reason.
Can an import assign an archived Owner?
No. A System Admin must reactivate the correct user under Users & Facilitators before importing. See Archive and Reactivate a User or Facilitator.
Will Cademy tell me when processing finishes?
Yes, provided the admin account that started the import still has active access and an email address.






