Skip to main content

Import Bookings (Orders) from a CSV or Excel File

Bring past or current bookings into Cademy as orders from a spreadsheet, set each cost and payment status, choose emails and check failed rows.

Written by Artur Binzaru

This guide is for course providers who want to bring bookings into Cademy from a spreadsheet, for example bookings taken in another system. It explains what the Orders import creates and emails, how to prepare a CSV or Excel file, how to run the import and how to check the result.

An order is Cademy’s record of a booking: who booked, which course and course date, how many spaces, the cost and whether it is paid. A registration is one person’s place on a course, and a contact is a person saved in your Cademy account. A course date is a date on which a course runs; an on-demand course has none.

If you only need to put learners on a course and do not need a cost or payment record, use the Registrations import instead: see Add Learners to Courses in Bulk (Import Registrations). If you are not sure which import you need, start with Import Your Data from a Spreadsheet (CSV or Excel).

​


​

Bring Existing Bookings from Another System (What the Orders Import Does)

  • Each row creates one order for one course. The contact in the row is the person who booked and the person attending.

  • An on-demand course has no course dates, so its rows need none. Every other course needs a course date that already exists in Cademy.

  • The import always creates new orders. It cannot find or change an order you already have, so importing the same rows twice creates the orders twice.

  • The import does not check whether the person is already booked on that course date, and it does not check how many spaces the course date has left.

  • A row cannot hold guest names, more than one course, add-ons, discounts or vouchers.

  • Cademy records the amounts you import. It does not take a payment, and it does not work out tax or fees from the course price.

  • An import cannot be undone or cancelled once it has started. To remove a test or duplicate order afterwards, see Delete Test or Duplicate Orders and Registrations, which explains which orders can be deleted.

​

Can I Keep the Original Booking Date?

No. Created date is listed on the mapping screen but is not used: every order gets the time of the import as its created date. For learner records without an order, the Registrations import has its own Created date field: see Add Learners to Courses in Bulk (Import Registrations).

​

What Each Imported Booking Row Creates (Paid, Unpaid or Awaiting Approval)

  • A paid row is saved with the whole cost as paid. The person has their place on the course straight away.

  • An awaiting_payment or overdue row is saved as an invoice order with nothing paid. The person’s place stays pending until the order is paid, unless Allow Course Access Before Invoice Is Paid is switched on in your invoice settings under Settings > Payments.

  • If the course is set to require approval of its bookings, the order starts as awaiting approval, also when it is paid. The person’s place stays pending until the order is approved.

Does Importing Bookings Email Customers? (Send Confirmation)

Send Confirmation decides whether the person in a row is emailed about the order when the row is imported. For courses that do not require booking approval, with yes, true or 1:

  • A paid row sends the order confirmation.

  • An awaiting_payment row sends an email that asks for payment. If course access before payment is switched on, the order confirmation is sent too.

  • An overdue row sends no email when it is imported.

With no, false, 0, a blank cell or the field on Do not import, none of these emails is sent.

​

Send Confirmation does not control emails that Cademy sends for other reasons, such as these:

  • If the course requires booking approval, Cademy sends the waiting-for-approval email instead, even when Send Confirmation is off.

  • Lesson notifications follow the course’s lesson schedule: see Release Lessons Over Time and Set Due Dates.

  • If the course has reminder emails set up, Cademy sends them before a course date to everyone who has a place on it, including people you imported. A pending place gets none. See Set Up Automatic Confirmation and Reminder Emails.

  • When an unpaid order’s invoice passes its due date, Cademy emails the person and your team if Overdue Payments Reminder Emails is on under Settings > Payments.

When a row is imported, Cademy does not email your team about the new order.

​


​

Before You Import Bookings: Roles, Row Limits and Checks

The Orders import is available on every Cademy plan. To run it you need the Course Owner or System Admin role. Only a System Admin can open the Orders page afterwards to look at the imported orders.

​

Your plan limits the rows in one file: up to 1,000 on the Free, Starter and Pro plans, no limit on Teams, and a limit set for your account on Enterprise. A file with too many rows is refused at upload with a message that starts You cannot import more than. Split the rows over several files.

​

Check these points before you import:

​


​

Prepare Your Bookings Spreadsheet (CSV or Excel)

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. Each row below it is one order.

​

The import window has a View example file link. It opens this example spreadsheet: orders import example file. Its column Total Paid is not chosen for you, because the Cademy field is named Total Paid / Cost: choose the column by hand, or rename the heading. To start from the example, copy it into a file of your own.

​

Columns for the Person Who Booked (Contact Details)

Each row needs at least one detail of the person who booked. Include Email, First Name and Last Name. Cademy finds a contact you already have by email address, or by Cademy ID (the part of the contact page’s address after /contacts/) if you map it and leave Update existing Contact on. Otherwise it creates a new contact, so a row with no email address and no Cademy ID creates a new contact every time. A row with an email address that is not valid fails.

​

You can add columns for other contact fields, such as Phone, Tags or contact fields you have added yourself. Import Customers and Learners (Contacts) from a Spreadsheet lists the contact fields.

​

If you include an Educator Marketing Consent column, write yes only for people who gave consent and leave the cell empty for everyone else. A no is saved as consent given, and so are false and 0 in a CSV file. “Choose Whether the Import Updates Existing Contacts” below explains what this field does to contacts you already have.

​

Columns for the Order: Course, Date, Cost and Payment Status

Only Course is marked as required on the mapping screen. Course Date is not marked, but every course that is not on-demand needs it.

  • Course - the course the order is for: its name, its Cademy course ID (the part of the course page’s address after /courses/ or /courses/edit/, up to the next /) or its course code. Use the same kind of value in every row, exactly as in Cademy, including capital letters and spaces. If two courses have the same name, Cademy picks one of them, so use the ID or the code for those. In an Excel file, a name or code made only of digits, such as 101, must be in a cell formatted as Text, or the course is not found.

  • Course Date - the day, or the day and time, the course date starts. Leave it blank for an on-demand course. “How the Import Finds the Course Date (Date Formats)” below explains the formats.

  • Currency - one of these codes: GBP, USD, EUR, AUD, CAD, NZD, ZAR or MYR. If the cell is blank or holds anything else, Cademy uses the selected course date’s currency. If that date has no currency of its own, or the course is on-demand, it uses the course’s currency.

  • External Order Ref - a reference from another system. Cademy saves it on the order. It does not join rows into one order.

  • Payment Status - paid, awaiting_payment or overdue, spelled exactly like this. Capital letters do not matter. If the cell is blank, the order is saved as paid. A row with cancelled fails with Rows with payment_status = "cancelled" cannot be imported; create the booking and cancel it afterwards.

  • Secondary invoice ref - an invoice reference of your own. Cademy saves it as the order’s invoice reference.

  • Send Confirmation - yes, true or 1 to email the person. “Does Importing Bookings Email Customers?” above explains which email is sent.

  • Spaces - the number of places on the order, as a whole number. If the cell is blank, the order has 1 space. Only the contact in the row is registered. Extra spaces have no names.

  • Total Paid / Cost - the total for the whole order, not the price of one space, as a plain number such as 120 or 120.50. If the cell is blank, the cost is 0.

For example, if the course uses GBP and the selected date uses EUR, a blank Currency creates an EUR order, so enter the cost in euros: Cademy does not convert amounts. Entering GBP for that date fails the row. See Choose the Currency for Your Course Prices.

​

Why an Imported Order Shows a Cost of 0 or Paid

Important: Cademy does not refuse a value it cannot read in these fields. It saves a default with no warning. A cost with a currency symbol or a comma, such as £120 or 1,200 in a CSV file, is saved as 0 (Sample Data on the mapping screen shows each value as Cademy reads it). A payment status that is not one of the words above, such as unpaid, is saved as paid. Spaces that are not a number above 0 are saved as 1. Check these columns before you import, and a few orders afterwards.

The import cannot change an order afterwards. If orders were already saved with a wrong cost or payment status, contact Cademy Support with their IDs, which the Imported Orders (unified) list shows (see “Check Which Booking Rows Imported or Failed” below).

​

How the Import Finds the Course Date (Date Formats)

On the mapping screen you choose the format your Course Date column uses. Cademy then looks for a course date of the row’s course in this way:

  • With a format that has only a day, such as D/M/YYYY, Cademy looks for a course date that starts on that day. If the course has more than one course date starting that day, use a format with a time.

  • With a format that has a day and a time, such as D/M/YYYY HH:mm, the time must be exactly the start time of the course date.

  • Do not use the format D-MMM-YY. It has no time, but Cademy treats it as a time of 00:00, so it finds only course dates that start at midnight.

  • Cademy reads the day and time in your account’s time zone.

  • The first format in the list, D/M/YY HH:mm, expects a two-digit year. For a value such as 14/11/2025 09:30, choose D/M/YYYY HH:mm. A format that does not match your file makes Cademy read a different day, or nothing. The row then fails, unless the course has a course date at the day and time Cademy read: the person is then booked onto that date.

  • In an Excel file, format the Course Date cells as Text before you type the dates, or save the file as CSV. A cell Excel stores as a date reaches Cademy as a number such as 45975.395833, which Sample Data shows, and the row fails with Value: … is not a valid value for field 'Course Date'.

If your file has letters with accents or symbols such as é or £, upload an Excel file. A CSV file can be read with these characters wrong, for example Zoë as Zoë, and a course name with one is then not found.

​


​

Run the Orders Import: Upload the File and Map Contacts

Open the Orders Import (Settings > Imports)

  1. In the Cademy admin dashboard, select Settings in the main menu.

  2. In the Settings menu, under Tools, select Imports. The page shows Start an Import at the top and Your Imports below it.

  3. Select the Orders card. The Import Orders window opens. The top of the window names its three steps: Select file, Map Contacts and Map Orders.

Import Orders window at its first step: the steps Select file, Map Contacts and Map Orders, outlined, above Upload a file to import with the links View example file and Learn more about imports and an area marked Drop or Select a file with a Select file button

If Tools and Imports are not in the Settings menu, your role is Facilitator. Ask a System Admin or Course Owner on your account to run the import.

​

A System Admin can also start the import from a course’s Orders tab: select Import. Course is then already set on the Map Orders step, and Course Date too if you are viewing one course date.

​

Upload Your Bookings File

  1. Drag your file onto the area marked Drop or Select a file, or select Select file and choose it. Upload one file at a time.

  2. Wait while Cademy reads the file. The window then moves to the Map Contacts step by itself and shows the heading Configure your import.

If Cademy shows The uploaded file appears to be empty, check that the first sheet has a row of headings and at least one row below it, then upload the file again.

​

Map the Contact Columns (Email, First Name, Last Name)

The screen lists the contact fields in alphabetical order in a table with the columns Cademy Field, Value Source, File Column and Sample Data.

  1. Find Email. If Cademy has not matched it to a column, set Value Source to CSV column and choose the column that holds the email addresses under File Column. Sample Data shows values from the first five rows, so you can confirm the choice.

  2. Set First Name, Last Name and every other contact field you want to import in the same way. Leave the rest on Do not import.

  3. Select Continue.

Map at least one contact field. The window lets you continue with none, but then every row fails with Missing student data, as does any row with no value in the contact columns you mapped.

​

Leave Organisation on Do not import. The Orders import does not use it to set the organisation of the person or the order, and mapping it can create new organisations when Create organisations when auto-linking is on. Educator Marketing Consent also needs care: the next section explains why.

​

Choose Whether the Import Updates Existing Contacts

The next screen starts with We will attempt to import and has one switch, Update existing Contact. The switch is on to begin with. It decides what happens when a row’s email address belongs to a contact you already have. It never changes orders.

​

Import Orders window at the step Map Contacts: a heading that starts We will attempt to import, the switch Update existing Contact, turned on and outlined, and the buttons Back and Continue
  • On: Cademy writes the mapped values from the row over the contact’s saved details.

  • Off: Cademy leaves the contact’s details as they are. Only tags from the file are added.

Either way, the new order belongs to that contact. A row whose email address no contact has creates a new contact. Import Customers and Learners (Contacts) from a Spreadsheet explains what an update changes, including addresses.

Important: With the switch on, the import also sets Educator Marketing Consent on every contact it finds. Any value Cademy reads, even no, saves consent as given; a blank cell, or the field on Do not import, saves it as not given. To keep the consent your contacts already have, switch Update existing Contact off.

When the switch is set as you want it, select Continue. The Map Orders step opens.

​


​

Map the Order Details and Start the Import

The Map Orders step has the same table, for the ten order fields described in “Columns for the Order: Course, Date, Cost and Payment Status” above. Course is marked REQUIRED. Until it is mapped, a box named Incomplete mappings is shown and Import cannot be selected.

  1. Map Course. A second list appears in File Column: choose Course Name, Cademy Course ID or Course Code to say what your column holds. Choose the column first, because choosing a different column sets the second list back to its first option. If every row is for the same course, set Value Source to Fixed value and choose the course.

  2. Map Course Date, then choose the format your column uses in its second list, again after you have chosen the column. If every row is for the same course date, use Fixed value: once you have chosen a fixed course, you can pick one of its course dates.

  3. Map Total Paid / Cost, Payment Status, Spaces, Currency and Send Confirmation if your file has them. For Send Confirmation, Fixed value shows a switch: switch it on to email everyone in the file.

  4. Check Sample Data for every field you mapped.

  5. Select Import. Cademy shows Import started, and the window changes to Processing Import.

Import Orders window at its third step, Map Orders: a mapping table where Course, marked Required, takes the column Course and Course Date takes the column Course Date, each with a second list beside it, both outlined, with sample data Fire Marshal Training and 24/11/26 09:30; Created date and Currency are set to Do not import

To change an earlier choice, select Back. Each screen you return to starts again (the mapping goes back to Cademy’s own matches and Update existing Contact back to on), so set every choice again, including the second lists, before you select Import.

​


​

Check Which Booking Rows Imported or Failed

You can close the window: Cademy carries on. When it has finished, the window shows Import Complete with the number of orders imported and of failed rows.

​

Import Orders window showing a green tick, Import Complete, Imported 4 orders, with 1 failed row(s), and a warning box reading Some rows could not be imported. Review the failed rows in Settings, Imports

​

To check an import afterwards, open Settings > Imports and find it in Your Imports. The newest import is the top row, and an Orders import has the type Orders (unified), which the TYPE column can cut short. Read IMPORTED, FAILED and STATUS in that row.

​

Your Imports table with the columns Type, Date, Imported, Failed, Source and Status. The top row, outlined, is an Orders import dated 01/10/26, 10:30 with 4 imported shown as a link, 1 failed shown as a plain number, CSV File and Processed; below it are the rows Occurrences and Courses
  • STATUS shows PROCESSING while Cademy works through the file and PROCESSED when it has finished. PROCESSED does not mean that every row succeeded, so always check FAILED.

  • The status FAILED, or an import that stays at PROCESSING with no email, means it did not finish. Before you upload the file again, ask a System Admin to check on the Orders page whether any orders from it were created. If it stays at PROCESSING, contact Cademy Support with the import’s type and the date and time shown in Your Imports.

  • IMPORTED is the number of rows that created an order. Select it to open Imported Orders (unified), with each order’s course, the person’s name and email address, and the order’s ID.

  • FAILED is the number of rows that created no order. It cannot be selected.

To see which rows failed and why, open the email Cademy sends to the user who started the import when it has finished (if that user still has access to the account). Its subject is “Cademy: 25 orders imported”, with your number. For failed rows it has a table with your file’s columns and an Error column.

​

Why a Booking Row Fails: Error Messages and Fixes

The most common messages in the Error column of the import email, and what to check. To try again, put only the corrected rows in a new file and import that file: importing the whole file again creates a second order for each row that worked the first time.

  • Course with … not found. No course in your account has exactly that name, ID or code. Check the spelling, capital letters, spaces at the start or end of the cell, and your choice in the second list for Course.

  • The required field "Course" needs a value for this record. The Course cell is blank.

  • Could not find a matching course date for this row. Add a valid "Course Date" column and re-upload. Cademy found no course date at the day or time it read. Check the format you chose, the time, and that the course date exists.

  • Course date does not match the course. Cademy found a course date at that day or time, but it belongs to another course.

  • This row is in …, but the course date is priced in …. For example, the row is in GBP and the date in EUR. Check that you chose the intended date, then correct the row’s currency and cost. Do not change a booked date’s currency just to force an import through.

  • Error mapping contact data, Error mapping order data or Error importing unified order. Cademy could not read or save the row. Check that the email address is valid. If it is and the row fails again, contact Cademy Support with the row and the message.

​


​

Frequently Asked Questions

Can I import bookings for an on-demand course?
Yes. Map Course and leave Course Date on Do not import, or blank in those rows.

Did this answer your question?