Switching from Fresha
Export your clients and appointments from Fresha and import the files unchanged. Tuppence recognises Fresha’s columns and previews every row before importing.
- Exportclients, appointments
- Add servicesand staff
- Import clientsdry run, then Import
- Import bookingsclashes named first
Fresha’s words, and ours
Section titled “Fresha’s words, and ours”| In Fresha | In Tuppence | Comes over? |
|---|---|---|
| Client | Client | Yes |
| Appointment | Booking | Upcoming only |
| Service | Service | No, add first |
| Team member | Staff member | No, add first with hours |
| Cancellation policy, deposits | Booking policy | No, set yours |
| Vouchers, memberships | Gift vouchers, memberships | No, set up again |
What Fresha exports
Section titled “What Fresha exports”| File | Contents | Import as |
|---|---|---|
| Client list (CSV) | Name, mobile and telephone, email, address, date of birth, staff alert, tags, marketing preferences | Clients |
| Appointments (CSV) | Reference, client, service, date and time, team member, price, status | Upcoming bookings |
Fresha doesn’t export services. Add them first under Bookings › Services (or import a spreadsheet), using Fresha’s service and staff names so appointments match.
Export from Fresha
Section titled “Export from Fresha”- Clients: go to Clients › Clients list, then Options › Export › CSV.
- Appointments: go to Sales › Appointments, choose dates from today to as far ahead as you take bookings, then Export › CSV.
Import into Tuppence
Section titled “Import into Tuppence”- Go to Imports › Clients and choose the client list. You see Read as a Fresha 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.
- Select Import. You can undo it for 24 hours.
- Go to Imports › Upcoming bookings and choose the appointments file. Calendar clashes are named before anything is created. Bookings import as confirmed and nobody is messaged: Fresha 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 osfrom tuppence import Tuppence
tuppence = Tuppence(os.environ["TUPPENCE_SECRET_KEY"])
export = """Client ID,First Name,Last Name,Full Name,Blocked,Block Reason,Gender,Mobile Number,Telephone,Email,Accepts Marketing,Accepts SMS Marketing,Address,Apartement Suite,Area,City,State,Post Code,Date of Birth,Added,Staff alert,Referral Source,Tags20417300,Harper,Quill,Harper Quill,No,,Female,+44 7700 900100,,harper.quill@example.com,Yes,Yes,,,,,,,,2023-01-01,,Instagram,VIP20417307,Rowan,Ashdown,Rowan Ashdown,No,,Male,,+44 7700 900101,rowan.ashdown@example.com,No,No,11 Mill Lane,Flat 2,,Bristol,,BS6 1AB,,2024-06-08,Nervous of the dryer,Google,"""upload = tuppence.request("POST", "/v1/imports", body={"kind": "clients", "file": export})print(upload["source"], "·", upload["format"]["name"]) # fresha · Fresha client exportprint(upload["mapping"]["phone"], "·", upload["mapping"]["notes"]) # Mobile Number · Staff alertprint(upload["dry_run"]["created"], "clients to import") # 2 clients to importWhat comes over
Section titled “What comes over”| Fresha’s column | In Tuppence |
|---|---|
| First Name, Last Name | Name |
| Mobile Number (else Telephone) | Phone, in E.164 (+44…, +1…) |
| Email (matches existing clients before phone) | |
| Address, Apartement Suite, City, State, Post Code | Address |
| Date of Birth | Date of birth |
| Staff alert | Notes |
| Tags | Tags |
| Client, Service, Scheduled Date, Time, Staff | Booking; client, service and staff member matched by name |
| Status | Cancelled and no-show appointments skipped |
Rows sharing a Ref # and person become one booking, services back to back. Rows of one appointment with different people stay separate: a visit here has one person.
What doesn’t come over
Section titled “What doesn’t come over”- Marketing consent (Accepts Marketing, Accepts SMS Marketing): consent doesn’t transfer. Ask clients again before sending anything but booking messages.
- Cards, payments, prices: cards and paid deposits stay with Fresha. Bookings use the service’s price here.
- Vouchers, memberships, packages, sales: set them up again.
- Blocks (Blocked, Block Reason): block the client again from their page.
- Gender, area, referral source, join date and Fresha’s client ID.
- Past appointments, and who or what channel booked each one.
If Fresha changes its export
Section titled “If Fresha changes its export”A file is recognised when most of Fresha’s columns are present. Missing or renamed columns are
matched by header or content (a column of email addresses becomes the email) and flagged, for
example Mobile Number: Phone is matched to Mobile No. instead. 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: "fresha" to force the Fresha format.