CRM migration
Field-level mapping, validation, and rollback between DentAdmin and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
DentAdmin
Source
Odoo CRM
Destination
Compatibility
9 of 10
objects map 1:1 between DentAdmin and Odoo CRM.
Complexity
BStandard
Timeline
5–15 business days
Overview
DentAdmin stores dental-patient relationships, treatment plans, RIZIV/invoice codes, and appointment histories in a flat-practice data model built for Belgian dental compliance. Odoo CRM uses a modular object graph — res.partner for contacts, crm.lead for leads and opportunities, calendar.event for appointments, and product.product for treatments — linked by Odoo's relational model and accessed via XML-RPC API. We map DentAdmin patients directly to Odoo res.partner records, DentAdmin appointment slots to crm.lead entries with scheduled activities, and DentAdmin treatment codes to product.product records. RIZIV/invoice reference codes and insurance-plan data have no native Odoo equivalent — we create custom fields (x_riziv_code, x_insurance_plan, x_treatment_history) on res.partner and preserve the original values. Email templates, SMS workflows, and appointment-reminder sequences built in DentAdmin's communication module do not migrate — we export their definitions as a rebuild reference for Odoo's mail templates and automation rules. DentAdmin's API access is scoped; FlitStack uses DentAdmin's built-in CSV export as the primary extraction mechanism with supplemental XML-RPC calls where available, sequencing partner records first so foreign-key dependencies resolve correctly in Odoo.
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 DentAdmin 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.
DentAdmin
Patient
Odoo CRM
res.partner
1:1DentAdmin patient records map 1:1 to Odoo res.partner. Name, address, phone, email, date of birth, and create date all transfer directly. RIZIV/invoice codes, insurance plan names, and medical-alert flags become custom fields on the partner record. DentAdmin's patient number maps to a custom external_id field for traceability.
DentAdmin
Appointment / Agenda
Odoo CRM
crm.lead + calendar.event
1:1DentAdmin appointments become Odoo crm.lead records representing the visit or procedure, with calendar.event entries for the time slot. Appointment status (confirmed, completed, no-show) maps to crm.lead stage values. Past appointments with treatment notes become crm.lead activity history rather than active pipeline entries.
DentAdmin
Treatment / Procedure
Odoo CRM
product.product
1:1DentAdmin treatment codes and descriptions map to Odoo product.product records. RIZIV tariff codes attach as a custom Char field on the product so pricing rules in Odoo Accounting can reference them. Product type is set to service for procedures. Each treatment record links to the patient partner as an order line if invoiced via Odoo.
DentAdmin
Provider / Dentist
Odoo CRM
res.users
1:1DentAdmin dentist and hygienist profiles map to Odoo res.users. Email matching resolves ownership of patient records and appointments. Multi-provider practices require FlitStack to coordinate DentAdmin practitioner IDs to Odoo user IDs before records land so the correct user owns each appointment.
DentAdmin
Insurance / Coverage Plan
Odoo CRM
Custom field on res.partner
1:1DentAdmin insurance coverage data (insurer name, policy number, coverage percentage) has no native Odoo CRM equivalent. We create a dedicated insurance object or store the data as structured custom fields on res.partner — insurer name, policy reference, coverage tier — so front-desk staff can see coverage details without leaving the partner form.
DentAdmin
Document / Attachment
Odoo CRM
ir.attachment
1:1DentAdmin exported documents (treatment plans, informed-consent forms, clinical images) upload to Odoo's ir.attachment model linked to the corresponding res.partner record. File size limits in Odoo (default 25MB per file) apply; larger imaging files require chunked upload or external storage integration.
DentAdmin
SMS / Email Communication Log
Odoo CRM
mail.message
1:1DentAdmin SMS and email history transfers as Odoo mail.message records attached to res.partner. Original timestamps and sender/recipient information are preserved. DentAdmin's automated appointment-reminder sequences do not migrate — we export the sequence definitions as a text reference for rebuilding in Odoo's mail template system.
DentAdmin
Multi-Site Account
Odoo CRM
crm.team + res.company
1:manyDentAdmin multi-site accounts (one license covering N practice locations) split into separate Odoo crm.team records scoped by location. If Odoo Enterprise multi-company is in use, each site maps to a distinct res.company so accounting and inventory are isolated per location. Access rights are rebuilt from scratch in Odoo's security model.
DentAdmin
Invoice / RZIV Billing Record
Odoo CRM
account.move (via Odoo Accounting)
1:1DentAdmin's automatic RZIV-code invoicing and Belgian dental tariff calculations are a purpose-built billing feature with no Odoo CRM equivalent. Patient invoice history migrates as a custom reference field on res.partner linking to the Odoo Accounting module where the actual invoices are reconstructed. Odoo Accounting must be active to complete this object.
DentAdmin
Practice Settings / Office Config
Odoo CRM
res.config.settings
1:1DentAdmin practice-level settings (operating hours, SMS sender ID, default appointment duration, RIZIV tariff table) have no direct Odoo equivalent. We document the current DentAdmin configuration as a rebuild checklist so your Odoo administrator can configure res.config.settings and accounting tax grids accordingly.
| DentAdmin | Odoo CRM | Compatibility | |
|---|---|---|---|
| Patient | res.partner1:1 | Fully supported | |
| Appointment / Agenda | crm.lead + calendar.event1:1 | Fully supported | |
| Treatment / Procedure | product.product1:1 | Fully supported | |
| Provider / Dentist | res.users1:1 | Fully supported | |
| Insurance / Coverage Plan | Custom field on res.partner1:1 | Fully supported | |
| Document / Attachment | ir.attachment1:1 | Fully supported | |
| SMS / Email Communication Log | mail.message1:1 | Fully supported | |
| Multi-Site Account | crm.team + res.company1:many | Fully supported | |
| Invoice / RZIV Billing Record | account.move (via Odoo Accounting)1:1 | Fully supported | |
| Practice Settings / Office Config | res.config.settings1: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.
DentAdmin gotchas
No publicly documented REST API for DentAdmin
Pricing is opaque and requires direct contact
RIZIV code version drift between systems
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 DentAdmin data export and quality
FlitStack runs a scoping engagement against your DentAdmin instance: we enumerate all patient records, appointment histories, treatment codes, provider profiles, and insurance plan definitions. We produce a data-quality report identifying duplicates, missing required fields (name, date of birth), and records with incomplete RIZIV codes. We also verify whether your DentAdmin version supports batched CSV export or if manual per-record export is required. This step sets the record-count baseline that drives pricing and timeline.
Create Odoo custom fields and CRM structure
Before any records migrate, FlitStack provisions the custom fields on res.partner — x_riziv_code, x_insurance_plan, x_medical_alert, x_treatment_history, x_date_of_birth, x_patient_number, x_original_create_date — and on product.product for x_riziv_tariff. We also create the crm.stages needed to represent appointment statuses (Scheduled, Confirmed, Completed, No-Show, Cancelled). If you are running Odoo multi-site, we deliver the crm.team and record-rule design document at this stage so your admin can apply security scoping before data lands.
Migrate providers, then patients, then appointments
We sequence the migration so foreign-key dependencies resolve correctly: res.users (providers) migrate first so practitioner IDs are available for owner resolution. res.partner (patients) migrate second, with x_patient_number serving as the external ID. Treatment codes (product.product) migrate third so procedure links on appointments can reference them. Appointments (crm.lead + calendar.event) migrate last. Each batch is validated against source row counts before the next batch begins, and we run a field-level diff on the first 100 partner records to confirm custom-field values are populated correctly.
Run sample migration and field-level diff
A representative slice — typically 200–500 patient records spanning multiple providers and appointment types — migrates first. We generate a field-level comparison report showing source values against destination field contents for every mapped column. You review the diff to confirm RIZIV codes landed in x_riziv_code, medical alerts are readable, and appointment status mapping matches your expectations. Any mapping adjustments are made before the full run commits.
Full migration with delta-pickup and rollback
The full dataset migrates against your Odoo instance via XML-RPC. A delta-pickup window of 24–48 hours runs concurrently with cutover, capturing any patient records or appointments added in DentAdmin during the migration window. An audit log records every insert, update, and skip operation. One-click rollback reverts all FlitStack operations if reconciliation against the DentAdmin source count reveals discrepancies. After rollback confirmation, you go live in Odoo CRM.
Platform deep dives
DentAdmin
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 1 of 8 objects need a mapping; the rest are 1:1.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across DentAdmin and Odoo CRM.
Object compatibility
1 of 8 objects need a mapping; the rest are 1:1.
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
DentAdmin: Not publicly documented.
Data volume sensitivity
DentAdmin 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 DentAdmin to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your DentAdmin 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 DentAdmin
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.