CRM migration
Field-level mapping, validation, and rollback between Cliniko and Freshsales. We move data and schema; workflows are rebuilt natively in Freshsales.
Cliniko
Source
Freshsales
Destination
Compatibility
14 of 15
objects map 1:1 between Cliniko and Freshsales.
Complexity
BStandard
Timeline
24–72 hours
Overview
Cliniko stores patient records, treatment notes, appointments, invoices, and practitioner profiles in a clinical-practice data model optimized for healthcare workflows. Freshsales uses a standard CRM object graph — Leads, Contacts, Accounts, Opportunities (called Deals), Tasks, and Events — with lifecycle stages, contact scoring, and multiple sales pipelines. The migration translates Cliniko's patient-centric model into Freshsales' contact-centric model: patients map primarily to Contacts, practitioners map to Users or Contacts, appointments map to Tasks or Events with original timestamps, and treatment notes attach to contact records. We extract data via Cliniko's REST API using scoped read access, then load into Freshsales via its CRM API with field-level validation. Invoices and billing records become Deals with custom fields for amount, payment status, and line items. Custom fields in Cliniko (insurance carriers, referral sources, treatment plans) require corresponding custom fields in Freshsales — we generate a setup plan before migration. Workflows, appointment reminders, and automated patient communications do not migrate; these must be rebuilt using Freshsales' Workflow Automation builder. The delta-pickup window captures any patient updates during cutover, and one-click rollback is available if reconciliation fails.
Every standard and custom field arrives verified.
AI proposes the map; you confirm before any record moves.
Parent–child, lookups, and ownership stay linked.
Calls, emails, meetings — with original timestamps.
Documents, uploads, and inline notes move with the record.
Why teams make this switch
Leaving
What's pushing teams away
Choosing
What's pulling them in
Object mapping
Each row shows how a Cliniko object lands in Freshsales, including any object-level transformations, lookup resolution, or schema-design dependencies.
Typical mapping — final map is confirmed during the sample migration step.
Cliniko
Patient
Freshsales
Contact
1:1Cliniko patients map 1:1 to Freshsales Contacts. Patient first name, last name, email, phone, address, date of birth, and gender transfer directly. Active patient status maps to Freshsales lifecycle stage 'Customer'. We preserve Cliniko's patient ID as Source_System_ID__c for delta-run de-duplication.
Cliniko
Patient
Freshsales
Lead
1:manyPatients flagged as 'prospect' or 'referral lead' in Cliniko (with no appointments yet) route to Freshsales Leads. The split occurs on Cliniko's patient_status field: 'active_patient' goes to Contact; 'prospect' or 'lead' goes to Lead. This preserves your referral pipeline separately from existing patient base.
Cliniko
Practitioner
Freshsales
User / Contact
1:1Cliniko practitioners with active appointments map to Freshsales Users so they appear as deal owners and task assignees. Practitioners without Freshsales user licenses map to Contacts with a custom 'Practitioner_Role__c' field set to 'Treating Practitioner'. Email and specialty fields map directly.
Cliniko
Appointment
Freshsales
Task / Event
1:1Cliniko appointments with status 'completed' become Freshsales Tasks with Type='Appointment' and Completed=true. Future appointments become Events with start/end datetimes, location, and the practitioner as the event owner. Cancelled and no-show appointments become Tasks with status 'Not Completed' and a custom outcome field. Original appointment duration is preserved.
Cliniko
Treatment Note
Freshsales
Note / Contact Custom Field
1:1Cliniko treatment notes attach to the patient record. Short notes (< 500 characters) migrate as Freshsales Notes linked to the Contact. Long clinical notes are stored as a custom text area field (Treatment_Notes__c) on the Contact so the full history is queryable in reports. Note create date maps to Freshsales Note CreatedAt.
Cliniko
Invoice
Freshsales
Deal (Opportunity)
1:1Cliniko invoices become Freshsales Deals. Invoice total amount maps to Deal Amount; invoice date maps to Deal CreatedAt; payment status (paid, overdue, partial) maps to a custom pick-list field Payment_Status__c. Line items are concatenated into a custom text field Line_Items_Summary__c since Freshsales Deals do not natively support invoice line items without the Products module.
Cliniko
Product / Service
Freshsales
Product
1:1Cliniko products and services (billing items, session rates, packages, consumables) map to Freshsales Products with name, unit_price, and stock_quantity fields transferred directly. Products linked to invoices carry the original invoice reference as a custom Product field called Product_Source__c to preserve the billing context in Freshsales. SKU and description fields map to the corresponding Freshsales Product product_code and description fields.
Cliniko
Insurance Profile
Freshsales
Custom Field on Contact
1:1Cliniko patient insurance data (carrier name, policy number, group number) has no native Freshsales equivalent, so we create custom fields on Contact: Insurance_Carrier__c (text), Insurance_Policy_Number__c (text), Insurance_Group__c (text). Insurance status (active, expired) maps to a custom pick-list field Insurance_Status__c with values matching your Cliniko setup. These fields appear on the Contact record under a dedicated Insurance Information section for quick reference by billing staff.
Cliniko
Referral Source
Freshsales
Custom Field on Contact / Account
1:1Cliniko referral source (doctor, hospital, marketing campaign, word of mouth) maps to a custom pick-list Referral_Source__c on Contact. If the referral source is a company entity, we also create a corresponding Freshsales Account and link the Contact to it via the standard AccountId lookup. This enables referral source reporting at both individual and organization levels.
Cliniko
Location / Clinic
Freshsales
Account
1:1Cliniko multi-location setups map to Freshsales Accounts with type set to 'Clinic'. Each Account holds the location address, phone number, and a custom field Location_ID__c matching Cliniko's location identifier for traceability. Practitioners and appointments are linked to the appropriate Account so pipeline reports can filter by clinic location or aggregate across all clinic Accounts for consolidated practice-wide views.
Cliniko
Patient Attachment / Form
Freshsales
Freshsales Files
1:1Patient attachments such as consent forms, intake documents, imaging references, and signed agreements from Cliniko's Data Export are re-uploaded as Freshsales Files linked to the Contact record. The original filename and file type are preserved on upload. Freshsales enforces a 25MB file size limit per file; any Cliniko attachment exceeding this threshold is flagged in the pre-migration report with step-by-step instructions for manual download and attach after migration.
Cliniko
Patient Forms (auto-update fields)
Freshsales
Custom Field on Contact
1:1Cliniko form-connected fields that auto-update patient records upon form submission map to the corresponding Freshsales custom field using the same field name. We preserve the original form submission timestamp as a custom datetime field Form_Submitted_At__c on the Contact so the auto-update origin remains traceable in Freshsales reports and audit trails.
Cliniko
SMS / Appointment Reminders
Freshsales
no_equivalent
1:1Cliniko's automated SMS and appointment reminder workflows do not migrate because automation logic resides in Cliniko's scheduling and communication settings rather than in portable data fields. Freshsales offers SMS and workflow automation at Pro and Enterprise tiers using Freshcaller integration and the Freshsales Workflow Automation builder. We export your Cliniko reminder templates as reference PDF documents for your Freshsales admin to rebuild equivalent automations.
Cliniko
Patient Medical History / Allergies
Freshsales
Custom Field on Contact
1:1Cliniko medical history and allergy fields map to custom text area fields on Contact: Medical_History__c and Allergies__c. These custom fields inherit Freshsales' 32,768 character text area limit. Any Cliniko medical history string exceeding this limit is flagged pre-migration and the overflow portion is stored as a linked Freshsales Note titled 'Medical History (partial — full record in source)' for complete record preservation.
Cliniko
Booking / Online Schedule
Freshsales
no_equivalent
1:1Cliniko's online booking and scheduling widget has no Freshsales equivalent at the CRM level. Freshsales offers Calendly integration or Freshmarketer's scheduling capabilities as alternatives. We do not migrate booking configuration — practices must configure Freshsales' scheduling tool separately using Cliniko's practitioner availability as reference.
| Cliniko | Freshsales | Compatibility | |
|---|---|---|---|
| Patient | Contact1:1 | Fully supported | |
| Patient | Lead1:many | Fully supported | |
| Practitioner | User / Contact1:1 | Fully supported | |
| Appointment | Task / Event1:1 | Fully supported | |
| Treatment Note | Note / Contact Custom Field1:1 | Fully supported | |
| Invoice | Deal (Opportunity)1:1 | Fully supported | |
| Product / Service | Product1:1 | Fully supported | |
| Insurance Profile | Custom Field on Contact1:1 | Fully supported | |
| Referral Source | Custom Field on Contact / Account1:1 | Fully supported | |
| Location / Clinic | Account1:1 | Fully supported | |
| Patient Attachment / Form | Freshsales Files1:1 | Fully supported | |
| Patient Forms (auto-update fields) | Custom Field on Contact1:1 | Fully supported | |
| SMS / Appointment Reminders | no_equivalent1:1 | Fully supported | |
| Patient Medical History / Allergies | Custom Field on Contact1:1 | Fully supported | |
| Booking / Online Schedule | no_equivalent1:1 | Fully supported |
Gotchas + challenges
Platform-specific issues from each side, plus the pair-specific challenges that don't show up on either platform's page on its own.
Cliniko gotchas
Background export generation delays for large datasets
Charts export is separate from the main data panel
API key permissions gate record visibility
Form template configurations do not export
The old Appointments export has been deprecated
Freshsales gotchas
Freddy AI is Pro-tier only despite heavy marketing
Post-migration emails and sequences are disabled
Bot session credits are a one-time 500-session allocation
Phone credits charged per minute with no cap
File storage limits scale with plan tier
Pair-specific challenges
Migration approach
Extract Cliniko data via API with scoped read access
FlitStack AI authenticates to Cliniko using your API key (HTTP Basic over HTTPS) and extracts all specified objects: Patients, Practitioners, Appointments, Treatment Notes, Invoices, Products, Locations, and custom field data. We use Cliniko's REST API pagination to handle large exports without timeout. Admin-level access is required for full data export. We generate a pre-extraction data inventory report showing record counts per object so you can confirm scope before the migration run begins. Scoped read access means your Cliniko account remains fully operational during extraction — no write operations occur on Cliniko's side.
Build Freshsales custom fields and schema plan
Before loading data, we analyze Cliniko's custom fields and map each to a corresponding Freshsales custom field or standard field. We deliver a Freshsales Setup Plan listing every custom field to create (with field type, pick-list values, and module assignment) and every standard field used. This plan is reviewed by your Freshsales admin before execution. Fields created during this step include: Insurance_Carrier__c, Insurance_Policy_Number__c, Referral_Source__c, Medical_History__c, Treatment_Notes__c, and Payment_Status__c on the appropriate modules.
Resolve practitioners to Freshsales users by email
We match Cliniko practitioner email addresses to Freshsales user email addresses. Matched practitioners are assigned as task owners, event owners, and deal owners on their respective records. Unmatched practitioners are flagged in a pre-migration report — your team either creates Freshsales user accounts for them or designates a fallback owner. This step prevents orphan records where a migrated appointment or deal has no Freshsales user to attach to.
Run sample migration with field-level diff on 100–500 records
A representative sample migrates first — spanning patients, appointments, invoices, practitioners, and attachments. We generate a field-level diff comparing source Cliniko values against destination Freshsales values for every mapped field. You review the diff to verify patient status-to-lifecycle-stage mapping, appointment-to-task/Event splitting logic, invoice-to-deal conversion, and referral source pick-list values. Any mapping corrections are applied before the full run commits. This step is the approval gate for the production migration.
Execute full migration with delta-pickup window
Full migration loads all Cliniko records into Freshsales in dependency order: Locations (Accounts), Practitioners (Users/Contacts), Patients (Contacts/Leads), Appointments (Tasks/Events), Invoices (Deals), Products, and Attachments. A delta-pickup window opens simultaneously — typically 24–48 hours — capturing any Cliniko records created or modified during the migration run. At cutover, we perform a final reconciliation count and audit log review. One-click rollback is available if record counts, field mappings, or data integrity checks fail your acceptance criteria.
Deliver migration audit log and post-migration reconciliation report
After cutover, we deliver a complete audit log of every operation performed — records created, records updated, attachments uploaded, and any records skipped due to validation errors. The post-migration reconciliation report compares Cliniko source counts against Freshsales destination counts per object, flags any discrepancies, and lists every custom field populated. We also provide a Cliniko workflow export (PDF) of your automated reminders and appointment notifications so your Freshsales admin can rebuild them in Freshsales Workflow Automation.
Platform deep dives
Cliniko
Source
Strengths
Weaknesses
Freshsales
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 2 of 8 objects need a mapping; the rest are 1:1.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Cliniko and Freshsales.
Object compatibility
2 of 8 objects need a mapping; the rest are 1:1.
Field mapping clarity
Field mapping is derived from defaults — final spec confirmed during the sample migration.
Timeline complexity
8-object category — typical timelines run 2–7 days end-to-end.
API constraints
Cliniko: Not publicly documented in the OpenAPI schema or public help docs.
Data volume sensitivity
Cliniko doesn't expose a bulk API — REST + parallelization used for high-volume runs.
Estimator
Rule-based pricing — no per-record fees, no manual quotes. Migrations over 2M records are scoped individually.
Step 1
Pick a category, then your source and destination platforms.
Category
FAQ
Answers to the questions buyers ask most during Cliniko to Freshsales migration scoping. Not seeing yours? Book a call.
Walk through your Cliniko to Freshsales migration with a real engineer — 30 minutes, free, written quote within 24 hours.
Book a free 30 minute consultationAdjacent paths
Other ways to leave Cliniko
Other ways to arrive at Freshsales
Ready when you are
Tell us record counts and timeline. We'll come back with a written quote inside 1 business day — no commitment, no sales pitch.