Skip to main content

How do I migrate bookings into Optix?

As an admin, learn how to bring your existing upcoming bookings into Optix during migration

Written by Raul Zhou

Thinking about migrating your existing bookings into Optix? With the right setup, a bulk booking import can bring your members' upcoming reservations into Optix so nothing falls through the cracks during your transition.

Bulk booking imports are designed to help coworking operators bring upcoming bookings, including repeat bookings, into Optix using a structured import process. This guide explains how bulk booking imports work, what information is required, and what to prepare before submitting your import.

A structured bulk booking import helps you:

  • Bring your members' upcoming bookings into Optix without recreating each one by hand

  • Preserve one-time and repeat booking schedules, including long-running recurring series

  • Launch with your Schedule already reflecting real member activity

  • Catch data issues before go-live, since each booking is checked against your Resource booking rules


Important: Only upcoming bookings can be imported. Bookings that have already ended cannot be brought in through this process.

Booking imports are checked against each Resource's existing booking rules (like notice windows, booking limits, and double-booking settings). A booking that would be blocked on your website or app will also be blocked here.

Before you import your bookings

There are a few important things to confirm before importing your bookings into Optix. You'll need to:

  1. Ensure that your users already exist in Optix. The bulk booking importer does not create users as part of the import

  2. Ensure that every Resource being booked has already been created in Optix, with the booking rules (notice windows, limits, double-booking settings) you want applied

  3. Confirm each user has an account at your organization and is allowed to book. Users who are blocked, or who don't yet have an account at your organization, can't have bookings imported for them

  4. Gather the exact Resource ID or Resource name for each booking. Resource names must match exactly, and if more than one Resource shares the same name, the import uses the first match, so unique names or Resource IDs are recommended

  5. Decide how you want repeat bookings represented. The import treats each row as the first occurrence of a series, with the recurrence pattern controlling the rest

  6. When preparing your spreadsheet, make sure every row has the same number of columns as the header row. Rows with missing or extra columns can be skipped without a visible error, so it's worth double-checking your file before it's submitted

How bulk booking imports work

Our team will provide a Booking Import CSV template that includes the following fields:

Required fields

  • user_email: The email of the member the booking belongs to

  • resource_id_or_name: The Resource ID, or the exact Resource name

  • start_datetime: The booking start, in YYYY-MM-DD HH:MM format

  • end_datetime: The booking end, in YYYY-MM-DD HH:MM format. Must be later than start_datetime

Optional fields

  • price_override: A fixed price for the booking. If provided, this booking will not draw from the member's allowance

Repeat (recurring) bookings

Every row is a single booking by default. To make a row repeat, fill in the recurrence fields below (all optional) - leave them blank and the row stays a one-off. The row's start_datetime and end_datetime define the first occurrence and its duration; each repeat reuses that time in the Resource's timezone.

Column

What to enter

repeat_frequency

DAILY, WEEKLY, MONTHLY, or YEARLY. Leave blank for a one-time booking - this is the field that turns a row into a series.

repeat_interval

How often the series repeats, for example 2 for every 2 weeks. Defaults to 1.

repeat_on_days

Weekly series only. Enter the weekdays using two-letter codes (MO, TU, WE, TH, FR, SA, SU), separated by spaces, commas, or slashes - for example MO WE FR.

repeat_count

The total number of occurrences in the series, for example 10.

repeat_until

The date the series should stop repeating, for example 2026-09-30. The final day is included in full.

recurrence_rrule

Advanced. A raw recurrence rule, for example FREQ=WEEKLY;BYDAY=MO,WE,FR;COUNT=10. Overrides the fields above - most imports won't need this.

Note: Only include one of repeat_count or repeat_until, not both. If you set any repeat_* field, repeat_frequency must also be set. If both repeat_count and repeat_until are left blank, the series repeats indefinitely (Optix caps this at roughly 300 occurrences and continues the series automatically afterward).

Example

A 1-hour booking that repeats every week on Monday, Wednesday, and Friday for 10 occurrences would look like this (columns in order: user_email, resource_id_or_name, start_datetime, end_datetime, price_override, repeat_frequency, repeat_interval, repeat_on_days, repeat_count, repeat_until):

user@example.com, Conference Room A, 2026-07-10 10:00, 2026-07-10 11:00, , WEEKLY, 1, MO WE FR, 10, ,

An example row like this is included in the template you'll receive, so you can use it as a starting point.

Timezones

Dates and times in the CSV are treated as local time at the Resource's Location, not your organization's default timezone and not UTC. For example, 2026-09-01 14:00 for a Resource in Vancouver means 2pm Vancouver time; the same value for a Resource in New York means 2pm New York time. You'll see booking times shown in the Resource's Location timezone before you confirm, so review this carefully if you have Resources in more than one timezone.

How bookings are billed

If you don't set price_override, the booking is priced using the Resource's current rate, drawing from the member's allowance where available, and the charge is added to their next billing date rather than charged immediately. If you do set price_override, the booking uses that fixed price instead, does not draw from allowance, and is still added to their next billing date. Imported bookings are created with a confirmed status.

What imported bookings do (and don't) trigger

  • Booking confirmation emails and push notifications are not sent for imported bookings, so your members won't be notified individually. Plan your own communication if you want them to know about their migrated bookings

  • If you have booking webhooks or Zapier automations connected to new bookings, those will still fire for imported bookings. Let your integration partners know ahead of a large import

  • Bookings will not sync to connected external calendars (like Google Calendar) as part of the import

  • Each import is added to your organization's Timeline and shows up in your booking activity

Partial success

Every booking is checked against your Resource's booking rules before it's created; nothing bypasses those rules during an import. If some bookings in a batch don't pass validation, the ones that do are still created. Your onboarding contact will follow up on any bookings that couldn't be imported, so you can provide corrected details just for those rather than resending your whole list.

Note: If your organization has a large volume of bookings to migrate, these may be brought in as a few smaller batches rather than all at once, to keep things running smoothly.

FAQs

Can I import past bookings?
No. Only bookings that haven't ended yet can be imported. Historical bookings aren't supported.

Will this create users or resources that don't exist yet?
No. The user must already have an account at your organization, and the Resource must already be created. Bookings can't be imported for users or resources that don't exist.

Will my members get notified about their imported bookings?
No. Imported bookings don't trigger booking confirmation emails or push notifications. If you want members to know about bookings brought over during migration, plan to communicate this separately.

Will imported bookings sync to Google Calendar or other connected calendars?
No. Calendar sync is not triggered as part of the import.

Will my Zapier automations or booking webhooks still fire for imported bookings?
Yes. If you have booking webhooks or Zapier automations set up, they will fire for imported bookings the same as any other new booking. Let your integration partners know before a large import.

Can the import bypass a Resource's booking rules?
No. Every booking is checked against the same booking rules that apply on your website or app, including notice windows, advance booking limits, time slot alignment, and double-booking settings. A booking that would normally be blocked will also be blocked during import.

What happens if only some of my bookings are valid?
The valid bookings are still created. Your onboarding contact will follow up on any that couldn't be imported and why, so you can provide corrected details for just those rather than resending your whole list. Resending everything risks creating duplicates for bookings that already came through.

How are repeat bookings represented in the file?
Each row represents the first occurrence of a series. Use the repeat_* fields (or an advanced recurrence_rrule) to define how the series continues. Weekly series use two-letter weekday codes like MO WE FR for repeat_on_days. Leaving all repeat_* fields blank on a booking with no clear end date creates a very long indefinite series, capped at roughly 300 occurrences at a time and continued automatically afterward.

How are imported bookings billed?
Without a price_override, bookings are priced at the Resource's current rate and draw from the member's allowance where available. With a price_override, that fixed price is used instead and allowance isn't drawn from. Either way, the charge is added to the member's next billing date rather than charged immediately.

Troubleshooting

Some of my bookings didn't get imported
If a booking can't be imported, your onboarding contact will let you know which one and why. Common reasons include:

  • The member's email doesn't match an existing account at your organization, or the member isn't allowed to book

  • The resource name or ID doesn't exactly match an existing Resource

  • The end time isn't later than the start time, or the booking has already ended

  • The booking conflicts with an existing booking on a Resource that doesn't allow double-booking

  • The time doesn't align with the Resource's available time slots, or falls outside its notice/advance booking window

Bookings that pass these checks are still imported, even if others in the same batch don't. Share corrected details for just the affected bookings rather than resending your full list, since resending everything can create duplicates for bookings that already came through.

A booking time looks off by a few hours
Double check that your booking times were prepared in the Resource's Location timezone, not your organization's default timezone or UTC. The same clock time means something different for Resources in different Locations, so this is worth confirming if you have Resources in more than one timezone.

Did this answer your question?