CRM migration
Field-level mapping, validation, and rollback between Cliniko and Zoho CRM. We move data and schema; workflows are rebuilt natively in Zoho CRM.
Cliniko
Source
Zoho CRM
Destination
Compatibility
12 of 13
objects map 1:1 between Cliniko and Zoho CRM.
Complexity
BStandard
Timeline
3–5 days
Overview
Cliniko organizes healthcare practice data around Patients as the central entity — appointments, treatments, invoices, and practitioner assignments all attach directly to the patient record. Zoho CRM uses a traditional CRM module structure with Accounts (companies), Contacts (individuals), Leads (prospects), Deals (opportunities), and Activities (tasks, calls, events). There is no native healthcare-appointment module in Zoho CRM, so appointment data must be mapped to Zoho Activities or custom modules, and original start/end times preserved as custom fields. FlitStack AI sequences the Cliniko-to-Zoho migration in dependency order: practitioners → users first (so owner resolution works), then patients → contacts, then appointments → tasks/events, then financial data. We export all Cliniko modules via the Cliniko API, apply type-aware field mapping, create custom fields in Zoho for Cliniko-specific properties (insurance provider, Medicare number, referral source), and load via Zoho's Bulk API respecting API credit limits per edition. Clinical notes that exceed Zoho's text field limits are chunked or attached as files. Workflows, appointment-reminder templates, and SMS sequences do not migrate — FlitStack documents them for Zoho Blueprint reconstruction.
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 Zoho CRM, including any object-level transformations, lookup resolution, or schema-design dependencies.
Typical mapping — final map is confirmed during the sample migration step.
Cliniko
Patient
Zoho CRM
Contact
1:1Cliniko patients map directly to Zoho CRM Contacts. Name, email, phone, address, date of birth, and all custom patient fields migrate as Contact fields. Patients without an organization affiliation land as Contacts with no AccountId lookup; an optional Account can be created if the patient is also a business entity.
Cliniko
Patient
Zoho CRM
Lead
1:manyIf Cliniko distinguishes between prospective patients (enquiries) and active patients, prospective records can split to Zoho Leads while active patients go to Contacts. This requires Cliniko to have a status or type field indicating prospect vs. active; FlitStack surfaces this during the planning audit.
Cliniko
Practitioner
Zoho CRM
User
1:1Cliniko practitioners map to Zoho CRM Users for record ownership. Practitioner email becomes the Zoho username; a temporary password is set and the practitioner is assigned a Role based on their Cliniko access level. Practitioners who also refer patients get a corresponding Contact record.
Cliniko
Practitioner
Zoho CRM
Contact
1:1When a Cliniko practitioner refers patients to the practice, they need a Contact record in Zoho CRM for tracking referral source. The Contact record holds their name, organization, specialty (as a custom pick-list), and contact details. This coexists with the User record; the Contact is used in Deals and reporting, the User controls CRM access.
Cliniko
Appointment
Zoho CRM
Task
1:1Cliniko appointments with status 'Booked', 'Arrived', or 'Did Not Arrive' map to Zoho CRM Tasks with Subject=appointment type name, Status=open/completed, and Start DateTime/End DateTime preserved. The original Cliniko appointment ID is stored in a custom field (Cliniko_Appointment_ID__c) for traceability. This preserves all status semantics while enabling task-based reporting on appointment volume and completion rates.
Cliniko
Appointment
Zoho CRM
Event
1:1Appointments with a duration and specific start/end time map to Zoho CRM Events so calendar views show the appointment block. Event Subject holds the appointment type; WhoId links to the Contact; WhatId links to the Contact or a custom Appointment Type lookup. Telehealth URLs from Cliniko are stored in a custom URL field on the Event.
Cliniko
Appointment Type
Zoho CRM
Custom Module (Appointment Types)
1:1Cliniko appointment types (e.g., Initial Consultation, Follow-up, Telehealth) do not have a direct Zoho CRM equivalent. FlitStack creates a custom 'Appointment_Types' module in Zoho with fields for name, duration, default status, and billing code. Appointment records reference this module via a lookup.
Cliniko
Invoice
Zoho CRM
Custom Module (Invoice History)
1:1Cliniko invoices (amount, date, payment status, patient lifetime spend) do not fit naturally into Zoho's Deals or native Invoice module without context. FlitStack creates a custom 'Invoice_History' module with fields for invoice number, amount, date, status, and a lookup to the Contact. This preserves financial visibility without requiring Deals to be open.
Cliniko
Business Location
Zoho CRM
Custom Module (Locations)
1:1Multi-location Cliniko setups (multiple clinics or franchises) map to a custom 'Locations' module in Zoho CRM with fields for name, address, timezone, and primary contact details. Appointment records and practitioner User records reference the relevant location via a lookup field, enabling location-based reporting on appointment volume, practitioner utilization, and patient distribution across sites.
Cliniko
Product / Service
Zoho CRM
Product
1:1Cliniko products and services (billing items, consumables) map to Zoho CRM Products with name, unit price, product code, and stock quantity. If Cliniko tracks stock levels, these migrate as Product stock fields; otherwise, they become zeroed or custom fields. This enables Products to be linked to Deals and used in quote generation within Zoho CRM.
Cliniko
Insurance Provider
Zoho CRM
Account
1:1Cliniko insurance providers (stored as patient-linked companies) map to Zoho CRM Accounts with type='Insurance'. Account Name holds the insurer; address and contact details map from Cliniko's third-party company records. Patients link to insurers via Account Contact Relations or a custom lookup.
Cliniko
Treatment Note
Zoho CRM
Note / Attachment
1:1Cliniko treatment notes are free-form text or structured templates that can exceed Zoho's single-field text limits. FlitStack chunks long notes into multiple Note records linked to the Contact, or exports them as PDF attachments re-uploaded to Zoho Files. Template names are preserved as custom fields for reference.
Cliniko
Patient Attachment / Form
Zoho CRM
Attachment / Zoho Files
1:1Patient files uploaded to Cliniko (consent forms, ID scans, intake documents) re-upload to Zoho CRM as Files attached to the Contact record. File size limits (25 MB per file in Zoho CRM) are enforced during migration; larger files are flagged for manual handling.
| Cliniko | Zoho CRM | Compatibility | |
|---|---|---|---|
| Patient | Contact1:1 | Fully supported | |
| Patient | Lead1:many | Fully supported | |
| Practitioner | User1:1 | Fully supported | |
| Practitioner | Contact1:1 | Fully supported | |
| Appointment | Task1:1 | Fully supported | |
| Appointment | Event1:1 | Fully supported | |
| Appointment Type | Custom Module (Appointment Types)1:1 | Fully supported | |
| Invoice | Custom Module (Invoice History)1:1 | Fully supported | |
| Business Location | Custom Module (Locations)1:1 | Fully supported | |
| Product / Service | Product1:1 | Fully supported | |
| Insurance Provider | Account1:1 | Fully supported | |
| Treatment Note | Note / Attachment1:1 | Fully supported | |
| Patient Attachment / Form | Attachment / Zoho Files1: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
Zoho CRM gotchas
API access requires Professional tier or above
Subform fields do not export cleanly via CSV
API credit consumption is non-linear
Export download links expire in 7 days
Owner (User) assignments require pre-mapped user IDs
Pair-specific challenges
Migration approach
Audit Cliniko data export and map to Zoho module structure
FlitStack initiates the migration by pulling a full data export from Cliniko via the built-in Data Export tool (Settings > Data Exports), selecting all modules: patients, practitioners, appointments, appointment types, products, invoices, insurance providers, and business locations. We then cross-reference the export schema against Zoho CRM's available modules, custom field limits per the target edition, and the custom module requirements identified in the planning audit. This produces a signed-off field mapping document before any data moves.
Create Zoho custom modules and fields
Before data loading begins, FlitStack provisions the custom fields and modules in Zoho CRM that have no standard equivalent: Appointment_Types module, Invoice_History module, Locations module, and all custom patient fields identified in the audit. If the target Zoho edition's field-count limit is at risk, we document which fields will migrate as companion CSV exports and agree on prioritization with the client before proceeding.
Resolve practitioners to Zoho Users by email match
Cliniko practitioner records are matched to Zoho CRM Users by email address as the unique identifier. Any practitioner without a corresponding Zoho User is flagged in a pre-flight report delivered to the client before migration begins; the client either provisions the User in Zoho first or designates a fallback owner. No appointment or task records are loaded until owner resolution is complete, preventing orphaned activities with no assigned user that would require manual reassignment post-migration.
Load data in dependency order: Accounts → Contacts → Activities → Custom modules
Zoho requires Contacts to exist before tasks and events can link to them via the WhoId field. FlitStack sequences the migration: practitioners (as Users), insurance providers (as Accounts), patients (as Contacts), then appointments (as Tasks/Events with WhoId lookups), then products, then invoices to the custom Invoice_History module. Each module load is validated for record counts and foreign-key integrity before the next phase begins.
Run a sample migration and generate field-level diff
A representative sample — typically 100–500 records spanning patients, appointments across different statuses, practitioners, and a few invoices — migrates first. FlitStack generates a field-level diff report comparing source values in Cliniko against destination values in Zoho for every mapped field. The client reviews the diff, confirms appointment status mapping, verifies practitioner ownership, and approves or requests corrections before the full migration commits.
Execute full migration with delta-pickup window and audit log
The full dataset loads into Zoho CRM. A delta-pickup window of 24–48 hours captures any Cliniko records created or modified during the cutover period. FlitStack maintains an audit log of every record operation (create, update, link) with timestamps, source system ID, and operator. One-click rollback is available if reconciliation reveals unexpected data gaps; FlitStack can re-run the full migration from the Cliniko snapshot if the delta window reveals issues that require a restart.
Platform deep dives
Cliniko
Source
Strengths
Weaknesses
Zoho CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. All 8 core objects map 1:1 between Cliniko and Zoho CRM.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Cliniko and Zoho CRM.
Object compatibility
All 8 core objects map 1:1 between Cliniko and Zoho CRM.
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 Zoho CRM migration scoping. Not seeing yours? Book a call.
Walk through your Cliniko to Zoho CRM 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 Zoho CRM
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.