CRM migration
Field-level mapping, validation, and rollback between Dentally and Microsoft Dynamics 365 Sales . We move data and schema; workflows are rebuilt natively in Microsoft Dynamics 365 Sales .
Dentally
Source
Microsoft Dynamics 365 Sales
Destination
Compatibility
16 of 16
objects map 1:1 between Dentally and Microsoft Dynamics 365 Sales .
Complexity
BStandard
Timeline
48–72 hours
Overview
Migrating from Dentally to Dynamics 365 Sales means translating a dental-practice management data model into a CRM-native structure that supports leads, opportunities, quotes, and full sales forecasting. Dentally stores patients, practitioners, appointments, treatment plans, and invoices in a practice-centric schema. Dynamics 365 Sales natively understands Accounts, Contacts, Leads, and Opportunities, but dental-specific objects like treatment plans and invoices have no built-in equivalent — they require custom Dataverse tables. We extract Dentally data via its API using scoped read access, map all standard contact fields directly, and translate treatment plans, appointments, and invoices into custom tables with lookups that preserve the patient-to-practitioner and invoice-to-treatment relationships. Original create and modify timestamps carry forward on every record so Dynamics 365 reporting reflects the full history from go-live. A sample migration with field-level diff runs first, followed by a sequenced full load and a delta-pickup window during cutover so no in-flight appointments or invoice updates are lost.
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
Dentally platform overview
Scorecard, SWOT, gotchas, and pricing for Dentally.
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 Dentally 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.
Dentally
Patient
Microsoft Dynamics 365 Sales
Contact
1:1Every Dentally patient maps to a Dynamics 365 Contact record. Fields including firstname, lastname, email, phone, mobilephone, address, and date of birth map directly. Practitioner_Assigned__c creates a lookup to the Practitioner__c custom table so the assigned dentist surfaces on the patient record. Original create and modify timestamps preserved as custom datetime fields.
Dentally
Patient.email
Microsoft Dynamics 365 Sales
Contact.Email
1:1Email is a required, unique field on Contact. If Dentally stores multiple email addresses, the primary address routes to Email and additional addresses populate a custom Email_2__c text field on Contact. Email validation and de-duplication runs before insert to prevent duplicate Contact records in Dynamics 365.
Dentally
Practitioner
Microsoft Dynamics 365 Sales
Custom Table: Practitioner__c
1:1Dentally practitioners (dentists, hygienists, specialists) have no direct CRM equivalent. We create a Practitioner__c custom Dataverse table with fields for name, title, registration number, and email, linked to a Contact record via a lookup. The Contact lookup allows appointment queries to return the practitioner name directly without a custom join.
Dentally
Practitioner.location
Microsoft Dynamics 365 Sales
Practitioner__c.Location__c / Account.ParentAccountId
1:1Dentally stores practice location against each practitioner. For multi-location groups, the Dentally location translates to an Account record, and Practitioner__c.Location__c stores a lookup to that Account. Single-location setups map the location name to a text field on Practitioner__c. Location lookups also enable reporting by site and support hierarchical sharing rules across business units in Dynamics 365.
Dentally
Account / Referring Practice
Microsoft Dynamics 365 Sales
Account
1:1If Dentally stores referring practices or corporate dental groups, those entities map directly to Dynamics 365 Sales Accounts. Account.Name receives the practice name, Industry defaults to Healthcare, and NumberOfEmployees reflects practice headcount. Multi-location groups map to a parent Account with subsidiary locations as child Accounts linked via ParentAccountId.
Dentally
Treatment Plan
Microsoft Dynamics 365 Sales
Custom Table: Treatment_Plan__c
1:1Dentally treatment plans contain procedure codes, clinical notes, proposed dates, and cost estimates with patient and practitioner links. We create a Treatment_Plan__c Dataverse table with a Contact lookup for the patient, a Practitioner__c lookup for the treating practitioner, and currency fields for estimated and actual costs. Clinical notes transfer as a large-text field.
Dentally
Treatment Item
Microsoft Dynamics 365 Sales
Custom Table: Treatment_Item__c
1:1Individual treatment line items within a plan carry procedure codes, descriptions, and costs. A Treatment_Item__c custom table links to Treatment_Plan__c via a lookup and to the Contact via a second lookup for direct patient queries. Dentally custom fields on treatment items become custom columns on Treatment_Item__c with the same field type (text, picklist, number) before migration.
Dentally
Appointment
Microsoft Dynamics 365 Sales
Custom Table: Appointment__c
1:1Every Dentally appointment record — including historical ones — migrates to a custom Appointment__c Dataverse table with lookups to Contact (patient) and Practitioner__c (practitioner). Appointment_Date__c and Appointment_Time__c store the original scheduled datetime, Status__c maps via value mapping, and Duration_Minutes__c preserves the slot length. Clinical notes from the appointment transfer to Notes__c for chair-side reference.
Dentally
Appointment Status
Microsoft Dynamics 365 Sales
Appointment__c.Status__c (custom picklist)
1:1Dentally appointment statuses (Scheduled, Confirmed, Arrived, In Progress, Completed, Cancelled, No Show) require value-by-value mapping to Appointment__c.Status__c picklist values. If Dentally uses custom status names, the mapping table is delivered before migration so your team can validate the status translation.
Dentally
Invoice
Microsoft Dynamics 365 Sales
Custom Table: Invoice__c
1:1Dentally invoices (invoice number, status, total amount, outstanding balance, invoice date, due date) map to an Invoice__c custom Dataverse table with a Contact lookup pointing to the patient. Invoice_Status__c maps via value mapping (Paid, Partially Paid, Overdue, Written Off) and Outstanding_Balance__c preserves the remaining amount.
Dentally
Invoice
Microsoft Dynamics 365 Sales
Custom Table: Invoice__c
1:1Dentally invoices (invoice number, status, total amount, outstanding balance, invoice date, due date) map to an Invoice__c custom Dataverse table with a Contact lookup pointing to the patient. Invoice_Status__c maps via value mapping (Paid, Partially Paid, Overdue, Written Off) and Outstanding_Balance__c preserves the remaining amount. Invoice_Date__c and Due_Date__c are preserved as date fields, allowing Power BI reports to calculate days‑outstanding and overdue aging buckets directly.
Dentally
Invoice Line Item
Microsoft Dynamics 365 Sales
Custom Table: Invoice_Line_Item__c
1:1Line items from Dentally invoices migrate as Invoice_Line_Item__c records linked to Invoice__c via a lookup. Fields include Description__c, Quantity__c, Unit_Price__c, and Total_Amount__c. If a line item references a treatment, the Treatment_Item__c record ID is preserved in Treatment_Item_ID__c for cross-referencing.
Dentally
Payment
Microsoft Dynamics 365 Sales
Custom Table: Payment__c
1:1Payment records in Dentally migrate as Payment__c with Payment_Date__c, Amount__c, and Payment_Method__c (Cash, Card, Insurance, Plan) mapped to custom picklist values. A lookup to Invoice__c ties each payment to the originating invoice so Dynamics 365 can reconstruct the full payment history from the patient record.
Dentally
Patient Medical Notes
Microsoft Dynamics 365 Sales
Contact.Dental_Notes__c (custom field)
1:1Clinical notes and medical history stored in Dentally transfer to a large-text (Memo) custom field on the Contact record. This field is created before migration and labelled Dental_Notes__c so practitioners can access relevant medical context directly from the Contact form without navigating away.
Dentally
Referral Source
Microsoft Dynamics 365 Sales
Contact.Referral_Source__c (custom field)
1:1If Dentally tracks how patients were referred (e.g., Google, existing patient, insurance provider), that value migrates as a custom picklist or text field on Contact. The custom field is created before migration with the same field type as the Dentally source.
Dentally
Dentally Object ID
Microsoft Dynamics 365 Sales
[All tables].Source_System_ID__c (custom field)
1:1Every migrated record receives a Source_System_ID__c text field storing its original Dentally object ID. This field enables delta-run de-duplication, cross-referencing between Dentally and Dynamics records post-migration, and audit traceability. The field name is consistent across all custom tables. It also supports downstream integration by allowing external systems to reference the original identifier for synchronization tasks.
| Dentally | Microsoft Dynamics 365 Sales | Compatibility | |
|---|---|---|---|
| Patient | Contact1:1 | Fully supported | |
| Patient.email | Contact.Email1:1 | Fully supported | |
| Practitioner | Custom Table: Practitioner__c1:1 | Fully supported | |
| Practitioner.location | Practitioner__c.Location__c / Account.ParentAccountId1:1 | Fully supported | |
| Account / Referring Practice | Account1:1 | Fully supported | |
| Treatment Plan | Custom Table: Treatment_Plan__c1:1 | Fully supported | |
| Treatment Item | Custom Table: Treatment_Item__c1:1 | Fully supported | |
| Appointment | Custom Table: Appointment__c1:1 | Fully supported | |
| Appointment Status | Appointment__c.Status__c (custom picklist)1:1 | Fully supported | |
| Invoice | Custom Table: Invoice__c1:1 | Fully supported | |
| Invoice | Custom Table: Invoice__c1:1 | Fully supported | |
| Invoice Line Item | Custom Table: Invoice_Line_Item__c1:1 | Fully supported | |
| Payment | Custom Table: Payment__c1:1 | Fully supported | |
| Patient Medical Notes | Contact.Dental_Notes__c (custom field)1:1 | Fully supported | |
| Referral Source | Contact.Referral_Source__c (custom field)1:1 | Fully supported | |
| Dentally Object ID | [All tables].Source_System_ID__c (custom field)1: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
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
Stand up Dataverse custom tables before migration
Before any data moves, we create the custom Dataverse tables required for the dental schema: Practitioner__c, Treatment_Plan__c, Treatment_Item__c, Appointment__c, Invoice__c, Invoice_Line_Item__c, and Payment__c. For each table we define column types (Date, DateTime, Currency, Picklist, Lookup), create the lookup relationships to Contact and Practitioner__c, and add custom fields for status values, clinical notes, and timestamp preservation fields. We also add Original_Create_Date__c and Source_System_ID__c to the Contact table. This schema setup plan is delivered before migration so your Dynamics 365 admin can review and pre-create any additional columns you need.
Export Dentally data via scoped API read
FlitStack AI authenticates against Dentally using scoped read access — no write permissions are requested. We export patients, practitioners, appointments, treatment plans, treatment items, invoices, and invoice line items in sequence, preserving original creation and modification timestamps on each record. For multi-site accounts, the site/location identifier is captured so the practitioner location linking in Dynamics 365 is accurate. The Dentally API is polled with throttling and retry logic to stay within rate limits on large datasets. Read-only access means your team continues working in Dentally throughout the export window.
Run sample migration with field-level diff
A representative slice migrates first — typically 200–500 records covering patients, practitioners, appointments, and invoices from one or two Dentally sites. We generate a field-level diff between the source JSON and the destination Dataverse records so you can verify practitioner lookup resolution, appointment status value mapping, invoice outstanding balance preservation, and custom field completeness. Any mapping gaps or missing custom field definitions are corrected before the full run commits. The sample diff is delivered as a structured report, not a raw export.
Cut over with sequenced full load and delta pickup
The full migration runs in the correct foreign-key order: Practitioners__c first, then Contacts, then Appointment__c and Invoice__c with their line-item children. Every record retains its Original_Create_Date__c, Original_Modify_Date__c, and Source_System_ID__c. During the cutover window, a delta-pickup (typically 24–48 hours) captures any Dentally records created or modified after the extraction snapshot. The delta delta-merge completes the Dynamics 365 dataset to match Dentally's final state at go-live. FlitStack AI sequences the load so lookup relationships resolve correctly and invoice line items attach to their parent Invoice__c records without orphaning.
Reconciliation report and audit log delivery
After the full migration and delta-merge, FlitStack AI generates a reconciliation report comparing record counts and field totals between Dentally and Dynamics 365 for each entity type. The audit log captures every insert and update operation with timestamps, source record ID, and destination record ID. One-click rollback is available if the reconciliation reveals critical gaps. The report and audit log are delivered as downloadable documents; no data is stored on FlitStack servers after delivery.
Platform deep dives
Dentally
Source
Strengths
Weaknesses
Microsoft Dynamics 365 Sales
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. All 8 core objects map 1:1 between Dentally and Microsoft Dynamics 365 Sales .
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Dentally and Microsoft Dynamics 365 Sales .
Object compatibility
All 8 core objects map 1:1 between Dentally 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
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 Microsoft Dynamics 365 Sales migration scoping. Not seeing yours? Book a call.
Walk through your Dentally 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 Dentally
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.