CRM migration
Field-level mapping, validation, and rollback between Cliniko and Salesforce Sales Cloud. We move data and schema; workflows are rebuilt natively in Salesforce Sales Cloud.
Cliniko
Source
Salesforce Sales Cloud
Destination
Compatibility
10 of 10
objects map 1:1 between Cliniko and Salesforce Sales Cloud.
Complexity
BStandard
Timeline
48–72 hours
Overview
Cliniko is a cloud-based practice management platform designed for healthcare clinics, physiotherapists, and allied health practitioners. Its data model stores patients, practitioners, appointments, and financial transactions in a flat, application-centric schema without a relational hierarchy. Salesforce Sales Cloud uses an Account-Contact relationship model: every Contact must have an AccountId lookup, and concepts like practitioners, appointment types, and invoices have no native Salesforce equivalent — they require custom objects with __c suffix fields and lookup relationships. FlitStack AI maps Cliniko patients to Salesforce Contacts (creating or matching Accounts as parent records), converts Cliniko appointments and practitioners to custom Salesforce objects with lookup relationships to Contacts and Accounts, and preserves original Cliniko create timestamps as custom datetime fields. Appointment types become a custom object for re-use across appointments. Invoices migrate as a separate custom object. A delta-pickup window captures any Cliniko records modified between the migration run and go-live. FlitStack does not migrate Cliniko workflows because Cliniko does not offer a workflow or automation export — those must be defined natively in Salesforce.
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 Salesforce Sales Cloud, including any object-level transformations, lookup resolution, or schema-design dependencies.
Typical mapping — final map is confirmed during the sample migration step.
Cliniko
Patient
Salesforce Sales Cloud
Contact
1:1Cliniko patients map directly to Salesforce Contacts. Every Contact in Salesforce requires an AccountId lookup — FlitStack creates or matches a Salesforce Account for each Cliniko patient based on the business or clinic location the patient is associated with. Unassigned patients receive a default 'Unassigned' Account record.
Cliniko
Business / Location
Salesforce Sales Cloud
Account
1:1Cliniko businesses and locations map to Salesforce Accounts. Cliniko's flat structure stores location address and business details without a parent-company hierarchy — FlitStack creates each Cliniko business as a separate Account using the business name and address fields. Parent-account hierarchies from Cliniko's multi-location setup map to Salesforce ParentId on Account.
Cliniko
Appointment
Salesforce Sales Cloud
Appointment__c (custom object)
1:1Salesforce has no native appointment object — appointments from Cliniko migrate as a custom Appointment__c object. The custom object requires fields for appointment type, practitioner, status, start and end times, notes, and a ContactId lookup to the patient. A lookup to the Appointment_Type__c custom object links each appointment to its service definition. Original Cliniko create timestamps are preserved as a custom datetime field.
Cliniko
Appointment Type
Salesforce Sales Cloud
Appointment_Type__c (custom object)
1:1Cliniko appointment types are reusable service definitions (name, duration, colour, billing item). Salesforce has no native equivalent — these become a custom Appointment_Type__c object. Fields include name, duration_in_minutes__c, colour__c, and a billing item lookup. This custom object is referenced by every Appointment__c record so service definitions persist without duplication.
Cliniko
Practitioner
Salesforce Sales Cloud
Practitioner__c (custom object) or Salesforce User
1:1Cliniko practitioners are clinical staff with name, profession, qualifications, and business associations. Salesforce has no native practitioner entity. FlitStack creates a custom Practitioner__c object with name, profession__c, registration_number__c, qualifications__c, and an AccountId lookup to the primary clinic location. If the practitioner also uses Salesforce as a CRM user, FlitStack matches them by email and links Practitioner__c to the User record.
Cliniko
Invoice
Salesforce Sales Cloud
Invoice__c (custom object)
1:1Cliniko invoices store line items, total amount, payment status, and tax with direct patient linkage. Salesforce standard objects do not include an invoice entity — invoices migrate as a custom Invoice__c object with ContactId and AccountId lookups, total_amount__c, payment_status__c, date_issued__c, and date_paid__c. Payment status pick-list values are mapped value-by-value from Cliniko.
Cliniko
Product
Salesforce Sales Cloud
Product2
1:1Cliniko products (supplements, equipment, consumables) map to Salesforce Product2 standard objects. Product name, description, unit_cost, and stock_on_hand transfer directly. Active flag and product code map to Product2.IsActive and ProductCode respectively. Stock levels migrate as a custom field since Product2 does not natively track inventory.
Cliniko
Attachment / File
Salesforce Sales Cloud
ContentDocument / ContentDocumentLink
1:1Cliniko file attachments on patient records are downloaded, re-uploaded to Salesforce Files (ContentDocument), and linked to the target Contact via ContentDocumentLink. Salesforce Files attached to a Contact appear in the 'Files' related list. Inline images in Cliniko notes are extracted and hosted as Salesforce Files. File size limits of 25MB per file apply in Salesforce.
Cliniko
Insurance Profile
Salesforce Sales Cloud
Custom fields on Contact
1:1Cliniko insurance profiles store per-patient Medicare number, health fund details, and EPC (Enhanced Primary Care) plan information. Salesforce has no native insurance or EPC field — these are created as custom fields on the Contact object: Medicare_Number__c, Health_Fund__c, EPC_Expiry__c, and Insurance_Provider__c. Patients with multiple insurance providers are stored as semicolon-separated values or in a custom junction object.
Cliniko
Treatment Note
Salesforce Sales Cloud
Note / ContentNote
1:1Cliniko treatment notes migrate as Salesforce Notes (Note) or enhanced ContentNote objects attached to the Contact record. Original Cliniko note creation timestamps are preserved. Rich-text formatting in Cliniko notes is preserved where possible, though complex formatting may be simplified. The note body references the appointment and practitioner where available.
| Cliniko | Salesforce Sales Cloud | Compatibility | |
|---|---|---|---|
| Patient | Contact1:1 | Fully supported | |
| Business / Location | Account1:1 | Fully supported | |
| Appointment | Appointment__c (custom object)1:1 | Fully supported | |
| Appointment Type | Appointment_Type__c (custom object)1:1 | Fully supported | |
| Practitioner | Practitioner__c (custom object) or Salesforce User1:1 | Fully supported | |
| Invoice | Invoice__c (custom object)1:1 | Fully supported | |
| Product | Product21:1 | Fully supported | |
| Attachment / File | ContentDocument / ContentDocumentLink1:1 | Fully supported | |
| Insurance Profile | Custom fields on Contact1:1 | Fully supported | |
| Treatment Note | Note / ContentNote1: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
Salesforce Sales Cloud gotchas
Workflow Rules and Process Builder are retired
Bulk API batch quota exhaustion during large imports
Storage overage billing is non-obvious
Account-Contact many-to-many relationship mapping
Territory and team member import ordering dependencies
Pair-specific challenges
Migration approach
Extract Cliniko data and resolve Account-Contact relationships
FlitStack pulls patient records, practitioner profiles, appointment data, invoices, and attachments from Cliniko via the Cliniko API. A data-quality audit flags missing email addresses, duplicate patients, and patients without a Cliniko business association. For each Cliniko patient, the migration plan assigns the correct Salesforce AccountId based on the Cliniko business the patient is associated with — single-location clinics map to one Account; multi-location setups route each patient to their clinic's Account. This step creates the mapping table that drives the Contact.AccountId lookup at load time.
Create Salesforce custom objects for appointment types, practitioners, and appointments
Before any data loads, FlitStack creates the Salesforce custom objects required by the Cliniko data model: Appointment_Type__c (fields: name, duration_in_minutes__c, colour__c, active__c), Practitioner__c (fields: first_name__c, last_name__c, email__c, profession__c, registration_number__c, qualifications__c, AccountId__c), and Appointment__c (fields: status__c, start_time__c, end_time__c, appointment_date__c, notes__c, ContactId__c lookup, Appointment_Type_Id__c lookup, Practitioner_Id__c lookup, original_create_date__c, source_system_id__c). The Salesforce admin reviews and approves the custom object schema before data migration begins. FlitStack delivers a package.xml and field definition sheet for deployment.
Run a sample migration with field-level diff
A representative slice of Cliniko data — typically 100–500 records covering patients, practitioners, appointment types, appointments, and invoices — migrates into a Salesforce sandbox first. FlitStack generates a field-level diff comparing source Cliniko values against the migrated Salesforce values for every mapped field. This diff is reviewed against the object and field mapping plan. Common checks include: AccountId resolution on Contacts is correct, practitioner Practitioner__c records are linked to the right Account, appointment type references resolve correctly, and timestamps are in UTC. No full migration commit occurs until the sample diff is signed off.
Execute full migration with delta-pickup and rollback readiness
The full Cliniko dataset migrates to the production Salesforce org in dependency order: Accounts first (Cliniko businesses), then Contacts (patients with resolved AccountId), then Practitioner__c records, Appointment_Type__c records, and finally Appointment__c records. A delta-pickup window (24–48 hours) runs immediately after the full migration commits, capturing any Cliniko records created or modified during the cutover window. FlitStack maintains an audit log of every insert, update, and link operation. A rollback script is prepared but held in reserve — one-click rollback is triggered only if post-migration reconciliation identifies critical record-count discrepancies or broken lookup relationships. After go-live, a reconciliation report confirms record counts, null AccountId counts, and unmatched practitioner counts.
Platform deep dives
Cliniko
Source
Strengths
Weaknesses
Salesforce Sales Cloud
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 1 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 Salesforce Sales Cloud.
Object compatibility
1 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 Salesforce Sales Cloud migration scoping. Not seeing yours? Book a call.
Walk through your Cliniko to Salesforce Sales Cloud 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 Salesforce Sales Cloud
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.