Your practice isn't moving. It's just getting a new home.
August 27, 2026 · 8 min read · By SignalEHR
You shouldn't have to become a data-migration expert to change EHR. You already run a practice. Clients, clinicians, notes, schedules, billing, insurance, and the actual clinical work — that is a full job, and none of it pauses while you move.
So the whole thing is built around one idea: you decide what moves and when, and you get to look at all of it before a single record is created. Nothing about your practice becomes permanent because you clicked a button.
How the move works
Seven steps. The old system stays switched on for all of them.
Tell us where you're coming from
Which platform you're on, roughly how many clients, and whether you bill insurance. That is enough for us to tell you what your vendor will and won't release, and how long the awkward parts take.
You request your export — we tell you exactly what to ask for
You own the account, so the request has to come from you. What you shouldn't have to do is work out which of your vendor's five export screens produces the file that actually contains everything, or which ones need a support ticket instead.
We'll tell you which exports to run, in which order, and what to write in the support request if your vendor needs one. If a vendor accepts written authorisation for us to chase it with you, we will.
We read the file and show you what's in it
Upload the export and it is parsed immediately. The vendor is detected from the column headers, so you never have to tell us which system produced the file, and you never have to rename a column to match ours.
You review a table before anything is created
This is the step that matters, and it is the reason the rest of this page can be relaxed. The parse writes nothing. You get a table: every client we found, every field we mapped, and — listed by name — every column we could not map.
A field you care about that we don't recognise becomes a decision you make, rather than something quietly dropped on the floor.
You commit, and only then does anything exist
Records are created when you say so, from the rows you approved. If the import looks wrong, the answer is to not commit it — nothing has happened yet.
You check it against the system you still have open
Open your real charts. The messy one, the one with the complicated insurance, the client you discharged in 2023. Compare them against the old system, which is still running, because you haven't cancelled anything.
Cancel the old subscription when you're satisfied — not before
We would rather you paid your old vendor for one more month than discover something missing after the account closed. Your retention obligations are set by your regulator, and they outrank our onboarding calendar.
What comes across, and what doesn't
Every vendor promises a smooth migration. Very few will write down what they don't move, so here is ours. This is the current state, not a roadmap.
| Client demographics | Automated | Name, date of birth, contact details, address. Mapped from the vendor's own column names. |
| Insurance details | Automated | Primary and secondary, with member IDs. Policy STATUS is a separate problem — see below. |
| Ambiguous dates | Automated | 03/04/1990 is two different birthdays. We read the whole column and work out what the file is doing, rather than assuming a convention and silently moving a third of your clients' birthdays. |
| Clinical notes | By hand | Every one of these platforms exports notes as PDFs, not as structured records. They attach as documents. Anyone promising you searchable, editable notes is either running an AI parser over your clinical documentation or describing something you haven't bought. |
| Appointment history | Not built | No importer exists. Future appointments get rebuilt in SignalEHR; past ones stay in your old system's records. |
| Invoices, payments, balances | Not built | No importer exists. Jane's own documentation says billing history cannot move between two Jane accounts — if it won't go Jane to Jane, it isn't coming to us either. |
| Claims history | Not built | No importer exists. Outstanding claims finish where they were filed. |
That bottom block is why every plan we'd write includes a parallel period where the old system finishes collecting its own money. Your client list and insurance details move in minutes. Your calendar and your ledger do not — from any system to any other. Every practice that tells you their migration was painless ran both systems for a while.
The rule: nothing disappears quietly
A migration can look completely successful and still be incomplete. That is the failure mode worth designing against, because it gives you no signal at all — no error, no warning, no row count that looks wrong.
Unmapped columns are named, not summarised
The review table lists every column we could not place. Not a count of them. The names, so you can see whether the one you care about is in the list.
A row we can't fully read keeps everything else
When a date of birth genuinely cannot be resolved, that client still arrives with every other field intact and the date flagged for you. A record is never dropped because one field was unreadable.
The count check we'll ask you to do yourself
Before you close anything: count the rows in your export, then compare that against your total client count in the old system including archived and inactive clients. If those two numbers differ, the export left something behind — and that happens before we ever see the file.
Your old system is the safety net. Don't cut it early.
The version of this that goes wrong is: export, cancel, delete, hope. The version that works is an overlap — you start working in SignalEHR while the old account stays open and readable behind you.
One vendor-specific warning worth repeating, because it destroys records rather than merely inconveniencing you: on TherapyNotes, non-payment marks an account abandoned after sixty days and it terminates on day sixty-one. Keep paying for the system you are leaving until your export is in your hands. It is the cheapest insurance in the entire process.
Worth capturing before the old account closes
Not a homework assignment — a short list, and we'll walk it with you. It exists so that if a question comes up in eighteen months you have something better than a memory of clicking export.
- Total active clients, and total including archived
- Open invoices and outstanding balances
- Active insurance policies
- Future appointments already on the calendar
- The export confirmation emails and any support correspondence
Why we don't just tell you to download a file
Because we went and read what these exports actually contain, and the gaps are not obvious ones. They share a property: the file looks finished.
Jane omits archived clients from the patient list
The export gives you active patients. The discharged clients you are legally required to retain are the ones missing, and nothing in the file says so.
SimplePractice exports policies without their status
A terminated plan and a live one look identical in the file. You find out at the denial, with the balance sitting on a client who was told they were covered.
TherapyNotes has two deadlines that delete records
The cleanest demographics file of the three, and the only one where getting the order wrong destroys data permanently.
The short version
You send us the export. We read it and show you a table. You look at it, decide what is right, and commit the rows you approve. You check your real charts against the old system, which is still running. When you are satisfied, you cancel the old subscription — and not one day earlier.
Your practice keeps running throughout. Your records don't go into a black box. And you don't spend a weekend learning about CSV encodings and vendor support queues.
Thinking about moving?
Tell us which system you're on and we'll tell you what it will and won't release — before you commit to anything.