CRM migration

Migrate from Cliniko to Freshsales

Field-level mapping, validation, and rollback between Cliniko and Freshsales. We move data and schema; workflows are rebuilt natively in Freshsales.

Cliniko logo

Cliniko

Source

Freshsales

Destination

Freshsales logo

Compatibility

93%

14 of 15

objects map 1:1 between Cliniko and Freshsales.

Complexity

BStandard

Timeline

24–72 hours

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

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.

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

Freshsales logo

Freshsales

What's pulling them in

  • Lowest barrier to entry among major CRMs — the free tier supports up to 3 users and includes core CRM functionality before committing to per-seat pricing.
  • Built-in chat, email, and phone reduce reliance on third-party integrations for basic sales communication and contact management.
  • Freddy AI contact scoring and deal insights are included on Pro plans at a lower price than comparable HubSpot tiers.
  • Kanban pipeline views across Contacts, Accounts, and Deals provide visual deal management without requiring custom configuration.
  • Integration with the broader Freshworks ecosystem (Freshdesk, Freshchat, Freshservice) reduces tool sprawl for teams already using Freshworks.

Object mapping

How Cliniko objects map to Freshsales

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

maps to

Freshsales

Contact

1:1
Fully supported

Cliniko 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

maps to

Freshsales

Lead

1:many
Fully supported

Patients 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

maps to

Freshsales

User / Contact

1:1
Fully supported

Cliniko 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

maps to

Freshsales

Task / Event

1:1
Fully supported

Cliniko 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

maps to

Freshsales

Note / Contact Custom Field

1:1
Fully supported

Cliniko 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

maps to

Freshsales

Deal (Opportunity)

1:1
Fully supported

Cliniko 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

maps to

Freshsales

Product

1:1
Fully supported

Cliniko 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

maps to

Freshsales

Custom Field on Contact

1:1
Fully supported

Cliniko 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

maps to

Freshsales

Custom Field on Contact / Account

1:1
Fully supported

Cliniko 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

maps to

Freshsales

Account

1:1
Fully supported

Cliniko 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

maps to

Freshsales

Freshsales Files

1:1
Fully supported

Patient 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)

maps to

Freshsales

Custom Field on Contact

1:1
Fully supported

Cliniko 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

maps to

Freshsales

no_equivalent

1:1
Fully supported

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

maps to

Freshsales

Custom Field on Contact

1:1
Fully supported

Cliniko 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

maps to

Freshsales

no_equivalent

1:1
Fully supported

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

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

Freshsales logo

Freshsales gotchas

Medium

Freddy AI is Pro-tier only despite heavy marketing

High

Post-migration emails and sequences are disabled

Medium

Bot session credits are a one-time 500-session allocation

Medium

Phone credits charged per minute with no cap

Low

File storage limits scale with plan tier

Pair-specific challenges

  • Patient medical history text area truncation on long clinical notes

    Cliniko's treatment notes and medical history fields are free-form text fields that can run to thousands of characters. Freshsales custom text area fields cap at 32,768 characters. We flag any Cliniko note or medical history record exceeding this limit before migration and store the overflow as a linked Freshsales Note titled 'Medical History (partial — full record in source)'. Your team should review these overflow notes post-migration to ensure no critical clinical information is truncated. We provide a pre-migration report listing every record that will be truncated so no surprises surface after go-live.

  • Appointment-to-Task/Event split requires Freshsales plan-specific field availability

    Cliniko appointments carry rich metadata — practitioner assignment, location, appointment type, status, and duration — that must split across Freshsales Tasks and Events. Past completed appointments become Tasks; future scheduled appointments become Events. However, the Event object's location and custom fields (appointment_type, duration) require the Pro or Enterprise plan in Freshsales. On the Growth plan, Events support fewer custom fields. We check your Freshsales plan tier before mapping and adjust the field plan accordingly. If you are on Growth, appointment type and duration map as custom fields on the linked Task instead of the Event.

  • Invoice line items require custom field reconstruction in Freshsales Deals

    Cliniko invoices contain line items with service names, quantities, unit prices, and tax amounts — a structured data model. Freshsales Deals natively store only deal amount, probability, and close date; line-item detail requires either the Products module (add-on) or custom fields. We map invoice totals to deal amounts and concatenate line items into a single Line_Items_Summary__c text field on the Deal. If your practice needs per-line-item reporting in Freshsales, we recommend enabling the Products module before migration so line items migrate as Freshsales Product Items linked to the Deal. Without it, line-item granularity is preserved in the summary field but not queryable as separate line items in Freshsales reports.

  • Cliniko practitioner-to-Freshsales-user email matching requires matched email domains

    We resolve Cliniko practitioners to Freshsales users by matching practitioner email addresses against Freshsales user emails. Practitioners without a corresponding Freshsales user (email domain mismatch, or practitioner not yet provisioned in Freshsales) are flagged before migration. You can either invite them as Freshsales users first or assign their records to a fallback owner (e.g., the practice admin). We provide an unmatched practitioners report 48 hours before the migration run so you have time to provision accounts. No patient record migrates without an owner assignment.

  • Patient referral source pick-list values must be pre-created in Freshsales

    Cliniko referral sources are free-form or pre-defined pick-lists depending on your Cliniko configuration. Freshsales custom pick-list fields require pre-created values before data can load — Freshsales rejects import rows with pick-list values that do not exist in the field definition. We extract your Cliniko referral source values during the discovery phase, deliver a Freshsales field setup plan with the exact pick-list values to create, and validate the field definition matches before loading data. If your Cliniko setup uses free-form referral sources, we migrate them as text (not pick-list) to avoid rejection.

Migration approach

Six steps for a successful Cliniko to Freshsales data migration

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

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

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

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

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

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

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.
Freshsales logo

Freshsales

Destination

Strengths

  • Generous free tier for small teams with core CRM functionality without per-seat costs.
  • All-in-one sales CRM with built-in telephony, chat, and email reducing third-party tool dependency.
  • Freddy AI contact scoring and deal predictions available on Pro tier.
  • Multiple pipeline views with Kanban and list options across all plans.

Weaknesses

  • Reports lack depth compared to competitors like HubSpot, with limited customization options.
  • Integration setup is poorly documented with no clear guides for connecting third-party tools.
  • AI features gated behind $39/user/month Pro tier despite marketing emphasis on Freddy AI.
  • Bot sessions limited to 500 one-time allocation with no monthly refresh.

Complexity grading

How hard is this migration?

Standard CRM migration. 2 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 Freshsales.

  • Object compatibility

    B

    2 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 Freshsales 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 Freshsales data migrations

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

Can't find your answer?

Walk through your Cliniko to Freshsales migration with a real engineer — 30 minutes, free, written quote within 24 hours.

Book a free 30 minute consultation

Most Cliniko-to-Freshsales migrations complete in 24–72 hours of clock time for practices with fewer than 25,000 patient records. Larger practices exceeding 100,000 records or those with extensive custom fields (insurance, referral sources, medical history) extend to 5–10 days. The longest step is typically building and validating Freshsales custom fields before data loads — our Freshsales Setup Plan gives your admin a clear checklist to complete before the sample migration runs.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Cliniko.
Land in Freshsales, 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