CRM migration
Field-level mapping, validation, and rollback between Open Dental and Zoho CRM. We move data and schema; workflows are rebuilt natively in Zoho CRM.
Open Dental
Source
Zoho CRM
Destination
Compatibility
11 of 12
objects map 1:1 between Open Dental and Zoho CRM.
Complexity
BStandard
Timeline
7–14 days
Overview
Open Dental is a practice-management platform centered on patients, appointments, procedures, insurance claims, and billing — not a CRM. Zoho CRM has Leads, Contacts, Accounts, Deals, Tasks, Events, and custom modules but no native concept of patients, procedures, insurance carriers, or treatment plans. FlitStack AI bridges this by pulling records directly from the Open Dental MySQL database (or from Open Dental's export tools), mapping patient demographics to Zoho Contacts with name and address fields, routing unconverted prospects to Zoho Leads, and storing procedure history, insurance plan data, and appointment records as Zoho custom modules and custom fields. Provider records map to Zoho Users. We preserve original PatNum and SecDateEntry timestamps for reconciliation. Custom PatFields defined in Open Dental become Zoho CRM custom fields on the Contact module. We surface the Open Dental workflow logic (recall reminders, appointment confirmations) as a rebuild reference for Zoho Blueprint and workflow rules so your team can re-implement the logic in Zoho without starting from scratch. The migration runs with scoped read access on Open Dental and captures any in-flight changes during the delta window.
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 Open Dental 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.
Open Dental
Patient
Zoho CRM
Contact
1:1Open Dental Patient records map to Zoho CRM Contacts. Demographics (name, DOB, address, phone, email) transfer directly. Original PatNum is stored as Source_PatNum__c for reconciliation. Patients with active treatment plans or recent appointments land as Contacts; archived or inquiry-only records can be mapped to Leads based on appointment history.
Open Dental
Patient (inactive / inquiry-only)
Zoho CRM
Lead
1:manyOpen Dental patients who have never booked an appointment or have no active treatment plan are routed to Zoho CRM Leads rather than Contacts. The split rule uses appointment history: if PatNum has zero completed appointments, the record creates a Zoho Lead. This keeps the Zoho pipeline clean for practices that use Open Dental for lead capture.
Open Dental
Provider
Zoho CRM
User
1:1Open Dental Provider records (ProvNum, FName, LName, Specialty) map to Zoho CRM Users. Matching is done by email address. If a Provider has no email in Open Dental, the migration creates a placeholder Zoho User with the provider abbreviation; your admin assigns records to a real user before go-live.
Open Dental
Appointment
Zoho CRM
Event (custom module)
1:1Open Dental appointments carry OpNum, ProvNum, AptStatus, Pattern (duration in 5-minute increments), and Confirmed status. Zoho CRM native Events store Subject, StartDateTime, EndDateTime, Location, and Description. We transform Open Dental appointments into Zoho Events, storing provider as the Event owner, operatory as Location, and appointment status in a custom Status field. Pattern-based duration is converted to end time in Zoho's datetime format.
Open Dental
ProcedureLog
Zoho CRM
Custom Module: Procedure_History__c
1:1Open Dental ProcedureLog records (ProcCode, ToothNumber, Surf, Fee, InsPay, Copay, ClaimProcStatus) have no Zoho native equivalent. We create a custom module named Procedure_History__c with fields for procedure code, tooth surface, provider, fee, insurance payment, patient responsibility, and claim status. The parent Contact lookup ties each procedure to the patient record.
Open Dental
InsPlan
Zoho CRM
Custom Module: Insurance_Plan__c
1:1Open Dental InsPlan stores CarrierName, SubscriberID, GroupName, GroupNum, and benefits (deductible, maximums, co-insurance percentages). Zoho CRM has no insurance module. We create a custom Insurance_Plan__c module linked to the Contact (subscriber) via a lookup relationship, storing carrier name, group number, subscriber ID, and a serialized benefits JSON or individual custom fields for key benefit limits.
Open Dental
PatPlan
Zoho CRM
Insurance_Plan__c (linked)
1:1Open Dental PatPlan is the per-patient insurance enrollment record linking a Patient to an InsPlan. We link the Zoho Contact to the corresponding Insurance_Plan__c record using the Zoho lookup field. Coverage percentages and effective dates stored as custom fields on the Insurance_Plan__c record.
Open Dental
Claim
Zoho CRM
Custom Module: Claim__c
1:1Open Dental Claim records track ClaimStatus, ClaimType, PriInsPaid, SecInsPaid, and associated ProcNums. We create a custom Claim__c module linked to the Contact and Insurance_Plan__c. Claim status (Sent, Received, Received as Exception, ClaimPay) migrates as a custom pick-list field; total paid amounts and procedure references are stored as currency and multi-line text fields.
Open Dental
PatField (custom fields)
Zoho CRM
Custom fields on Contact
1:1Open Dental PatFields use FieldName and FieldValue with types Text, PickList, Date, Checkbox, and Currency. Zoho CRM custom fields support all these data types. We audit all PatFieldDef records, create matching Zoho CRM custom fields on the Contact module (e.g., Insurance_Status__c as picklist, Last_X-Ray__c as date), and migrate FieldValue data. PickList PatFields require value-by-value mapping if the Open Dental picklist values differ from Zoho picklist options.
Open Dental
Document / Image
Zoho CRM
Zoho CRM Attachments
1:1Open Dental Document records (images, PDFs, scanned forms) linked to patients can be exported and re-uploaded to Zoho CRM as file attachments on the Contact record. Large imaging files (panoramic X-rays) are flagged for separate handling; per Open Dental's own docs, most X-ray systems are bridged rather than stored directly.
Open Dental
Family / Guarantor
Zoho CRM
Custom field on Contact
1:1Open Dental family grouping uses a Guarantor relationship where the family head is responsible for billing. Zoho CRM has no family or guarantor model. We create a Guarantor_Name__c custom field on Contact and a Family_ID__c field to surface family grouping, so billing responsibility is visible on each family member's contact record even without a true parent-child relationship.
Open Dental
Payment
Zoho CRM
Custom Module: Payment__c
1:1Open Dental Payment records (PayNum, PayType, PayAmt, PayDate, PaySource) and associated PaySplits tie payments to procedures and providers. Zoho CRM has no native payment or accounting module. We create a Payment__c custom module linked to the Contact and Procedure_History__c, storing payment type, amount, date, and provider as custom fields.
| Open Dental | Zoho CRM | Compatibility | |
|---|---|---|---|
| Patient | Contact1:1 | Fully supported | |
| Patient (inactive / inquiry-only) | Lead1:many | Fully supported | |
| Provider | User1:1 | Fully supported | |
| Appointment | Event (custom module)1:1 | Fully supported | |
| ProcedureLog | Custom Module: Procedure_History__c1:1 | Fully supported | |
| InsPlan | Custom Module: Insurance_Plan__c1:1 | Fully supported | |
| PatPlan | Insurance_Plan__c (linked)1:1 | Fully supported | |
| Claim | Custom Module: Claim__c1:1 | Fully supported | |
| PatField (custom fields) | Custom fields on Contact1:1 | Fully supported | |
| Document / Image | Zoho CRM Attachments1:1 | Fully supported | |
| Family / Guarantor | Custom field on Contact1:1 | Fully supported | |
| Payment | Custom Module: Payment__c1: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.
Open Dental gotchas
X-ray images do not migrate between systems
Scanned documents require a separate image conversion with additional cost
Server must run MySQL with myISAM engine, not InnoDB
API pagination is limited to 100 records per request
Custom sheets use proprietary XML that only imports to Open Dental
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
Obtain Open Dental database read access and run pre-migration audit
FlitStack AI requests scoped read-only MySQL credentials for the Open Dental database from the practice or their dental IT host. We run a schema audit across all tables (Patient, Appointment, ProcedureLog, InsPlan, PatPlan, Claim, Payment, Provider, PatField, PatFieldDef, Document) and produce a record-count summary and a PatField inventory listing each custom field name, type, and usage frequency. This audit confirms whether the Open Dental database is on a supported MySQL/MariaDB version and whether the host allows direct DB queries. If direct access is not available, we coordinate with the practice to export tables via Open Dental's available methods and verify relationship integrity in the exported files.
Create Zoho CRM custom modules and custom fields before import
Based on the PatField inventory, FlitStack AI creates all required Zoho CRM custom fields on the Contact module via the Zoho CRM API (POST /settings/fields?module=Contacts). We also create the three custom modules — Procedure_History__c, Insurance_Plan__c, and Claim__c — and define the lookup relationships to Contact. Provider records are matched to Zoho Users by email; any provider without an email gets a placeholder Zoho User flagged for admin completion. All custom field and module creation is documented in a Zoho setup checklist so your admin can verify the schema before data lands.
Map and clean patient, appointment, and insurance data with relationship resolution
We extract Patient, Provider, Appointment, ProcedureLog, InsPlan, PatPlan, Claim, and Payment records from the Open Dental MySQL database in dependency order. Family grouping (Guarantor relationships) is resolved first so each Contact record can carry the correct Guarantor_Name__c and Family_ID__c values. InsPlan records are created in the custom Insurance_Plan__c module and linked to Contact records via PatPlan. ProcedureLog records are created in Procedure_History__c with a lookup to Contact and a reference to the procedure code. We deduplicate by PatNum and flag records with missing required fields (no last name, no email) for manual review before the full run.
Run sample migration with field-level diff on 100–300 records
A representative slice of patients (including patients with complex insurance setups, multiple family members, and appointment history) migrates first. We validate that PatNum maps to Source_PatNum__c, guarantor names appear on family member contacts, procedure history links to the correct Contact, and insurance plan lookups resolve correctly. The field-level diff report shows source value vs. destination value for every mapped field so the practice manager or dentist can confirm the data looks correct before we proceed to the full migration run.
Execute full migration with delta-pickup window and audit log
Full migration runs against the Zoho CRM org. Accounts (from Open Dental Providers) are created first, then Contacts and Leads, then the three custom modules with their Contact lookups resolved. An audit log captures every operation (insert, update, skip) with source record ID and destination record ID. A delta-pickup window (24–48 hours) runs after the initial migration completes to capture any Open Dental records modified during the cutover period. Once delta records are confirmed, the audit log is delivered and one-click rollback is available if reconciliation identifies missing records or incorrect relationships.
Platform deep dives
Open Dental
Source
Strengths
Weaknesses
Zoho CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. All 8 core objects map 1:1 between Open Dental and Zoho CRM.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Open Dental and Zoho CRM.
Object compatibility
All 8 core objects map 1:1 between Open Dental 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
Open Dental: Remote mode: 1,000 elements; Local/Service mode: 10,000 elements; Enterprise tier doubles Remote mode limits.
Data volume sensitivity
Open Dental 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 Open Dental to Zoho CRM migration scoping. Not seeing yours? Book a call.
Walk through your Open Dental 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 Open Dental
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.