CRM migration

Migrate from Open Dental to Microsoft Dynamics 365 Sales

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 logo

Open Dental

Source

Microsoft Dynamics 365 Sales

Destination

Microsoft Dynamics 365 Sales  logo

Compatibility

100%

12 of 12

objects map 1:1 between Open Dental and Microsoft Dynamics 365 Sales .

Complexity

BStandard

Timeline

2–4 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

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.

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

Open Dental logo

Open Dental

What's pushing teams away

  • Open Dental runs on a local Windows server that the practice must maintain; offices without dedicated IT staff experience server crashes, slowdowns, and update failures as operational risk.
  • The interface and feature set have a dated UX that newer staff find unintuitive compared to cloud-first alternatives, leading to training overhead and reduced staff satisfaction.
  • Scaling beyond two or three locations requires significant configuration work (Replication, CEMT, Enterprise features) that demands technical expertise most solo or small-group practices lack.
  • Performance degrades with large patient bases and years of transaction history stored in the same database, causing slow queries and screen delays during peak hours.

Choosing

Microsoft Dynamics 365 Sales  logo

Microsoft Dynamics 365 Sales

What's pulling them in

  • Deep Microsoft 365, Teams, and Outlook integration makes Microsoft Dynamics 365 Sales a natural fit for Microsoft-first organizations already invested in that ecosystem
  • Sales Enterprise and Premium tiers offer unlimited custom tables and advanced AI-driven forecasting and predictive analytics not available in lower tiers
  • Professional tier pricing at $65 per user per month offers a lower entry cost than Salesforce for SMB teams with straightforward CRM needs
  • Flexible customization options allow businesses to build bespoke apps, tailor forms and views, and integrate with other Dynamics 365 modules
  • Microsoft Copilot AI tools are embedded directly into the sales workflow on Enterprise and Premium, automating routine tasks and providing deal intelligence

Object mapping

How Open Dental objects map to Microsoft Dynamics 365 Sales

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

maps to

Microsoft Dynamics 365 Sales

Contact

1:1
Fully supported

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

maps to

Microsoft Dynamics 365 Sales

Custom Entity: new_insplan

1:1
Fully supported

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

maps to

Microsoft Dynamics 365 Sales

new_insplan + Contact.new_inssubscriber

1:1
Fully supported

Open 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

maps to

Microsoft Dynamics 365 Sales

Contact + new_providertype custom field

1:1
Fully supported

Open 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

maps to

Microsoft Dynamics 365 Sales

ActivityPointer (Appointment) + Contact

1:1
Fully supported

We 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

maps to

Microsoft Dynamics 365 Sales

Custom Entity: new_procedure

1:1
Fully supported

Open 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

maps to

Microsoft Dynamics 365 Sales

Custom Entity: new_claim

1:1
Fully supported

Insurance 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

maps to

Microsoft Dynamics 365 Sales

Annotation

1:1
Fully supported

Open 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

maps to

Microsoft Dynamics 365 Sales

Contact + new_referralsource custom field

1:1
Fully supported

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

maps to

Microsoft Dynamics 365 Sales

Contact custom columns

1:1
Fully supported

Open 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

maps to

Microsoft Dynamics 365 Sales

Contact financial fields + Annotation

1:1
Fully supported

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

maps to

Microsoft Dynamics 365 Sales

SystemUser

1:1
Fully supported

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

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.

Open Dental logo

Open Dental gotchas

High

X-ray images do not migrate between systems

Medium

Scanned documents require a separate image conversion with additional cost

High

Server must run MySQL with myISAM engine, not InnoDB

Medium

API pagination is limited to 100 records per request

Medium

Custom sheets use proprietary XML that only imports to Open Dental

Microsoft Dynamics 365 Sales  logo

Microsoft Dynamics 365 Sales gotchas

High

Professional tier 15-table custom table limit blocks migrations

High

October 2024 pricing increase applies at renewal for all customers

Medium

Custom fields must be created in the UI before API writes

Medium

Power Platform request limits apply to bulk migrations

Medium

Activity records orphaned to inactive owners fail silently

Pair-specific challenges

  • Open Dental's clinical data model has no native equivalent in Dynamics 365 Sales

    Open Dental stores procedure records with tooth-number arrays, surface codes, ADA procedure codes, and clinical notes in a single normalized structure. Dynamics 365 Sales has no native clinical data model — it ships with Contact, Account, Lead, Opportunity, and Task. FlitStack AI creates a new_procedure custom Dataverse entity to capture ProcDate, ProcFee, ToothRange, Surf, and ADACode. The new entity requires Dataverse schema setup (custom table, columns, and relationships) before data lands, and the Dynamics 365 admin must publish the solution. Practices with per-tooth procedure breakdowns need additional transformation work: individual tooth-surface entries are concatenated into a single text string (e.g., 'Tooth 14 MOD') because Dataverse has no native array or per-tooth repeat field type.

  • Insurance plan and claim structures require custom entity design before migration

    Open Dental's insurance architecture splits coverage across InsPlan (carrier-level plan), InsSub (subscriber-level coverage with relationship and effective dates), and Claim (claim-level billing with status and payment history). Dynamics 365 Sales ships with no insurance claims model. FlitStack AI designs a new_insplan custom Dataverse entity linked to Contact for plan records, and a new_claim custom entity for claim records with a lookup to new_insplan. The claim-to-plan relationship requires referential integrity setup in Dataverse so that claims cannot land without a valid plan lookup. If the practice has nested insurance breakdown lines (provider-specific fees, allowed amounts, write-offs), each line item requires a separate new_insclaimline custom entity or a JSON-structured custom field, increasing mapping complexity and migration cost.

  • Appointment status value sets differ between Open Dental and Dynamics 365 Sales

    Open Dental appointment statuses (Scheduled, Complete, Broken, Postponed, SS, AS, etc.) use a different pick-list vocabulary than Dynamics 365 Sales ActivityPointer StateCode and StatusCode values. FlitStack builds a value-mapping table before migration that translates each Open Dental status to the nearest Dynamics 365 StatusCode (Scheduled maps to Open, Complete maps to Completed, Broken maps to Canceled). Any Open Dental statuses with no direct equivalent are mapped to a custom StatusCode value and flagged in the pre-migration validation report. This affects downstream reporting continuity — practice managers reviewing appointment completion rates in Dynamics 365 will see the mapped statuses, not the original Open Dental vocabulary.

  • Custom PatFields require Dataverse custom column creation and value-mapping for pick-list types

    Open Dental PatFields support Text, PickList, Date, Checkbox, and Currency field types. Dynamics 365 Sales Contact records have a limited set of standard columns; any PatField encountered in the source data requires a new_customfieldname custom column on the Contact table in Dataverse. FlitStack iterates over all unique PatField.FieldName values in the export, creates a corresponding Dataverse column for each (with the correct data type), and publishes the solution before inserting data. For PatFields of type PickList, we additionally map the Open Dental patfielddef pick-list values to Dataverse option-set values — mismatches between the two value sets are surfaced in the pre-migration plan for the admin to reconcile.

  • Provider assignments on appointments require custom fields and email-match resolution

    Open Dental stores provider assignments directly on the Appointment record via ProvNum, which references the Provider table. Dynamics 365 Sales ActivityPointer has no native provider field — the nearest concept is the OwnerId (Dynamics user) or an activity-party entry. FlitStack resolves Open Dental Provider records to Dynamics 365 Contact records by email address. The mapped provider Contact ID is then stored in a new_providernum custom field on each ActivityPointer record. If a provider has no email in Open Dental, we flag that record before migration so the practice can either add an email to the provider record in Open Dental or assign the activity to a fallback Contact. Providers who are not also Dynamics 365 users cannot own records — they appear as Contact-linked assignments only.

Migration approach

Six steps for a successful Open Dental to Microsoft Dynamics 365 Sales data migration

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

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

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

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

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

Context on both ends of the pair

Open Dental logo

Open Dental

Source

Strengths

  • One-time license fee with no per-seat recurring cost after the first year, making it the lowest total cost of ownership for stable practices.
  • Open-source codebase means the database schema is publicly documented and independent developers can build integrations without vendor dependency.
  • Multi-location support through Clinics, Replication, and CEMT scales from a single practice to a DSO with 30+ locations on a single database.
  • API with REST endpoints for Patients, Appointments, Claims, Payments, PayPlans, Documents, and Setup gives third-party tools a reliable integration surface.
  • Strong practitioner community and independent trainer ecosystem produce extensive documentation, forum support, and video walkthroughs for self-service learning.

Weaknesses

  • Server-based deployment requires the practice to own or rent server infrastructure and maintain Windows Server, MySQL, and .NET dependencies locally.
  • No cloud-hosted SaaS option built and supported directly by Open Dental Software; third-party hosting providers add variable cost and support tiers.
  • Interface design reflects its 2003 origins and has not undergone the UX modernization that cloud competitors have invested in heavily.
  • Performance degrades noticeably as the database grows to hundreds of thousands of patients and millions of procedure rows, requiring periodic database maintenance.
Microsoft Dynamics 365 Sales  logo

Microsoft Dynamics 365 Sales

Destination

Strengths

  • Native integration with Microsoft 365, Teams, Outlook, and SharePoint for unified productivity workflow
  • Unlimited custom tables and complex workflows on Enterprise tier enable deep customization for complex sales processes
  • AI-driven predictive analytics and deal intelligence on Enterprise and Premium tiers help sales teams prioritize pipeline
  • Dataverse unified data layer provides a consistent API and data model across all Dynamics 365 and Power Platform apps
  • Strong security model with Field-Level Security and Record Ownership rules for governance-conscious enterprises

Weaknesses

  • Sales Professional tier caps custom tables at 15, creating a migration ceiling for highly customized SMB environments
  • October 2024 pricing increases of $15 per user across all tiers apply to existing customers upon renewal
  • Implementation typically requires costly certified partners, adding 30–50% to total project cost
  • Updates and platform releases can disrupt customizations and plugins, requiring regression testing after each wave
  • Non-Microsoft integrations require additional configuration or middleware, limiting flexibility for heterogeneous tech stacks

Complexity grading

How hard is this migration?

Standard CRM migration. All 8 core objects map 1:1 between Open Dental and Microsoft Dynamics 365 Sales .

B

Overall complexity

Standard migration

Derived from compatibility, mapping clarity, API constraints, and data volume across Open Dental and Microsoft Dynamics 365 Sales .

  • Object compatibility

    A

    All 8 core objects map 1:1 between Open Dental and Microsoft Dynamics 365 Sales .

  • 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

    Open Dental: Remote mode: 1,000 elements; Local/Service mode: 10,000 elements; Enterprise tier doubles Remote mode limits.

  • Data volume sensitivity

    B

    Open Dental doesn't expose a bulk API — REST + parallelization used for high-volume runs.

Estimator

Estimate your Open Dental to Microsoft Dynamics 365 Sales 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 Open Dental to Microsoft Dynamics 365 Sales data migrations

Answers to the questions buyers ask most during Open Dental to Microsoft Dynamics 365 Sales migration scoping. Not seeing yours? Book a call.

Can't find your answer?

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 consultation

Small practices with under 5,000 patient records and clean data typically complete in 2–4 weeks of clock time. Multi-location practices with 10,000+ patient records, extensive insurance claim histories, and numerous custom PatFields can require 8–12 weeks or longer. The longest phase is usually the schema design for custom Dataverse entities and the value-mapping build for appointment statuses, insurance relationship types, and custom field pick-lists. A pre-migration test run with a representative record slice typically takes 2–3 days and should be completed before the production cutover is scheduled.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Open Dental.
Land in Microsoft Dynamics 365 Sales , 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