CRM migration
Field-level mapping, validation, and rollback between Open Dental and Microsoft Dynamics 365 Sales . We move data and schema; workflows are rebuilt natively in Microsoft Dynamics 365 Sales .
Open Dental
Source
Microsoft Dynamics 365 Sales
Destination
Compatibility
12 of 12
objects map 1:1 between Open Dental and Microsoft Dynamics 365 Sales .
Complexity
BStandard
Timeline
2–4 weeks
Overview
Open Dental is a server-based dental practice management system with a patient-centric data model covering demographics, clinical procedures, insurance claims, and provider records. Dynamics 365 Sales is a cloud CRM on Dataverse with Account, Contact, Lead, and Opportunity entities — it has no native clinical data model, so dental practices must design custom entities for procedures and insurance. FlitStack AI bridges this gap by mapping Open Dental patients to Contacts, appointment history to ActivityPointer records, and clinical procedures plus insurance claims to custom Dataverse entities. We sequence the load by dependency: insurance plans first (since claims reference them), then providers as Contacts with role fields, then patients, procedures, and appointments. Automated appointment reminders, treatment plan alerts, and eRx integrations in Open Dental do not transfer — those require separate configuration in Power Automate, Dynamics workflows, or the relevant integration provider. We preserve original procedure dates, tooth-number sequences, insurance breakdown lines, and provider assignments. A pre-migration test run with field-level diff validates mapping accuracy before the production cutover commits.
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.
Source platform
Open Dental platform overview
Scorecard, SWOT, gotchas, and pricing for Open Dental.
Destination platform
Microsoft Dynamics 365 Sales platform overview
Scorecard, SWOT, gotchas, and pricing for Microsoft Dynamics 365 Sales .
Data migration guide
The complete Microsoft Dynamics 365 Sales migration guide
Data model, import mechanisms, field mapping strategy, pitfalls, and cutover — by the engineers running it.
Destination checklist
Microsoft Dynamics 365 Sales migration checklist
Pre- and post-cutover tasks for moving onto Microsoft Dynamics 365 Sales .
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 Microsoft Dynamics 365 Sales , 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
Microsoft Dynamics 365 Sales
Contact
1:1We map Open Dental Patient to Dynamics 365 Contact. The patient's PatNum becomes Source_System_ID__c on the Contact for delta-run deduplication. The primary address maps to Address1 fields; if the patient has both home and work addresses, the secondary maps to Address2 fields. Original create dates and modification timestamps migrate as custom datetime columns since Dataverse CreatedOn is set at migration time.
Open Dental
InsPlan (Insurance Plan)
Microsoft Dynamics 365 Sales
Custom Entity: new_insplan
1:1Open Dental's InsPlan has no direct equivalent in Dynamics 365 Sales. We create a new_insplan custom entity in Dataverse linked to the patient Contact, storing PlanNum, CarrierName, GroupName, SubscriberID, and EffectiveDate as custom columns. Each plan record is created before claims so that claim-to-plan lookups resolve correctly during the migration sequence.
Open Dental
InsSub (Insurance Subscriber / Patient Insurance)
Microsoft Dynamics 365 Sales
new_insplan + Contact.new_inssubscriber
1:1Open Dental links InsSub records to patients and InsPlan records. We attach the new_insplan record to the Contact and populate custom fields on the Contact for the subscriber ID, relationship (Self/Spouse/Other), and coverage percentage. The InsSub effective date maps to a custom date field on the new_insplan record. If a patient has multiple subscriber relationships, we create multiple new_insplan instances or store them as JSON in a custom field, flagged for admin review.
Open Dental
Provider
Microsoft Dynamics 365 Sales
Contact + new_providertype custom field
1:1Open Dental Providers map to Dynamics 365 Contact records. The provider's FName and LName populate FirstName and LastName on the Contact. We create a new_providertype custom pick-list field on Contact with values 'Dentist', 'Hygienist', 'Assistant', and 'Front Desk' to distinguish provider roles, matching the ProviderType value in Open Dental. Provider email maps to EMailAddress1 if present. Unmatched providers are flagged before migration.
Open Dental
Appointment
Microsoft Dynamics 365 Sales
ActivityPointer (Appointment) + Contact
1:1We map Open Dental appointments to ActivityPointer records, linking each to the patient Contact via the RegardingObjectId lookup. Original appointment date and time populate ScheduledStart and ScheduledEnd. The appointment status (Complete, Scheduled, Broken, etc.) maps via a value-translation table to ActivityPointer StateCode and StatusCode. Provider assignments migrate as a custom field on the activity. If Open Dental stores operatory or room assignments, those go into custom activity fields.
Open Dental
ProcedureLog
Microsoft Dynamics 365 Sales
Custom Entity: new_procedure
1:1Open Dental clinical procedures have no native equivalent in Dynamics 365 Sales. We create a new_procedure custom entity in Dataverse linked to the patient Contact, storing ProcDate as ActualStart, ProcFee as a currency field, ToothRange and Surf as text fields, and the procedure status as a pick-list. If Open Dental records surface on individual teeth, we store the combined tooth-surface notation as a single text string (e.g., 'Tooth 14, MOD'). The procedure code (ADACode) migrates as a text field for reference.
Open Dental
Claim
Microsoft Dynamics 365 Sales
Custom Entity: new_claim
1:1Insurance claims have no native equivalent in Dynamics 365 Sales. We create a new_claim custom entity linked to the patient Contact and the new_insplan entity, capturing ClaimDate, CarrierName, GroupName, ClaimStatus (Submitted, Pending, Received, etc.), ClaimFeeBilled, and InsPayAmt. The claim status maps via a value-translation table to the new_claim custom pick-list. Provider assignments on the claim link to the provider Contact record. Each claim is created after the associated InsPlan to satisfy the Dataverse lookup.
Open Dental
Document
Microsoft Dynamics 365 Sales
Annotation
1:1Open Dental documents — treatment plan PDFs, imaging referrals, signed forms — migrate as Dataverse Annotation records attached to the patient Contact or relevant new_procedure record. The original filename and MimeType (image/jpeg, application/pdf) are preserved. Document content is re-uploaded to the Dynamics 365 SharePoint-integrated storage if the practice has SharePoint enabled, or stored as notes attachments. If documents reference specific procedures or providers, those links surface as custom fields on the annotation for audit traceability.
Open Dental
ReferralDoctor
Microsoft Dynamics 365 Sales
Contact + new_referralsource custom field
1:1Open Dental referral sources have no dedicated entity in Dynamics 365 Sales. We create a Contact record for each referral doctor with a new_referralsource custom pick-list field set to 'Referral'. The referral name, address, and contact information populate the Contact fields. If Open Dental records a referral date for a specific patient, we store that date on the patient Contact record in a new_referraldate custom field. Referral counts per source require a Power BI separate report built post-migration.
Open Dental
PatField (Custom Patient Fields)
Microsoft Dynamics 365 Sales
Contact custom columns
1:1Open Dental PatFields (Text, PickList, Date, Checkbox, Currency types) migrate as Dataverse custom columns on the Contact record. We create a column for each unique PatField.FieldName encountered in the source data, prefixed with 'new_' per Dataverse naming convention. Pick-list values require a separate value-mapping step against the Open Dental patfielddef list. PatField entries are loaded after the Contact schema is finalized in Dataverse so that each record's custom field values insert cleanly.
Open Dental
Adjustment / Payment
Microsoft Dynamics 365 Sales
Contact financial fields + Annotation
1:1Open Dental adjustments and payments are loaded as structured Annotation records on the Contact, capturing the transaction date, amount, and type (Credit, Debit, Write-off) in a custom note format readable by finance staff. The running account balance is stored as a custom currency field (new_accountbalance) on the Contact record for quick reference. Detailed payment histories are preserved as attachment records if Open Dental generates statement PDFs.
Open Dental
User (Staff/User)
Microsoft Dynamics 365 Sales
SystemUser
1:1Open Dental User records map to Dynamics 365 SystemUser records by email address lookup. FlitStack matches each Open Dental Userod.UserName to a Dynamics 365 user by their email. Unmatched users are flagged before migration — practices either create the user in Dynamics 365 first or assign their Open Dental records to a fallback owner. User permissions and role restrictions in Open Dental do not migrate and must be rebuilt as Security Roles in Dynamics 365 post-migration.
| Open Dental | Microsoft Dynamics 365 Sales | Compatibility | |
|---|---|---|---|
| Patient | Contact1:1 | Fully supported | |
| InsPlan (Insurance Plan) | Custom Entity: new_insplan1:1 | Fully supported | |
| InsSub (Insurance Subscriber / Patient Insurance) | new_insplan + Contact.new_inssubscriber1:1 | Fully supported | |
| Provider | Contact + new_providertype custom field1:1 | Fully supported | |
| Appointment | ActivityPointer (Appointment) + Contact1:1 | Fully supported | |
| ProcedureLog | Custom Entity: new_procedure1:1 | Fully supported | |
| Claim | Custom Entity: new_claim1:1 | Fully supported | |
| Document | Annotation1:1 | Fully supported | |
| ReferralDoctor | Contact + new_referralsource custom field1:1 | Fully supported | |
| PatField (Custom Patient Fields) | Contact custom columns1:1 | Fully supported | |
| Adjustment / Payment | Contact financial fields + Annotation1:1 | Fully supported | |
| User (Staff/User) | SystemUser1: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
Microsoft Dynamics 365 Sales gotchas
Professional tier 15-table custom table limit blocks migrations
October 2024 pricing increase applies at renewal for all customers
Custom fields must be created in the UI before API writes
Power Platform request limits apply to bulk migrations
Activity records orphaned to inactive owners fail silently
Pair-specific challenges
Migration approach
Inventory Open Dental data via API and design Dataverse custom schema
FlitStack connects to the Open Dental REST API using OAuth 2.0 bearer token authentication and paginates through all Patient, Provider, Appointment, ProcedureLog, Claim, InsPlan, InsSub, and PatField records. We build a data inventory report showing record counts, custom PatField names and types, provider email coverage, and insurance plan structure. Against this inventory, we design the Dataverse custom entity schema: new_procedure, new_insplan, new_insclaimline, and any custom columns needed on Contact and ActivityPointer. The custom schema is delivered as a Dataverse solution file for the admin to import and publish before the migration runs.
Build value-mapping tables and transform clinical and insurance data structures
We build transformation logic for the structures that require reshaping: Open Dental tooth-surface notation (individual teeth and surfaces) is concatenated into text strings for new_toothrange and new_surface fields on new_procedure. Insurance claim breakdown lines are flattened into a structure suitable for the new_insclaimline entity or JSON-typed custom field. Appointment status codes are mapped to Dynamics 365 StatusCode via the pre-built value table. All transformation logic is documented in the field-mapping plan delivered before migration. For any structures that cannot be fully automated (e.g., ambiguous insurance relationship types), we flag the records and deliver a manual-resolution spreadsheet to the practice.
Match Open Dental providers and users to Dynamics 365 users by email
We query all Open Dental Provider and User records and attempt to match each to a Dynamics 365 SystemUser by email address. Unmatched providers are flagged and delivered in a resolution report: the practice either creates the corresponding user in Dynamics 365 first or assigns those records to a fallback Contact. User permissions and security roles in Open Dental do not migrate — we deliver a role-mapping worksheet that maps Open Dental user groups to Dynamics 365 Security Roles so the admin can configure access post-migration.
Run a test migration with field-level diff on a representative record slice
A representative slice of 100–500 records — spanning patients, appointments, procedures, and claims across multiple providers — migrates to the Dynamics 365 sandbox or production environment. We generate a field-level diff showing source values versus destination values for every mapped column, including custom entity fields. The diff is reviewed with the practice manager to verify insurance plan linkages, procedure-tooth mapping, appointment status translation, and provider assignment resolution before the full production run is scheduled.
Execute production migration with delta-pickup window and post-migration validation
The full migration commits to Dynamics 365 production. A delta-pickup window of 24–48 hours runs after the bulk load, capturing any patient records, appointments, or procedures created or modified in Open Dental during the cutover window. FlitStack then delivers a reconciliation report: record counts per entity, null-check results on required fields (new_plannum lookups, Contact email), and a spot-check sample of 20 procedures and 20 claims for field-level accuracy. The practice confirms counts match before switching to Dynamics 365 Sales as the system of record. One-click rollback reverts the Dynamics 365 environment to pre-migration state if reconciliation fails.
Platform deep dives
Open Dental
Source
Strengths
Weaknesses
Microsoft Dynamics 365 Sales
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. All 8 core objects map 1:1 between Open Dental and Microsoft Dynamics 365 Sales .
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Open Dental and Microsoft Dynamics 365 Sales .
Object compatibility
All 8 core objects map 1:1 between Open Dental and Microsoft Dynamics 365 Sales .
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 Microsoft Dynamics 365 Sales migration scoping. Not seeing yours? Book a call.
Walk through your Open Dental to Microsoft Dynamics 365 Sales 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 Microsoft Dynamics 365 Sales
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.