Moving from another system is a few CSV files and a careful mapping step, patients first. Import a small test file before the real one, because an import can't be undone.
Before you start
- Export the data from your old system as CSV, one file per kind of record: patients first, then appointments, invoices and payments, because later files refer to patients.
- Files are limited to 10 MB: Files larger than 10 MB are not supported. Picking a bigger file shows File exceeds the 10 MB limit. and clears the choice, so pick a smaller one before Next. The size is checked again at the review and when the import runs, so an oversized file stops with Nothing was imported — the file exceeds the 10 MB limit. Split a bigger file.
- Imports go into one Location at a time.
- Import needs the data import permission, which Administrators and Power Receptionists have.
The three steps
Upload & Configure
Under Settings, then Data Imports, choose the Datasource (Patients, Contacts, Appointments, Invoices, Payments, Expenses, Products, Services and Cases; invoice line items, invoice promotions and credit notes are export-only), the Format (CSV, HL7 v2 or FHIR / JSON) and the Location, then upload the file. ClinyPal parses it and shows Total rows.
Map Columns
Each column in your file is matched to a ClinyPal field. Matched automatically columns have a recognized heading; Needs your review ones you match by hand or leave unmapped. System fields (ClinicId, LocationId, CreatedBy, CreatedAt) are injected automatically — never from the file.
Review before confirming
The Import Summary shows the target, rows and mapped columns. Choose what happens If a row already exists, then Confirm & Start Import. The confirmation lists up to 10 rows that will be skipped and why, and reminds you that an import can't be undone. Import queued — processing in the background.
If a row already exists
| Choice | Effect |
|---|---|
| Skip duplicates | Leave matching existing records untouched. The safe default for a second run of the same file. |
| Update matching | Overwrite matching existing records with the file's values. For bringing updated details across. |
| Insert only | Always add as new rows, even if a match already exists. Only when you're sure nothing overlaps. |
Match by email/name, not internal ID makes the duplicate check use the patient's email and name rather than the old system's ID numbers, which is what you want for a first migration. A whole file is one batch: if a row fails, nothing was imported — the whole batch was rolled back after an error, and the row number and reason are in the history. A CSV row with more values than headings, usually a comma outside quotes such as Smith, John, is skipped as unreadable. With Insert only, a row matching a record ClinyPal already has stops the import: Nothing was imported — a row matches a record ClinyPal already has; import again with Skip duplicates, or remove those rows. See Review your import history.