CRM migration
Field-level mapping, validation, and rollback between Dentally and Salesforce Sales Cloud. We move data and schema; workflows are rebuilt natively in Salesforce Sales Cloud.
Dentally
Source
Salesforce Sales Cloud
Destination
Compatibility
11 of 11
objects map 1:1 between Dentally and Salesforce Sales Cloud.
Complexity
BStandard
Timeline
48–72 hours
Overview
Migrating Dentally to Salesforce Sales Cloud means translating a dental practice-management system into a general CRM schema — there is no native one-to-one object match, so most Dentally entities map to Salesforce custom objects and fields. We map patients to Contacts (via an Account parent), practitioners to Users, appointments to Tasks with custom practitioner and surgery fields, and invoices and treatment plans to custom objects. The harder problems are Dentally's per-surgery pricing not translating to Salesforce per-seat licensing, mapping multi-site Dentally practices to Salesforce Territories, and Dentally's clinical data (tooth charts, medical history) requiring custom fields on the Contact record. FlitStack AI sequences the migration so Accounts resolve before Contacts, Contacts resolve before Tasks, and delta-pickup captures any in-flight appointments during cutover. During the mapping phase we also preserve the original created date in a custom datetime field, map NHS numbers to a custom NHS_Number__c field, and store Dentist_Code__c on the User record. All custom fields are created in Salesforce before data insertion to avoid orphaned records. The migration audit log records every inserted row with its source identifier for traceability. Automations, workflows, and e-referral configurations do not migrate — we export those definitions for your Salesforce admin to rebuild in Flow.
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 Dentally 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.
Dentally
Patient
Salesforce Sales Cloud
Contact + Account
1:1Dentally Patient maps to a Salesforce Contact under an Account record. Each unique practice or clinic in Dentally becomes an Account first; Patients without a clinic assignment land under a default 'Unassigned' Account. This two-step pattern (Account → Contact) ensures Salesforce's required AccountId relationship resolves before contacts are created.
Dentally
Patient custom fields
Salesforce Sales Cloud
Contact custom fields (__c suffix)
1:1Dentally supports custom fields on Patient records (text, tick-box, dropdown). These require Salesforce custom fields on Contact — created with the __c suffix and matching data types. Multi-select pick-lists in Dentally become multi-select pick-lists in Salesforce; text fields become text fields. We create the Salesforce fields first, then map each one during migration.
Dentally
Practitioner
Salesforce Sales Cloud
User
1:1Dentally Practitioner resolves to a Salesforce User by email match. Name maps to FirstName + LastName; role (Dentist, Hygienist, Receptionist) maps to a custom Title or Role field on the User record. Active/inactive status maps to the IsActive flag. Unmatched practitioners are flagged before migration — your team either invites them to Salesforce first or assigns their records to a fallback owner.
Dentally
Appointment
Salesforce Sales Cloud
Task
1:1Dentally Appointment maps to a Salesforce Task. The appointment start time maps to ActivityDate; start_time and end_time become custom Time_Start__c and Time_End__c fields. Status maps via value-mapping (Scheduled → Not Started, Completed → Completed, Cancelled → Cancelled). The linked Patient becomes WhoId (Contact lookup); the Practitioner becomes a custom Practitioner__c field since Tasks do not support User as WhatId.
Dentally
Appointment custom fields
Salesforce Sales Cloud
Task custom fields
1:1Dentally appointment records may carry treatment_codes, surgery, and recall-type custom fields. These map to custom fields on the Task object (e.g., Treatment_Code__c, Surgery__c, Recall_Type__c). Salesforce Tasks support custom fields natively, so no separate custom object is needed. These custom fields preserve the original treatment codes and location references, allowing reports to filter appointments by surgery or recall type in Salesforce.
Dentally
Invoice
Salesforce Sales Cloud
Invoice__c (custom object)
1:1Salesforce has no native Invoice object in standard Sales Cloud — invoices from Dentally migrate to a custom Invoice__c object. Fields include invoice_number, invoice_date, total_amount, amount_paid, payment_status, and linked Contact and Account lookups. Payment_status values (Paid, Part Paid, Outstanding, Written Off) require value-mapping to match your Salesforce pick-list.
Dentally
Treatment Plan
Salesforce Sales Cloud
Treatment_Plan__c (custom object)
1:1Dentally Treatment Plans — including the plan name, status, proposed_date, and total_price — migrate to a custom Treatment_Plan__c object linked to the Contact record. This preserves the plan's proposed treatment items and pricing without collapsing them into a note field. Status values (Proposed, Accepted, Declined, Completed) require value-mapping to Salesforce pick-list values.
Dentally
Treatment Item
Salesforce Sales Cloud
Treatment_Item__c (custom object)
1:1Individual line items within a Dentally Treatment Plan — fee_per_unit, quantity, discount, total — map to a child Treatment_Item__c custom object under Treatment_Plan__c. This preserves the per-item pricing and item description. Link to the Contact for chair-side reference. The Dentally item code and udi_code fields map to custom text fields on the item.
Dentally
Practice / Site
Salesforce Sales Cloud
Account + Territory
1:1Dentally multi-site practices (multiple surgeries under one account) map to multiple Salesforce Account records — one per site. For organizations that use Salesforce Territories for multi-location reporting, we deliver a territory-assignment plan as part of the migration package so your Salesforce admin can pre-configure the territory hierarchy before data lands.
Dentally
Attachment / File
Salesforce Sales Cloud
ContentVersion + ContentDocumentLink
1:1Files attached to Dentally Patient records, Treatment Plans, or Invoices are downloaded and re-uploaded to Salesforce as Files (ContentVersion + ContentDocumentLink). Each file is linked to the corresponding Salesforce record by type. Salesforce's 25MB per-file limit applies; larger files are flagged before migration.
Dentally
NHS Number / national ID
Salesforce Sales Cloud
Custom field on Contact
1:1Dentally Patient records may store NHS_number (UK) or equivalent national health identifiers. Salesforce Contact has no native NHS number field. We create NHS_Number__c as a custom text field on Contact and map the source value directly. If your practice spans multiple countries, equivalent fields (e.g., Health_ID__c) are created per region.
| Dentally | Salesforce Sales Cloud | Compatibility | |
|---|---|---|---|
| Patient | Contact + Account1:1 | Fully supported | |
| Patient custom fields | Contact custom fields (__c suffix)1:1 | Fully supported | |
| Practitioner | User1:1 | Fully supported | |
| Appointment | Task1:1 | Fully supported | |
| Appointment custom fields | Task custom fields1:1 | Fully supported | |
| Invoice | Invoice__c (custom object)1:1 | Fully supported | |
| Treatment Plan | Treatment_Plan__c (custom object)1:1 | Fully supported | |
| Treatment Item | Treatment_Item__c (custom object)1:1 | Fully supported | |
| Practice / Site | Account + Territory1:1 | Fully supported | |
| Attachment / File | ContentVersion + ContentDocumentLink1:1 | Fully supported | |
| NHS Number / national ID | Custom field on Contact1: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.
Dentally gotchas
API rate limits are undocumented and require a support request
Dentally manages inbound migrations rather than offering self-service export
Final migration runs the day before go-live, leaving a narrow correction window
Dentally Vision imaging requires separate product setup
Tier-gated features may be inactive in the migrated environment
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
Discover Dentally schema and export via API
We connect to the Dentally API using scoped read access and enumerate all objects: Patient records (with custom fields), Practitioner accounts, Appointments (with status, practitioner, surgery, and treatment codes), Invoices, and Treatment Plans. We pull the full Dentally export — respecting API pagination and rate limits — and inventory every custom field definition. Any multi-site configuration in Dentally is noted for Salesforce Territory planning. The export output becomes the source-of-truth for field mapping.
Clean data and pre-create Salesforce custom objects and fields
Before any data moves, we run a data-quality pass: duplicate Patient records by email or NHS number are flagged for your team to resolve; missing required fields (LastName, AccountId) are flagged; date formats are normalized to Salesforce datetime standards. Simultaneously, your Salesforce admin (or our team) creates the custom objects (Invoice__c, Treatment_Plan__c, Treatment_Item__c) and custom fields identified in discovery. We deliver a Salesforce setup checklist so the schema is ready before validation runs.
Document field mapping and sequence migration
Every Dentally field is mapped to its Salesforce counterpart in a field-level mapping document. Multi-select pick-lists, date/time splits, and value-mapped status fields are documented with transformation logic. We sequence the migration as: Accounts first (parent for Contacts), then Contacts (requires AccountId), then Practitioners-as-Users (for Task lookups), then Invoices and Treatment Plans, then Appointments-as-Tasks (requires Contact and User resolved). This order respects Salesforce's foreign-key constraints.
Run sample migration with field-level diff
A representative slice — typically 100–300 Patient records, 200–500 Appointments, and all Invoice and Treatment Plan records — migrates to a Salesforce sandbox first. We generate a field-level diff between Dentally source values and Salesforce destination values so you can verify: NHS_Number__c populated correctly, Appointment status value-mapping correct, Invoice payment_status values matching Salesforce pick-list, and Practitioner lookup resolved. Your team validates the diff before we proceed to full migration.
Full migration with delta-pickup and rollback
Full migration runs against Salesforce production. Accounts and Contacts migrate first; then Practitioners are resolved to Users by email match; then Appointments (as Tasks) link to Contact WhoId and Practitioner__c. Invoices and Treatment Plans link to Contacts. A delta-pickup window (24–48 hours) captures any new Patients, Appointments, or Invoice changes made in Dentally during the run. Every operation is logged in an audit trail. One-click rollback reverts all Salesforce changes if reconciliation fails.
Platform deep dives
Dentally
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 Dentally 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
Dentally: Not publicly documented; practices requiring higher limits must request them via Dentally support.
Data volume sensitivity
Dentally 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 Dentally to Salesforce Sales Cloud migration scoping. Not seeing yours? Book a call.
Walk through your Dentally 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 Dentally
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.