Purpose: This guide covers importing Events: creating a season of scheduled events in bulk, updating existing events, and the date, location, and lookup rules that event imports depend on.
Related: Importing data into Administrate | Choosing your import workflow
Choosing the action
Events are created per delivery type, so pick the action that matches what you are scheduling:
- createClassroom for classroom or virtual classroom events
- createLMS for self-paced events
- createBlended for blended events
- update to change existing events by Administrate ID
- upsertClassroomEventByExternalId (and the LMS and Blended equivalents) when an external system owns the schedule
Required combinations
Validation enforces a few pairings on event creates:
- Classroom and blended events need a start and an end. Provide either the local date-time columns or the time-zoned ones for each.
- Public events need a location.
- Private events need a financial unit, which resolves from a currency code or name, or a training token type.
Dates, times, and time zones
- Local date-times use the format
2025-11-04T14:00:00. - Time-zoned date-times include an offset:
2025-11-04T14:00:00+03:00. - Time zone name columns must contain a standard identifier such as
America/New_York.
The Excel template shows the expected format when you hover over a column header.
Lookups event imports rely on
- Course: the course template column resolves by course code first, then by ID. Keep course codes stable and unique; import course templates before the events that reference them. See Import Course Templates (CSV).
- Location, tax type, and similar references must already exist and match exactly. A value that resolves to no record, or to more than one, fails the row.
Beyond creating the event
Learners can be registered onto events in bulk; see Import Registrations and Results (CSV). The staff and session tasks below are the other common follow-up imports, though the upsert actions can carry staff and rooms in the same row as the event itself.
Add staff and rooms while creating the event (upsert actions)
upsertClassroomEventByExternalId and upsertBlendedEventByExternalId carry staff and resource bookings on their sessions, so an event can arrive complete in one import instead of needing follow-up staff and booking imports. The LMS equivalent has no sessions, so it does not take them.
Alongside the session columns, give:
- Sessions - Staff - Contact Id (or the contact’s External ID) and Sessions - Staff - Staff Role Id. The contact must already hold that role, so import people before the events that staff them.
- Sessions - Resource Bookings - Resource Id (or its External ID), with optional Details, Start and End. The times default to the session’s own.
Separate values with | to add more than one, as with any other list column. Two instructors need two contact IDs and two staff role IDs: a column with a single value only fills the first entry, so the second instructor would arrive with no role and the row would fail.
One row gives every session the same staff and rooms. A spreadsheet row cannot say which session each instructor belongs to, so everything listed lands on every session of that row. Where instructors or rooms differ by day, use one row per session and repeat the event’s External ID on each: the event is created once, and each row adds its own session with its own staff and rooms.
Re-running an import is safe. Staff and bookings already present are left as they are, and leaving one out of a later import does not remove it.
Add an instructor (or other staff) to an event
Choose the Event record type and the addStaff action. Each row adds one staff member to one event:
- Contact ID of the person to add (an instructor is a contact in a staff role).
- Event ID to add them to.
- Staff Role ID, for example the Instructor role.
- Optionally, set required sessions only to book them on just the sessions whose role they are needed for, rather than every session.
To add the same person across many events, repeat the row per event.
Set an event’s primary instructor
Choose the Event record type and the setStaffToPrimary action. It takes a single column, the Staff ID, which is the ID of the staff record (the person’s booking on that event), not their contact ID. Add the instructor first with addStaff, then use the resulting staff ID here.
Adjust session times
Session times are changed with the Session record type and the update action, which accepts plain numeric session IDs alongside the new start and end values.
Watch out for
- Connected systems. Event creation can flow to integrations such as LMS platforms and calendars. See Importing when other systems are connected.
- “Not found” lookups are the top failure source for event imports, and they surface only while the import runs, not during upfront validation. Confirm courses, locations, and tax types exist before importing.
- Time zones deserve a pilot row. Import one event, open it, and confirm the times display as intended before loading the season.
- No rollback: a partially failed import leaves the successful events in place. Correct and re-run only the failed rows.