CRM migration
Field-level mapping, validation, and rollback between Dentrix and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
Dentrix
Source
Odoo CRM
Destination
Compatibility
12 of 12
objects map 1:1 between Dentrix and Odoo CRM.
Complexity
BStandard
Timeline
2–5 days
Overview
Dentrix stores patient records, provider data, appointments, treatment plans, and insurance information in a server-based proprietary format that requires direct database extraction before any migration can begin. Odoo CRM natively handles contacts, leads, opportunities, activities, and documents through its res.partner and crm.lead models. FlitStack AI runs SQL-equivalent queries against the Dentrix .dat file structure to extract patient demographics, guarantor relationships, appointment timestamps, CDT procedure codes, and insurance carrier records. We then map each Dentrix entity to the corresponding Odoo model: patients to res.partner, providers to res.users, and appointment history to crm.activity or mail.activity records. Clinical notes and treatment plan PDFs are uploaded to Odoo Documents. A 24–48 hour delta-pickup window captures any patient updates made during the cutover. Workflows, claim-payment rules, and insurance adjudication logic in Dentrix are not transferable and must be rebuilt in Odoo's automation tools after go-live.
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 Dentrix object lands in Odoo CRM, including any object-level transformations, lookup resolution, or schema-design dependencies.
Typical mapping — final map is confirmed during the sample migration step.
Dentrix
Patient
Odoo CRM
res.partner
1:1Every Dentrix patient maps to an Odoo res.partner record. The partner type is set to 'individual'. Original Dentrix patient create dates are preserved in a custom field since Odoo's create_date reflects the migration run timestamp.
Dentrix
Guarantor / Responsible Party
Odoo CRM
res.partner (parent_id)
1:1Dentrix guarantor is a separate patient record in the same table. We link the dependent patient record to the guarantor via res.partner parent_id so the relationship shows correctly in Odoo's contact tree view.
Dentrix
Insurance Carrier
Odoo CRM
res.partner (company, type=contact)
1:1Insurance carriers are extracted as company-type res.partner records. The primary-insurance and secondary-insurance assignments are stored as custom selection fields on each patient record pointing to the carrier partner.
Dentrix
Insurance Subscriber Record
Odoo CRM
Custom fields on res.partner
1:1Group number, subscriber ID, relationship to subscriber, and insurance effective dates have no native Odoo CRM equivalent. We create custom_char and custom_selection fields on res.partner and populate them during the patient import.
Dentrix
Provider / Dentist
Odoo CRM
res.users
1:1Dentrix providers (dentists, hygienists, assistants) map to Odoo res.users so each appears in the activity owner and calendar assignee fields. Provider specialty is stored in a custom field on the user record.
Dentrix
Appointment
Odoo CRM
mail.activity
1:1Each appointment becomes an Odoo mail.activity record tied to the patient res.partner. The activity type (call, meeting, reminder) reflects the appointment type code. Original appointment datetime and provider are preserved in activity fields.
Dentrix
Treatment Plan
Odoo CRM
crm.lead (custom model for plan)
1:1Treatment plans with multiple procedures per tooth are too structured for a simple activity. We create a custom crm.lead record per plan or import as a custom 'dental.treatment.plan' model depending on the practice's reporting needs.
Dentrix
Procedure Code (CDT)
Odoo CRM
Custom selection field on treatment plan
1:1CDT codes (D0120, D0272, etc.) are standard values in Dentrix. We create an Odoo custom selection field with the same code-to-description mapping so reporting by procedure type works without manual re-entry.
Dentrix
Clinical Notes / Perio Chart
Odoo CRM
ir.attachment + custom note field
1:1Clinical notes and periodontal chart data are exported as PDF or CSV and uploaded to Odoo Documents (ir.attachment) linked to the patient partner. The original structured data is preserved for reference; it cannot render as native Odoo fields.
Dentrix
Document / Lab Slip
Odoo CRM
ir.attachment
1:1Any linked file stored in Dentrix (lab slips, consent forms, imaging exports) is downloaded and re-uploaded to the corresponding res.partner's attachments in Odoo, preserving the original filename and create date.
Dentrix
Recall / Re-care Entry
Odoo CRM
mail.activity (reminder)
1:1Dentrix recall dates (hygiene re-care intervals) become Odoo scheduled mail.activity records with a due_date set to the recall month. The activity type is set to 'Reminder' so the pipeline view groups them separately.
Dentrix
Billing / Claim Record
Odoo CRM
Custom fields on res.partner
1:1Claim status and outstanding balance are financial constructs with no Odoo CRM equivalent. These are stored as custom fields on res.partner for reference. Actual A/R and billing require Odoo's Invoicing app post-migration.
| Dentrix | Odoo CRM | Compatibility | |
|---|---|---|---|
| Patient | res.partner1:1 | Fully supported | |
| Guarantor / Responsible Party | res.partner (parent_id)1:1 | Fully supported | |
| Insurance Carrier | res.partner (company, type=contact)1:1 | Fully supported | |
| Insurance Subscriber Record | Custom fields on res.partner1:1 | Fully supported | |
| Provider / Dentist | res.users1:1 | Fully supported | |
| Appointment | mail.activity1:1 | Fully supported | |
| Treatment Plan | crm.lead (custom model for plan)1:1 | Fully supported | |
| Procedure Code (CDT) | Custom selection field on treatment plan1:1 | Fully supported | |
| Clinical Notes / Perio Chart | ir.attachment + custom note field1:1 | Fully supported | |
| Document / Lab Slip | ir.attachment1:1 | Fully supported | |
| Recall / Re-care Entry | mail.activity (reminder)1:1 | Fully supported | |
| Billing / Claim Record | Custom fields on res.partner1: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.
Dentrix gotchas
No public API for Dentrix G data extraction
Imaging files stored separately from patient records
Balance-forward billing ledger requires explicit handling
In-flight insurance claims must clear before cutover
Custom fields vary per practice with no standard schema
Odoo CRM gotchas
Odoo.sh version gating blocks assisted migrations from trial
Enterprise modules fail to install on Community after database restore
Custom module view inheritance breaks between Odoo major versions
Custom fields risk losing their application context on Community
API access for Community is gated behind the Custom Plan
Pair-specific challenges
Migration approach
Audit Dentrix data architecture and .dat file structure
FlitStack AI identifies the Dentrix version, counts patient records, provider accounts, appointment histories, and insurance sub-records. We document the .dat file layouts for each entity type and confirm the extraction method — direct SQL against the server or export via the Dentrix Installation and Migration Tool. This audit produces a data inventory that defines the full scope before any field mapping begins.
Extract all entities in dependency order
We extract data in a strict sequence so foreign keys resolve correctly: insurance carriers first (as company-type res.partner records), then providers (as res.users), then patients (as res.partner), then appointments (as mail.activity records), then treatment plans (as crm.lead or custom model records). Each extraction writes to a staging CSV with the original Dentrix record ID preserved in Odoo's ref field for traceability.
Create custom fields and value maps in Odoo
Before import, we create all custom fields on res.partner, res.users, crm.lead, and mail.activity using Odoo's Settings > Technical interface or XML data import. CDT code selection lists, insurance relationship pick-list values, and gender options are loaded as value mappings so the data lands cleanly on the first pass. Provider types and appointment type codes are also pre-loaded as Odoo activity types.
Run a sample migration and generate a field-level diff
A representative slice of records — typically 100–300 patients spanning different account statuses, a mix of appointment types, and a few treatment plans — migrates first. We produce a field-level diff showing source Dentrix values against destination Odoo values for every mapped field. You review the diff to confirm CDT code mapping, guarantor parent_id resolution, and activity owner assignment before the full run commits.
Execute full migration with delta-pickup cutover
The full dataset migrates against your Odoo production instance. A 24–48 hour delta-pickup window captures any patients created or appointment times changed in Dentrix during the cutover. All operations are logged in the FlitStack audit trail. If reconciliation identifies missing or mismatched records, one-click rollback reverts the Odoo load so you can correct the field mapping and re-run without corrupting the target database.
Platform deep dives
Dentrix
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. All 8 core objects map 1:1 between Dentrix and Odoo CRM.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Dentrix and Odoo CRM.
Object compatibility
All 8 core objects map 1:1 between Dentrix and Odoo 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
Dentrix: Not publicly documented for Dentrix Ascend API Exchange.
Data volume sensitivity
Dentrix 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 Dentrix to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your Dentrix to Odoo 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 Dentrix
Other ways to arrive at Odoo 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.