Help

Importing data

Bring bookings, customers, vouchers and bundles across from Acuity, Periode and others.

6 min read

Switching from another system

Move your bookings, vouchers, bundles, customers and memberships into Session from Acuity, Periode or any other tool. Importing brings the data across; this article also covers what your customers experience and the one link you send them.

Your customers

Importing creates an account for every customer, but it's a placeholder until they set up a login. They claim it with one link you send them (by email, text, poster or QR code): bookasession.org/your-link/welcome

  • They set up a login with their existing email - the same address you had on file. It's "set up your account", not a fresh sign-up: their account already exists, so everything is linked automatically the moment they claim it.
  • They land on their account page showing what came across - upcoming bookings, session credits, gift balance and membership - so they can see nothing was lost.
  • Credits and vouchers just work - carried-over credits apply automatically at booking, and voucher codes keep working.

The data is safe and intact whether or not a customer claims their account. The link only lets them manage it online.

Members

Members come across inactive - they keep no live subscription until they choose to re-subscribe, so nobody is charged twice during the switch. When a member reactivates, Session makes the three things that usually cause worry explicit:

  • Their credits carried over and apply automatically when they book.
  • They pay nothing today - their first payment is set to their old renewal date, and the date is shown to them.
  • Their old subscription is handled. The cleanest approach - and what most venues do - is to cancel members' subscriptions on your old platform yourself at migration; Session then tells them there's nothing more to do. If you'd rather members cancel their own, Session asks them to do it before that first-payment date.

Let us know which applies to your venue and we'll set the wording to match. Members see this on their account, on the booking page, when they re-subscribe, and in their confirmation email - so there's nothing extra you need to send. Member lists move as part of your migration: get in touch and we'll handle them, since subscriptions need to move carefully.

What you can import

  • Bookings and customers - past and future appointments; attendees become customer accounts.
  • Gift vouchers - existing codes with their remaining balance or session count.
  • Bundles - session packs with their remaining sessions.
  • Customers - a contacts or mailing list with marketing consent, when you just want the people.

Before you start

Create the things your import maps onto first:

  • Sessions - required, so bookings can be linked to the right session.
  • Membership tiers - required if members are coming across, so each member re-subscribes to the right plan and their reactivation link points at it.
  • Bundle products - optional, only if you want imported session packs linked to a specific product; skip it and they arrive as unrestricted credits.
  • Vouchers and contacts need nothing pre-created - vouchers import as standalone codes, customers as people.

Export from your old system as CSV, TSV or XLSX with column headers in the first row. (Acuity: see their export guide. Periode: Reporting > CSV. Stuck? Send us a message.)

  • Include an email on every row - that's how Session matches a row to a customer and how they later claim their account.
  • Files up to 25 MB / 50,000 rows. Split larger exports into multiple files.

Running an import

  1. Upload your file - Session detects the type from the headers.
  2. Confirm the type (Bookings, Vouchers, Bundles or Customers) and override if the guess is wrong.
  3. Map your columns - common names match automatically; fix any that don't. Pick the date format your file uses, and a fallback timezone if it has none.
  4. Review what was found - link each unique session time to a Session session (and optionally each bundle to a product).
  5. Confirm and run - the summary shows what will be created, matched and skipped. For bookings you can choose to email customers from a chosen date forward.
  6. Review results - what imported, what was skipped, any per-row errors, and the welcome link to send customers.

Column guide

Email is required on every type. Beyond that:

  • Bookings - need Type, Start time, Appointment price and Amount paid. Optional: names, End time, Timezone, External ID (strongly recommended - stops re-uploads creating duplicates), Voucher code, Notes. Rows with the same email, type and start time merge into one booking with the right number of spaces; variant names like "Sauna (Concession)" normalise to the base type.
  • Gift vouchers - need Products (the session count is read from it, e.g. "Gift Voucher - 5 Sessions"). Optional: Code (generated if absent), Order date (sets a 12-month expiry), Total, Status, Notes.
  • Bundles - either one row per order (Email + Products) or one row per package (Email + Package name + Sessions total). Optional: Code (generated if absent - map it to keep your existing pack codes), Sessions remaining, Purchase/Expiry date, Price, External ID, Notes.
  • Customers - just Email, plus optional names and a Marketing consent column. You map each consent value to opted in / out / not asked / undeliverable, so consent is carried across honestly - never assumed.

Prices in any format (£15.00, 15,00 €, 1,234.56) are understood.

Re-uploading is safe - Imports dedupe, so re-running a file only adds what's new. Bookings skip an existing booking on the same slot (map External ID to also dedupe by old IDs); vouchers skip duplicate codes; bundles skip a matching External ID; customers match by email. Skipped rows show in the results Skipped count.

Note

Every voucher and bundle code must be unique. If your file has the same code on two different rows (a common quirk of older exports), the first keeps the code and any others get a fresh auto-generated one - so no row is lost, but only one will carry the shared code.

Troubleshooting

  1. "No recognisable header row". The first row must be column names, not data.

  2. "Row N: no email address". The row had no email and no External ID, so it couldn't be matched.

  3. "Could not parse start time". Re-check the date format dropdown on the mapping step.

  4. Continue button disabled. A required field is unmapped; the page lists which.

  5. Ambiguous dates. If 01/02/2026 could be either order, you'll be asked to choose.

  6. A customer can't see their bookings. They need to claim their account with the same email that was in your export, via the welcome link. Different email? Send us a message and we'll merge the accounts.

If a few rows fail, the import still runs - the results screen lists each failed row to fix and re-upload.