Case study
Switching from Treatwell: how we moved seven years of salon history to SalonRadar
The reason most salons stay on software they have outgrown is not the monthly fee. It is the fear of walking away from their own history. Here is what it took to bring that history along.
SalonRadar · Editorial team
8 min read
- of booking history moved
- 7 years
- appointments, with ~15,000 client records
- ~37,000
- to import the full history
- 3 min
- Business
- Aesthetic clinic (name withheld)
- City
- Lithuania
- Team
- 60+ staff, past and present
- With salonradar since
- September 2026
In short
- Booking history is the real switching cost, and it can move with you.
- Every import is rehearsed first and can be rolled back afterwards.
- AI matched old service names to the current menu and saw nothing about any person.
Ask a salon owner what they would lose by changing booking software and they rarely mention features. They mention people. The client who reacts to a particular product. The one who has cancelled four times this year. The regulars whose last visit tells you exactly when to expect the next. That knowledge lives in years of bookings and notes, and it is the real switching cost.
When an aesthetic clinic asked to move to SalonRadar, the owner was clear about the condition: the history comes too. Not a spreadsheet of names. The whole working record.
| What moved | Roughly |
|---|---|
| Client records | 15,000 |
| Appointments | 37,000 |
| Booking history | 7 years |
| Staff, past and present | 60+ |
The ground rules
The records belong to the salon. On the owner's instruction, and with their authorisation, we exported them from the salon's own Treatwell account. Before any of it touched SalonRadar we agreed four rules:
- Look, don't touch. The export only ever read. The salon kept working in its existing system throughout, and nothing in it changed.
- No surprises for clients. An import must never send an email, a text or a reminder. Nobody should discover their salon changed software because a machine messaged them at midnight.
- Rehearse first. Every import can run as a dry run that does everything a real one does and then undoes it, so the owner sees the exact outcome before committing.
- Be able to go back. If something looks wrong afterwards, one command has to take it all out again.
Where the difficulty actually was
Copying rows from one database to another is the easy five percent. The rest is that two systems never describe the world the same way.
One visit is not one record
A client who comes in for a facial and a brow tint has made one visit. In the source data that was two separate appointments, back to back. Imported as-is, every client's history would look busier than it was and every visit count would be inflated. We merge appointments that are unmistakably one sitting (same client, same practitioner, one straight after the other) into a single booking with several services, and leave everything else alone.
The people who no longer work there
Over seven years, dozens of practitioners had come and gone, and more than half of all appointments belonged to someone who had since left. Dropping those bookings would have erased most of the history; attributing them to the owner would have falsified it. Creating user accounts for ex-employees was out of the question. So each former practitioner gets an archived record: a name on past bookings, with no login, no email address, no place in the calendar or on the public profile. Current staff are matched to their real accounts.
Cancellations are history too
During the rehearsal we noticed a handful of cancelled bookings quietly disappearing. The cause was reasonable-sounding logic: if a slot is already taken, skip the incoming booking as a duplicate. But a cancellation and the visit that later filled the same slot are both true, and the cancellation is precisely what tells you about a client's reliability. We fixed the rule and added a test so it stays fixed.
Where AI helped, and where we kept it out
The least expected problem was names. A booking remembers what a service was called on the day it was booked, and a salon rewrites its menu constantly. After seven years, a third of all booked service lines matched nothing on today's menu. One of the clinic's most-booked historic services simply no longer existed under that name; it had become a longer, more specific one.
No text-matching rule bridges that. It is a judgement about meaning, so we gave it to an AI model built for exactly this kind of decision (TypeSafe's Jev): for each old service name, choose the matching service from the current menu, or say that nothing matches. Crucially, the model also reports how sure it is.
- Confident answers were accepted automatically. That alone lifted the share of historic bookings linked to a current service from 67% to 90%.
- Everything below the confidence bar went to a short review list for the owner, most-used first, with the model's second guess alongside. Some of those are business decisions, not technical ones: if you replaced one treatment with another, is that the same service or not?
- Where the model was unsure it was usually right to be. One old service was a combination of two current ones, and the model split its answer almost evenly between them.
The boundary mattered as much as the capability. The model was sent service names, their menu category, duration and price, and nothing about any person. We also used an AI coding assistant to help build and test the migration pipeline, with engineers reviewing every change. AI made no decision about a client's record, and nothing imports without a rehearsal a human has read.
The safety net
The importer reads the export as a stream rather than loading it whole, commits in small batches so an interrupted run simply resumes, and recognises anything it has already brought in, so running it twice never duplicates. The full history imports in about three minutes.
Then we tested the way back. On a copy of the salon's account we imported all 15,000 clients for real, ran the rollback, and compared the database before and after: every count matched, down to staff records and role assignments. That full-size test earned its keep. It exposed a flaw no small test had: the importer merging a duplicate client card a minute after creating it looked, to the rollback, like a person editing that client, so a few records were wrongly protected. The rollback's rule is deliberate. It removes what the import wrote and never anything someone has touched since. It just must not mistake its own work for a person's.
The stack is unglamorous on purpose: a small Node.js exporter, an importer built into our Laravel application on PostgreSQL, and dozens of new automated tests guarding every rule described here, so the next salon's migration starts from everything this one taught us.
Privacy was a design constraint, not a disclaimer
- Marketing consent does not travel. Permission a client once gave to be contacted through another platform is not permission to be contacted through ours. It was not carried over. Clients will be asked again.
- Nothing was sent to anyone. No emails, no texts, no notifications, and none of it cluttering the salon's activity feed.
- The salon decides; we process. The owner chose what moved and when. We handled the data on the salon's behalf, for the migration and nothing else.
What this means if you are thinking about switching
Your booking history is a record of your own business, and it should be able to move with you. The clinic opened SalonRadar on its first morning to seven years of client history already in place, and carried on with the day.
If you are on Treatwell or another system and the thing holding you back is everything you would leave behind, talk to us. We will tell you what can move, show you a rehearsal on your own data before anything is committed, and we can undo it if you change your mind.
Questions salon owners ask
Will my clients be notified when their data is imported?
No. The import sends nothing (no email, SMS or push) and reminders on any upcoming bookings stay off until you switch them on.
Does my whole history come across?
Clients, notes and bookings, including cancellations and no-shows, with the practitioner and price for each visit. A small number of records cannot be moved: client cards with no name, phone or email have nobody to attach to.
What about staff who have left?
Their past bookings keep their name. They get no account, no login and no place in your calendar or on your public profile.
Can I keep using my current system while this happens?
Yes. The history is moved first, while you carry on as normal. On the day you switch, a final short run brings over what is new, including upcoming appointments.
What if something goes wrong?
You see a full rehearsal before anything is committed, and afterwards the import can be reversed without touching anything you have added or edited in the meantime.
Treatwell is a trademark of its respective owner. SalonRadar is not affiliated with, endorsed by or partnered with Treatwell. This migration was carried out on the instruction of the salon's owner, from the salon's own account. Figures are rounded.



