Skip to content

Switching from Treatwell Connect

Export your clients from Treatwell Connect, and your appointments if your account allows it, and import the files unchanged. Tuppence recognises Treatwell’s columns and previews every row before importing.

  1. Exportclients (+ appointments)
  2. Add servicesand staff
  3. Import clientsdry run, then Import
  4. Import bookingsclashes named first
In TreatwellIn TuppenceComes over?
ClientClientYes
AppointmentBookingUpcoming only, if your account can export them
ServiceServiceNo, add first
EmployeeStaff memberNo, add first with hours
Marketplace bookings, paid via TreatwellBookingPaid in Treatwell; the booking here uses the service’s price
Vouchers, packagesGift vouchers, session packagesNo, set up again
FileContentsImport as
Client list (CSV)Name, mobile, email, birthday, notes, marketing consent, visitsClients
Appointments (CSV, where your account allows)Date, time, client, service, employee, statusUpcoming bookings

Add services first under Bookings › Services (or import a spreadsheet), using Treatwell’s service and staff names so appointments match. If your account can’t export appointments, add upcoming ones by hand or import your own spreadsheet.

  1. Clients: in Treatwell Connect on a computer, go to Clients › Export.
  2. Appointments: in the calendar’s appointment list, set dates from today onwards and select Export.
  1. Go to Imports › Clients and choose the client list. You see Read as a Treatwell client export, the column feeding each field (and why any are left out), and a dry run: new clients, existing ones (same email or phone), and unreadable rows.
  2. Select Import. You can undo it for 24 hours.
  3. Go to Imports › Upcoming bookings and choose the appointments. Calendar clashes are named before anything is created. Bookings import as confirmed and nobody is messaged: Treatwell already told your clients, so their first message from you is the reminder.

With the API, upload the file unchanged to POST /v1/imports; source and format show how it was read:

import os
from tuppence import Tuppence
tuppence = Tuppence(os.environ["TUPPENCE_SECRET_KEY"])
export = """First name,Last name,Mobile,Email,Gender,Birthday,Notes,Marketing consent,Client since,Last visit,Number of visits
Anouk,de Vries,+44 7700 900601,anouk.devries@example.com,Female,03/09/1994,,Yes,12/04/2024,08/09/2026,9
Lorcan,Byrne,+44 7700 900602,lorcan.byrne@example.com,Male,,Sensitive skin,No,30/07/2025,,2
"""
upload = tuppence.request("POST", "/v1/imports", body={"kind": "clients", "file": export})
print(upload["source"], "·", upload["format"]["name"]) # treatwell · Treatwell client export
print(upload["dry_run"]["created"], "clients to import") # 2 clients to import
Treatwell’s columnIn Tuppence
First name, Last nameName
MobilePhone, in E.164 (+44…, +1…)
EmailEmail (matches existing clients before phone)
BirthdayDate of birth
NotesNotes
Date, Time, Client, Mobile, EmailBooking, and who it’s for
Service, EmployeeService and staff member, matched by name
StatusCancelled and no-show appointments skipped
  • Marketing consent: consent doesn’t transfer. Ask clients again before sending anything but booking messages.
  • Cards, payments, prices: appointments paid through Treatwell’s marketplace stay paid there. Bookings use the service’s price here.
  • Visit history (Client since, Last visit, Number of visits).
  • Vouchers, packages: set them up again.
  • Gender, where each appointment was booked, and its length (bookings use the service’s length here).
  • Past appointments.

A file is recognised when most of Treatwell’s columns are present. Missing or renamed columns are matched by header or content (a column of email addresses becomes the email) and flagged. Fix any wrong match, then select Check with these columns. In the API, format.missing lists each with its field and the column matched instead. An unrecognisable file is read as a plain spreadsheet; send source: "treatwell" to force the Treatwell format.

Docs assistant

Open as a page
Loading the assistant…