CRM migration

Migrate from Cliniko to Salesforce Sales Cloud

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 logo

Cliniko

Source

Salesforce Sales Cloud

Destination

Salesforce Sales Cloud logo

Compatibility

100%

10 of 10

objects map 1:1 between Cliniko and Salesforce Sales Cloud.

Complexity

BStandard

Timeline

48–72 hours

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

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.

Field-level fidelity

Every standard and custom field arrives verified.

Schema-aware mapping

AI proposes the map; you confirm before any record moves.

Relationships preserved

Parent–child, lookups, and ownership stay linked.

Full activity history

Calls, emails, meetings — with original timestamps.

Attachments & notes

Documents, uploads, and inline notes move with the record.

Why teams make this switch

Two sides of the same decision

Leaving

Cliniko logo

Cliniko

What's pushing teams away

  • API access is tied to individual user permissions, meaning API keys inherit role-based access controls — a practitioner-key may not expose all records a migration requires, complicating bulk export scoping.
  • Cliniko's automation capabilities (e.g. appointment reminders, form-triggered updates) do not export; they must be manually rebuilt in the destination platform, increasing migration effort for workflow-heavy practices.
  • Large data exports generate in the background and can take considerable time during busy hours, which may delay migration cutover timelines for practices with high appointment volumes.
  • The platform lacks a native HubSpot or Salesforce CRM-style pipeline view for tracking patient leads or referral sources — practices that outgrow Cliniko often cite the need for a dedicated CRM layer.

Choosing

Salesforce Sales Cloud logo

Salesforce Sales Cloud

What's pulling them in

  • The AppExchange marketplace with 5,000+ prebuilt apps gives enterprises integrations for nearly every business workflow without custom development.
  • Native Einstein AI for lead scoring, opportunity insights, and predictive forecasting adds intelligence without a separate platform purchase.
  • Territory management, multi-currency support, and advanced forecasting satisfy the needs of complex B2B sales organizations with structured revenue teams.
  • Slack, Tableau, and CPQ are deeply integrated into the core platform, keeping the sales stack unified for teams already in the Salesforce ecosystem.
  • Organizations with a large, established Salesforce implementation choose it because switching costs — integrations, custom code, trained admins — are prohibitive.

Object mapping

How Cliniko objects map to Salesforce Sales Cloud

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

maps to

Salesforce Sales Cloud

Contact

1:1
Fully supported

Cliniko 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

maps to

Salesforce Sales Cloud

Account

1:1
Fully supported

Cliniko 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

maps to

Salesforce Sales Cloud

Appointment__c (custom object)

1:1
Fully supported

Salesforce 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

maps to

Salesforce Sales Cloud

Appointment_Type__c (custom object)

1:1
Fully supported

Cliniko 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

maps to

Salesforce Sales Cloud

Practitioner__c (custom object) or Salesforce User

1:1
Fully supported

Cliniko 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

maps to

Salesforce Sales Cloud

Invoice__c (custom object)

1:1
Fully supported

Cliniko 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

maps to

Salesforce Sales Cloud

Product2

1:1
Fully supported

Cliniko 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

maps to

Salesforce Sales Cloud

ContentDocument / ContentDocumentLink

1:1
Fully supported

Cliniko 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

maps to

Salesforce Sales Cloud

Custom fields on Contact

1:1
Fully supported

Cliniko 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

maps to

Salesforce Sales Cloud

Note / ContentNote

1:1
Fully supported

Cliniko 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.

Gotchas + challenges

What specifically takes care here

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 logo

Cliniko gotchas

Medium

Background export generation delays for large datasets

Medium

Charts export is separate from the main data panel

High

API key permissions gate record visibility

Medium

Form template configurations do not export

Low

The old Appointments export has been deprecated

Salesforce Sales Cloud logo

Salesforce Sales Cloud gotchas

High

Workflow Rules and Process Builder are retired

High

Bulk API batch quota exhaustion during large imports

Medium

Storage overage billing is non-obvious

Medium

Account-Contact many-to-many relationship mapping

Low

Territory and team member import ordering dependencies

Pair-specific challenges

  • Cliniko's flat patient model requires AccountId resolution for every Salesforce Contact

    Cliniko stores patients as independent records without any business or entity hierarchy. Salesforce requires every Contact to have an AccountId — a lookup field linking the patient to a parent Account record. For single-location clinics, FlitStack maps all patients to one Salesforce Account representing the clinic. For multi-location setups, each Cliniko business becomes a separate Account, and patients must be routed to the correct AccountId based on their associated Cliniko location. This routing step adds a de-normalisation pass to the migration plan and must be validated before Contacts load, because Salesforce validation rules will reject Contacts without an AccountId.

  • Appointment types and practitioners require Salesforce custom object creation before data can load

    Salesforce has no native equivalent for Cliniko appointment types (reusable service definitions) or practitioners (clinical staff profiles). These concepts must be modelled as Salesforce custom objects — Appointment_Type__c and Practitioner__c — with __c suffix fields, pick-list definitions, and lookup relationships back to Contact and Account. The Salesforce admin must pre-create these custom objects with the correct field types before FlitStack can load appointment and practitioner records. We deliver a schema setup plan specifying every custom object, field, and lookup relationship so the Salesforce side is schema-ready before validation runs.

  • Cliniko appointment timestamps use the clinic's configured timezone — Salesforce stores UTC

    Cliniko appointment times are stored in the timezone configured for the clinic or practitioner. Salesforce stores all datetime values in UTC. If a clinic operates in Australia/Melbourne (UTC+10) and appointment times are not timezone-converted at migration, appointments appear shifted by 10 hours in Salesforce reports and the Salesforce calendar. FlitStack reads the Cliniko timezone setting per business/practitioner, converts all appointment start and end times to UTC before inserting into Salesforce, and stores the original Cliniko timezone in a custom field (Appointment_Timezone__c) for audit purposes.

  • Cliniko treatment note attachments require manual re-upload to Salesforce Files after migration

    Cliniko stores file attachments (referral letters, imaging results, intake forms) directly on patient records. Salesforce Files attach to records via the ContentDocumentLink junction object, which requires a three-step process: download from Cliniko, upload to Salesforce as a ContentVersion/ContentDocument, then insert a ContentDocumentLink record linking the file to the target Contact. This cannot be fully automated across all file types because some Cliniko attachment formats require format validation before Salesforce accepts them. FlitStack migrates all text and PDF attachments automatically; unusual file types are flagged in the migration report for manual review and re-upload.

  • Cliniko does not support custom objects or workflow exports — no automation migrates

    Cliniko's feature set does not include custom object creation or a workflow/automation engine with an exportable definition. Unlike HubSpot (which has workflows exportable as JSON) or Salesforce (which has Flow XML), Cliniko has no automation layer to migrate. This means there is nothing to rebuild in Salesforce Flow — the practice's operational logic lives in how staff use Cliniko's appointment booking, patient intake forms, and billing screens, not in an exported automation definition. We document the current Cliniko workflows as a process description for the Salesforce admin to use as a rebuild brief.

Migration approach

Six steps for a successful Cliniko to Salesforce Sales Cloud data migration

  1. 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.

  2. 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.

  3. 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.

  4. 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

Context on both ends of the pair

Cliniko logo

Cliniko

Source

Strengths

  • Single flat-rate plan with unlimited patients, users, locations, and storage — no per-seat or per-record throttling.
  • Built-in invoicing, appointment scheduling, treatment notes, and reporting in one cloud-hosted application.
  • Telehealth included at no extra cost, launched and maintained without a paywall.
  • Admin-accessible data export panel covering appointments, patients, invoices, transactions, and more.
  • REST API with HTTPS enforcement, JSON responses, and a published OpenAPI schema for programmatic access.

Weaknesses

  • API keys inherit the role-based permissions of the user they belong to, so a read-only or practitioner-level key may not expose all records needed for a full migration export.
  • Form template builders (the configuration for patient intake forms) are not exported via the data panel and must be recreated manually in the destination.
  • The old Appointments export is deprecated; the replacement Reports-based export has different column layouts that require mapping adjustments during migration scoping.
  • Background export generation for large datasets can be slow during busy hours, with no real-time progress API — only email notification on completion.
  • No native automation export; appointment reminders, form-triggered patient field updates, and similar rules must be manually rebuilt in the destination system.
Salesforce Sales Cloud logo

Salesforce Sales Cloud

Destination

Strengths

  • Largest enterprise app ecosystem in CRM with 5,000+ AppExchange integrations covering nearly every vertical workflow.
  • Native Einstein AI delivers lead scoring, opportunity insights, and predictive forecasting without a third-party layer.
  • Advanced territory management, multi-currency, and flexible forecasting satisfy complex B2B revenue structures.
  • Deep platform extensibility: Custom Objects, Apex, Flow, and the Metadata API allow full schema customization.
  • Well-documented REST API, Bulk API, and Composite API with published rate limits for programmatic migration.

Weaknesses

  • Pricing model is layered and opaque in practice: per-seat fees plus storage overages, add-on subscriptions, and annual uplifts compound to 30–40% above sticker price.
  • Workflow Rules and Process Builder are deprecated, forcing all orgs onto Salesforce Flow — a migration task that catches many teams by surprise.
  • Steep administrative complexity: meaningful configuration requires a dedicated Salesforce admin or consultant.
  • API rate limits are edition-gated (100k/day base for Enterprise) and easily exhausted by large historical imports without throttling.
  • Data export is exportable via Data Loader but preserving relationship integrity across 30+ objects requires careful ETL sequencing.

Complexity grading

How hard is this migration?

Standard CRM migration. 1 of 8 objects need a mapping; the rest are 1:1.

B

Overall complexity

Standard migration

Derived from compatibility, mapping clarity, API constraints, and data volume across Cliniko and Salesforce Sales Cloud.

  • Object compatibility

    B

    1 of 8 objects need a mapping; the rest are 1:1.

  • Field mapping clarity

    C

    Field mapping is derived from defaults — final spec confirmed during the sample migration.

  • Timeline complexity

    B

    8-object category — typical timelines run 2–7 days end-to-end.

  • API constraints

    B

    Cliniko: Not publicly documented in the OpenAPI schema or public help docs.

  • Data volume sensitivity

    B

    Cliniko doesn't expose a bulk API — REST + parallelization used for high-volume runs.

Estimator

Estimate your Cliniko to Salesforce Sales Cloud migration cost

Rule-based pricing — no per-record fees, no manual quotes. Migrations over 2M records are scoped individually.

Step 1

What are you migrating?

Pick a category, then your source and destination platforms.

Category

FAQ

Frequently asked questions about Cliniko to Salesforce Sales Cloud data migrations

Answers to the questions buyers ask most during Cliniko to Salesforce Sales Cloud migration scoping. Not seeing yours? Book a call.

Can't find your answer?

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 consultation

A Cliniko to Salesforce migration typically completes in 48–72 hours of clock time for setups with fewer than 50,000 patient records. The longest planning step is creating the Salesforce custom objects for appointment types and practitioners — this schema setup must be done before any data loads. Multi-location clinics with 500,000+ records or complex practitioner-to-location routing extend to 5–7 days. The delta-pickup window (24–48 hours) runs after the full migration commits and adds roughly one day to the overall cutover window.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Cliniko.
Land in Salesforce Sales Cloud, intact.

Tell us record counts and timeline. We'll come back with a written quote inside 1 business day — no commitment, no sales pitch.

Accuracy guarantee Rollback included Quote in 1 business day