Switching from another EHR

Switching EHRs without losing a week

How EnWella moves your patients, appointments, insurance, problem list, medications, and chart docs off your current system — in a weekend, not a quarter.

Updated
Updated
Reading time
7 min read
Tags
migrationswitchcsvimportpractice-fusiondrchronoathenaelation
A look at migration
Switching EHRs

From your old EHR to EnWella One weekend

Patients, appointments, insurance, problem list, medications, allergies, and chart docs - moved cleanly with a side-by-side audit before you go live

Every clinic we onboard already has years of patient history sitting inside another EHR. Leaving that history behind is not an option. This article walks through how EnWella imports the data, what we map automatically, what needs a human eye, and how long the whole switch actually takes.

The shape of every migration

  1. 1
    Export
    Standard CSV from your old EHR
  2. 2
    Upload + map
    Auto-detect 90% of columns
  3. 3
    Review + go live
    200-chart side-by-side audit
Every migration follows the same three steps - most clinics finish in one weekend

Three steps, every time: export a CSV from your old EHR, upload + map it inside our wizard, then review + go live. Most clinics finish the technical work in a single afternoon and use the rest of the weekend to walk a sample of charts side-by-side with the source. We never ask you to learn a new file format — every supported source uses the export menu it already has.

Step 1 · Drop the export

Migration · Step 1 of 3

Practice Fusion export · drop the ZIP from your admin email

csv
pf-export-2026-05.zip
1.2 MB · 1,247 patients · 312 appointments
Ready

Uploaded 1.2 MB · validated 8 sheets · no errors

Drop the export. We fingerprint it on the server and flag anything that looks off.

You download the standard CSV from your current EHR — we publish step-by-step menu paths for every supported source. Drag the file into the migration wizard inside EnWella. We scan it on the server, count rows, fingerprint the columns, and surface anything that looks off (encoding issues, missing required headers, empty rows). The file is encrypted in transit, encrypted at rest in our GCS bucket, and purged on go-live unless you ask us to retain it.

Step 2 · Auto-mapped columns, dropdowns for the rest

Column mapping · 7 of 8 auto-resolved
Source column
EnWella field
  • PatientIDpatient.external_id
    detected
  • FirstNamepatient.first_name
    detected
  • LastNamepatient.last_name
    detected
  • DOBpatient.dob
    detected
  • PhonePrimpatient.phone_primary
    detected
  • PayerCodeinsurance.payer
    review
  • MemberIDinsurance.member_id
    detected
  • PrimaryDxproblem.icd10_primary
    detected
Auto-resolved mappings show in green. Ambiguous columns get a dropdown so nothing lands in the wrong row.

About 90% of columns auto-resolve. We recognize every common shape — PatientID, FirstName, DOB, MemberID, PayerCode, PrimaryDx — and propose the target EnWella field with a confidence badge. The 10% that need a human decision get a dropdown next to a sample row from your data, so you never have to guess which column means what. Payer codes that don't cleanly map to a known carrier get parked under "Review later" so nothing silently lands in the wrong insurance row.

Step 3 · Patients land live

Patients
1,247 / 1,247
Appointments · 12 mo
312 / 312
Name
DOB
Payer
Status
  • J
    Jane Doe
    03/12/1984
    BCBS
    imported
  • M
    Marcus Patel
    07/04/1971
    Aetna
    imported
  • P
    Priya Nguyen
    11/22/1990
    United
    imported
  • L
    Liam Garcia
    01/30/1965
    Cigna
    imported
  • S
    Sofia Kim
    08/15/1958
    Medicare
    imported
  • N
    Noah Brown
    05/09/1988
    Humana
    imported
Live counters as the importer streams records in batches of 250. Errors land inline; the importer never partial-applies.

Once you approve the mapping, the importer streams records into EnWella in batches of 250. You watch a live counter — patients, appointments (last 12 months), insurance rows, problem-list entries, medications, allergies, immunizations, chart documents. The whole thing is wrapped in a single migration transaction: if any batch fails its validation step (bad DOB, missing required identifier, malformed phone), the wizard surfaces the row, lets you fix it inline, and resumes — it never partial-applies.

What we move (and what we do not)

We move: patient demographics, appointments (12 months), insurance (primary + secondary), problem list (ICD-10 normalized), medications (RxNorm normalized), allergies, immunizations (CVX coded), and chart documents (PDF, attached to the chart with source filename + date preserved). We do not move: vendor-locked note templates (we convert finalized notes to a PDF attached to the chart), recorded telehealth calls (re-record on EnWella going forward — HIPAA retention preserved separately), and scheduled background jobs (recreated in EnWella; we hand you a setup checklist).

Go-live and the side-by-side audit

Before flipping the switch, the wizard generates a 200-chart random audit set — same patient pulled up in both systems, side-by-side. Walk it for 30 minutes. If anything looks wrong, the importer reruns just the affected rows. Go-live itself is one click: it freezes the source CSV, locks the import, and emails every clinician with the URL to their new chart inbox. The first chart you sign on the new system happens within two minutes of go-live in every pilot we have run.

How long this actually takes

Self-serve (≤500 patients): under 90 minutes from export-click to first new chart. White-glove (≤5,000 patients): one weekend with two scheduled checkpoints (Friday: export + map, Saturday: review + go live). White-glove + audit (≤25,000 patients): one week — the export usually takes a day, mapping takes an afternoon, and the audit + sign-off takes a day per 10,000 charts.

BAA, encryption, and PHI handling

A signed Business Associate Agreement is in place before any export touches our servers. The CSV is uploaded over TLS 1.3, stored in a GCS bucket with AES-256 encryption and customer-scoped IAM, and purged automatically on go-live (extended retention only on request, for audit). Every action the importer takes — read, validate, write — lands in the audit log with 6-year retention. Our Privacy Officer signs off on every migration before go-live.

Frequently asked questions

My current EHR will not give me a clean CSV. Now what?
Tell us which system you are on. We have scripts that interpret messy exports from every EHR on the supported list, and for the rest we can usually pull the data via a vendor-supported API once your contract permits.
Do my patients have to re-register on the portal?
No. We move portal accounts with their existing magic-link tokens; we send each patient one email letting them know the URL has changed.
What about claims that are in-flight when we cut over?
You finish them on the old system. We do not move claims that are in any state other than "paid" or "denied + closed" — the round-trip with the clearinghouse is too complex to bridge. We do import the historical claim list (read-only) so your billers have context.
Can we run both EHRs side-by-side for a few weeks?
Yes. We support a "dual-write" window where new visits land in EnWella while the old chart stays read-accessible on the source. Most clinics use this for the first 30 days to build muscle memory.
What happens if we want to leave?
We provide a one-click export in the same shape we accept on import. No vendor lock — your data is yours.