Import bookings from a spreadsheet

Bulk-create bookings from an Excel file on the management calendar: download the tenant's own template, fill one row per booking, fix what the preview flags, then book everything at once — and re-import whatever was skipped.

Updated 20 Aug 2026

One row per booking, one file for the lot: the management calendar’s Import takes an Excel sheet and turns it into real bookings, with every rule — clashes, quotas, booking windows — still enforced. It is the fastest way to load a term’s recurring meetings, and the way to bring your booking history’s future half with you when moving in from another system.

1. Open the calendar and press Import

Import sits beside Book at the top of the management calendar.

Open Management calendar
Import, next to Book on the management calendar.

Import, next to Book on the management calendar.

The dialog that opens has pages down the left: Import, Import IDs, and — when your tenant uses booking purposes — Purpose IDs.

The Import page: download the template, fill it in, upload it back.

The Import page: download the template, fill it in, upload it back.

2. Check every room has an import ID

The sheet names a room by its Access ID or its email address — never by its display name. The Import IDs page lists every bookable room with both, each with a copy button, and Download takes the whole table as its own Excel file to keep beside the template while you fill it in.

Import IDs: every room's access ID and email, ready to copy.

Import IDs: every room's access ID and email, ready to copy.

A room with no Access ID and no email cannot be named in the sheet. Point at its row and a pencil appears — it opens the resource form so you can give it one without leaving the dialog; the field is Access ID, on the resource’s basic page.

If your tenant asks for a booking purpose, the Purpose IDs page does the same job for purposes. A purpose’s Import ID is set on the purpose itself; the row’s pencil opens it too.

Purpose IDs: the code the Purpose column expects.

Purpose IDs: the code the Purpose column expects.

3. Download the template

Download template builds the file from your own tenant — your purposes, your booking form’s extra fields — so the columns below are the general shape, not necessarily your exact sheet. It arrives with one sample row showing the expected formats.

ColumnWhat goes in it
Purpose import IDOnly present when your tenant has booking purposes. The purpose’s import ID, from the Purpose IDs page. Leads the sheet
SubjectThe booking’s title
Start / EndYYYY-MM-DD HH:mm
Room import IDThe room’s Access ID or email. Several rooms on one booking: separate them with commas
AttendeesEmail addresses, comma-separated
OrganizerA user’s email address. The booking is made in their name, under their permissions
Number of room usersA number, for rooms that count occupancy
Series IDOptional. Rows sharing a Series ID become one booking series; blank rows stay standalone
One column per extra fieldThe header carries the format it wants — YYYY-MM-DD, HH:mm, yes/no, 123, or the option names

Extra fields that take a file or formatted text cannot ride in a spreadsheet and are simply not in the template — set those on the booking afterwards if you need them.

4. Fill in your bookings

One row per booking. Three habits keep a big sheet importable:

  • Do not reorder or delete columns. The file is read by position.
  • Blank rows are skipped, and every message you see later names the row by its real Excel row number — so leaving gaps is safe, shuffling is not.
  • Give repeating meetings one Series ID each (Q3-PLAN, STANDUP), so they arrive grouped as a series instead of as loose bookings.

5. Upload it and fix what it flags

Drop the file on Select Excel file (.xlsx or .xls). The dialog reads it and answers with one line — ready and need attention counts — and then lists only the rows with a problem, each showing just the field that failed:

Only the problem rows are listed, each with the one field that failed.

Only the problem rows are listed, each with the one field that failed.

What it saysWhat it means
Room access ID or email is missingThe Room column is empty on that row
No room matches this access ID or emailAt least one of the row’s room keys is not on the Import IDs page
Start or end time is missing or invalidA time cell is empty or not YYYY-MM-DD HH:mm
End time must be after start timeThe two cells are swapped, or equal
No user matches this organizer emailThe Organizer address does not belong to a user who can book
No booking purpose matches this import IDThe Purpose cell does not match anything on the Purpose IDs page
Duplicate of an earlier row (same room and time)Two rows would create the same booking; only the first is kept

Fix the sheet in Excel and upload it again — Clear discards the current file. A sheet with nothing to flag does not pause here at all: the moment every row is clean, the dialog moves straight on.

6. Review and book

The clean rows land in the booking form’s series overview — grouped by Series ID, each row checked against the server for the things a spreadsheet cannot know: clashes with existing bookings, quotas, booking windows and the rest of the booking rules. A row that fails any of them shows as a conflict; the overview names the person it clashes with when that is the reason, but it does not say which rule refused the others — open the row if you need to know.

The imported rows, grouped by series and checked against the estate.

The imported rows, grouped by series and checked against the estate.

Two ways to finish:

  • Book all — books everything, and stops if anything cannot be booked.
  • Skip conflicts & book — books what it can and sets the rest aside.

7. Collect the leftovers

After Skip conflicts & book, the Bookings created dialog counts what was Booked and what was Bypassed, with the reason on each skipped row — and its own instruction: Fix the skipped rows and import them again.

Download takes the skipped rows as a spreadsheet in exactly the template’s columns, plus one trailing Import result column carrying the reason. Fix the cells, and the same file goes straight back into step 5 — the result column is ignored on the way in. Export all takes every row, marked Success or not, as the import’s record.

A loop: a spreadsheet is uploaded, its rows are checked, clean rows become bookings, and the rows that could not be booked are handed back as a spreadsheet in the same columns, which is fixed and uploaded again.

Whatever cannot be booked comes back as a spreadsheet in the same columns, so fixing and re-importing is the same file going round again.

8. Check it worked

The new bookings are on the calendar behind the dialog — filter to one of the imported rooms and look at the week you loaded. A booking made for a room that requires approval arrives as a request, not a confirmed booking — see Approve or reject a booking request.

What this does not cover

  • The export button is a report, not a round-trip. The download icon on the same toolbar produces the booking report — check-ins, durations, attendee counts — whose columns do not match the import template. To reproduce bookings elsewhere, keep the sheets you imported.
  • Employees have their own version. In the Offision app, the booking form’s Multiple page carries an Import for a personal series — same template, minus the Organizer column, because the booker is always the organizer.
Export booking report: a report of what happened, not an importable file.

Export booking report: a report of what happened, not an importable file.