Settings → Import
The importer is built around one promise: nothing is written until you've seen exactly what will happen. Every column in every file is shown with your own sample data beside it, a dry run tells you what would be created and what would be matched, and the whole thing can be undone in a single click afterwards.
Get your files out
From Fresha
- Clients → Options → Export to CSV
- Team → Options → Export to CSV
- Everything else via Reports: Service list, Product list, Membership list, Waitlist detail, Stock movement summary, Appointment list, Sales log detail
From anything else
Upload a CSV or Excel file with a header row and one row per record. Owneli detects what the file is and shows you every column before anything is written. Up to 15,000 rows per file.
What won't come across
Three things, and it's worth knowing why before you start:
- Saved cards. For PCI reasons card details move processor-to-processor, never through a file. You re-collect them.
- Forms, consents and photos. These aren't part of a standard export from any of these platforms.
- Mid-cycle membership billing. Never resumed automatically. See the warning below.
The four steps
Source
Tell Owneli where the data came from — Fresha, Zenoti, Mangomint, or a generic CSV — so it recognises the file layout. Then drop your files in.
Each file is analysed and labelled with what it appears to be. If a file can't be read as a list of records, it's marked as such and skipped; your other files are unaffected. Anything the importer isn't sure about, you'll set by hand on the next step.
Map columns
Every column in every file is listed, next to your own sample values, with the field it will import into. A column with no destination is a column you chose to leave out — never a silent drop.
Three kinds of column:
- Mapped — has a destination. Recognised automatically, suggested by AI, or set by you.
- Needs a decision — not recognised. Point it at a field to keep it, or acknowledge the loss explicitly and continue.
- Not imported by design — recognised, and deliberately left out, with the reason shown. Tax and commission columns are in this bucket: they're calculated by Owneli's own engines from your configuration, and importing someone else's numbers would put two sources of truth in conflict.
You confirm each file's mapping before you can move on.
Dry run
Nothing has been written yet. The numbers on this screen are exactly what the import will do:
| Column | Meaning |
|---|---|
| Create | New records that will be added |
| Match existing | Rows that resolve to records you already have — these are linked, not duplicated |
| Skip | Rows that won't be imported |
| Errors | Rows that failed validation |
Validation problems are listed with row numbers matching your spreadsheet, where row 1 is the header, and can be downloaded as a CSV so you can fix the source file.
If anything blocks the import, the screen says so plainly and nothing can be written until you resolve it.
Consent. Before you continue you choose the marketing consent to apply to imported clients — email, SMS, both, or neither — and confirm you have a lawful basis to hold and contact them. Nobody is silently opted in.
Import
Files are written in dependency order, not the order you uploaded them: whatever other rows point at is created first. Services before the memberships and appointments that name them; sales last, because a sale line can reference anything.
The import runs in the background. You can leave the page and come back.
Reading the result
You get a per-entity breakdown of created, matched, skipped and errored, plus a downloadable report.
Undoing an import
Roll back deletes only the rows this import created. Rows that matched existing records are left untouched.
Memberships import as records only
Suggested order
Although the importer handles dependencies itself, importing in stages makes problems easier to isolate:
Clients
The biggest file and the one everything else references. Check the matched-versus-created split carefully.
Services and products
Your catalog. Review prices and durations after import.
Team
Then set their working hours — imported team members won't appear on the calendar until they have hours.
Memberships, waitlist and stock
Records only for memberships; see the warning above.
Appointments and sales
History last. These reference everything else, so import them once the rest is settled.
After the import
- Set working hours for imported team members — Team → Scheduling
- Review imported prices and durations — Operations → Services
- Look for duplicate clients and merge them — see Add, find, and merge clients
- Re-collect payment details for anyone on a membership