App

Import your data from Fresha or another system

Move clients, loyalty balances, gift cards, packages, memberships and more, mapped column by column, de-duplicated, and reversible in one click.

Updated Oct 11, 2026

Bring your clients, services, products, team, memberships, packages, gift cards, loyalty balances, appointments and sales over from Fresha or another system under Settings → Plan & data → Import. Nothing is written until you've seen exactly what will happen: every column is shown beside your own data, a dry run shows what would be created or matched, and the whole import can be undone afterwards.

Before you start

  • Who can do it: admins and owners.
  • Export your files from the old system first. See below.
  • Create your packages and membership plans first under Retail, so sold packages and memberships have a plan to match by name.

Get your files out

From Fresha

  • Clients → Options → Export to CSV
  • Team → Options → Export to CSV
  • Everything else via Reports: Client list (it carries loyalty points), Service list, Product list, Membership list, Packages list, Gift card list, Waitlist detail, Stock movement summary, Appointment list, Sales log detail

For sales, export Sales log detail. The plain Sales list has one row per sale without the items sold, so the importer refuses it and tells you which report to use.

Set every date range to All Time, and always export the detail report, not the summary. A summary report is one row of totals and percentages. The importer recognises it, refuses it and tells you to fetch the detail version instead.

From anything else

Upload a CSV, tab-separated (.tsv or .txt) or Excel (.xlsx) file with a header row and one row per record. Exports from Square, Vagaro, Boulevard, Mindbody, Acuity, Pabau, GlossGenius, Booksy, Timely, Jane, HoneyBook, Dubsado, Studio Ninja and most other booking tools are recognised. A report with a title above the column names is fine, and every sheet of a workbook becomes its own file. Up to 15,000 rows per file.

Columns with no home in Owneli, such as a tattoo placement, a gallery link or a contract status, can be kept in each record's notes with Keep these in notes instead of being left out.

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.

Import your files

Source

Under Where is this data from?, choose Fresha, Zenoti, Mangomint or Generic CSV, so Owneli 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 one you chose to leave out. Nothing is dropped silently.

Three kinds of column:

  • Mapped: it has a destination. Recognised automatically, suggested by AI, or set by you.
  • Needs a decision: it wasn't 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:

ColumnMeaning
CreateNew records that will be added
Match existingRows that match records you already have. They're linked, not duplicated.
SkipRows that won't be imported
ErrorsRows 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. Marketing consent follows your file. A new client is opted in to email or SMS only where the file's own consent column for that channel says yes (Fresha's Accepts Marketing and Accepts SMS Marketing, for example). The consent date comes from the file when it has one, otherwise it is the time of the import, and the client keeps a note of where the consent came from. A no, a blank, or a file with no consent column leaves the client opted out, and clients you already have keep the consent they have. The check shows how many new clients will be opted in and why. Before you continue, confirm you have a lawful basis to hold and contact these clients.

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.

Select Continue to dry run to check, then Run import. The import runs in the background, so you can leave the page and come back.

Check it worked

You get a per-entity breakdown of created, matched, skipped and errored, plus a downloadable report.

A record count can legitimately be lower than the source row count. Some exports write one row per requested service; rows sharing a reference merge into a single record. The dry run says so explicitly when it happens, and nothing was dropped.

Importing in stages

You don't have to import everything at once. Import your services today and your clients next week, and a later file links to what an earlier import brought in:

  • Appointments find their client by the old system's client ID, then email, then phone, then name. A "Last, First" name is read either way. A client who matches by name only but has a different email is never linked; the row is reported instead.
  • Services are matched by name, and team members by name or by a first name only one person here has. If only one person here takes bookings, an export with no staff column is booked with them.
  • Importing the same file again, or a newer export of it, never creates duplicates. Records already here are matched and kept exactly as they are: an import never overwrites changes you've made since, and rows missing from the newer file are never deleted.

Undoing an import

Roll back import deletes only the rows this import created. Rows that matched existing records are left untouched.

Rollback permanently deletes everything the import created and cannot itself be undone. If imported rows are already in use, such as an imported client with an appointment booked, rollback is blocked and you're told exactly what is holding it.

Loyalty points, gift cards and packages

These are what the business owes its clients, so they come across as balances, never as sales.

  • Loyalty points. When a file carries points balances, the mapping step asks once what one point was worth in the old system. Each client gets one opening balance worth the same money at your own point value, labelled Imported from Fresha balance. It expires on your own expiry rule, counted from the import day. The old system's tier is not copied: tiers are worked out again from your own thresholds. Importing the file again never adds a second balance.
  • A second client file. The Client list adds the points balance, a staff alert and notes to clients you already have. It never overwrites a staff alert that is already set, and rollback takes back exactly what it added.
  • Gift cards. Each card keeps its code, remaining balance, issue and expiry dates, purchaser and recipient. Its history shows one Imported balance entry for what is still owed. A code already used here is refused.
  • Packages. Each sold package is matched to a package of the same name in Retail → Packages, so create those first. A row naming a package that doesn't exist here is reported and not imported. Remaining sessions and the expiry date come across.

Sales history

  • A membership line is linked to the matching membership plan when there is one; otherwise it is kept as a plain line and reported.
  • Walk-in sales, and sales whose client can't be found or whose name fits more than one client, are kept without a client and listed for review, so your sales totals stay complete.
  • Walk-in appointments with no client are listed and not imported, because every appointment here belongs to a client. Their sales still come across.
  • Imported receipts say Imported from Fresha and can't be refunded here, because the money was taken in the old system.
  • Fees the old system charged on a visit, such as a no-show fee, are noted on the appointment rather than added to it, because the fee is already in the sales.

Memberships import as records only

Imported memberships are records only. Auto-renew is off, no renewal date is set, and no redeemable credits are granted. No card is ever charged. The price comes from your own membership plan of the same name, never from what the old system's report says was paid. A membership naming a plan you don't have creates that plan inactive, at no price, for you to set up.This is deliberate and not configurable. Resuming somebody else's mid-cycle billing against cards you have just imported is not a thing software should do quietly. Re-collect payment details and restart billing yourself when you're ready.

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 catalogue. Review prices and durations after import.

Team

Then set their working hours. Imported team members don't appear on the calendar until they have hours.

Memberships, packages, gift cards, waitlist and stock

Records only for memberships; see the warning above. Create your packages before importing sold packages.

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 under Team → Scheduling.
  • Check imported prices and durations under Operations → Services.
  • Look for duplicate clients and merge them. See Add, find, and merge clients.
  • Collect card details again for anyone on a membership.

If something goes wrong

The importer refused a file

It's probably a summary report. Export the detail version with the date range set to All Time. For Fresha sales, use Sales log detail.

They're listed in the result for review. Appointments match clients by the old system's client ID, then email, phone and name. Import or fix the client, then import the file again: nothing already imported is duplicated.

I want to start again

Select Roll back import on the import. See Undoing an import above.

Keep reading

Related

3
Set up your workspaceWork through the setup checklist, from your logo to your first client, and get your business ready to take bookings.Add, find, and merge clientsAdd a client, find anyone in your client list, work on many clients at once, and merge duplicates without losing their history.MembershipsCreate a membership plan with included sessions or a wallet balance, set its rules and perks, sell it, and see who your members are.