CRM migration
Field-level mapping, validation, and rollback between Denticon and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
Denticon
Source
Odoo CRM
Destination
Compatibility
11 of 11
objects map 1:1 between Denticon and Odoo CRM.
Complexity
BStandard
Timeline
48–72 hours
Overview
Denticon organizes dental practice data around patients, providers, appointments, and referrals within a single-tenant PGID structure. Odoo CRM uses crm.lead for leads and opportunities and res.partner for contacts and companies, with a separate hr.employee model for staff. The migration carries Denticon patient records (name, contact, address, date of birth) into Odoo res.partner, maps appointment histories to CRM activities, translates referral sources into Odoo's utm.source and utm.medium fields, and resolves provider email addresses to Odoo user accounts. Dental-specialty data — insurance policy numbers, treatment plans, clinical notes, imaging attachments — requires custom field creation in Odoo or is flagged for manual review. We pull from Denticon's REST API (Patients API v0, Appointments API v0, Practices API v0) and write via Odoo's XML-RPC external API. Automations, insurance eligibility rules, and recall workflows are not migratable — we export Denticon workflow definitions as a rebuild reference for your Odoo admin.
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 Denticon 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.
Denticon
Patient
Odoo CRM
res.partner
1:1Denticon patient records map 1:1 to Odoo res.partner contacts. Name, email, phone, address, and date of birth transfer directly. Partner type (patient vs. company) is set via res.partner.customer_rank. Dentists and referring providers also land as res.partner but are flagged separately.
Denticon
Patient
Odoo CRM
res.partner + custom fields
1:1Dental-specific patient data — insurance carrier, policy number, group number, subscriber ID, treatment plan codes — has no Odoo CRM equivalent. These transfer to custom Char/Selection fields on res.partner (Insurance_Carrier__c, Policy_Number__c) for reference and must be validated against Odoo's Contacts Insurance module if used.
Denticon
Appointment
Odoo CRM
crm.lead + mail.message
1:1Denticon appointment records do not map to a native Odoo CRM object. We translate each appointment into a crm.lead activity log entry (mail.message with date, provider, production type) and attach it to the corresponding res.partner lead. Appointment status (scheduled, completed, cancelled) maps to Odoo's activity state.
Denticon
Provider
Odoo CRM
res.users
1:1Denticon provider records (dentists, hygienists, office staff) resolve by email match to Odoo res.users accounts. Providers without email addresses are flagged for Odoo user account creation before migration. Odoo hr.employee records are also created for provider records that lack user access.
Denticon
Provider
Odoo CRM
res.partner
1:1Denticon provider contact details (name, email, phone, specialty) also land in res.partner as type='contact' records. The provider_id reference on patient records maps to the corresponding res.partner.id in Odoo, maintaining the relationship between patients and their care providers.
Denticon
Practice / Office (OID)
Odoo CRM
res.company
1:1Each Denticon office (OID) within a PGID maps to a separate res.company in Odoo. This requires multi-company configuration in Odoo settings. Companies are created first so res.partner and crm.lead records can reference the correct company_id foreign key during import.
Denticon
Referral (Incoming)
Odoo CRM
utm.source + custom field on crm.lead
1:1Denticon referral sources (external incoming referrals with cost data) map to Odoo utm.source records. The referral cost field transfers to a custom Decimal field on crm.lead (Referral_Cost__c). Referring provider names link to the corresponding res.partner record if one exists.
Denticon
Account / AR
Odoo CRM
account.move
1:1Denticon accounts receivable, billing records, and payment history are accounting data outside Odoo CRM's scope. These migrate to Odoo Accounting (account.move) only if the Odoo Accounting module is active. FlitStack flags this as a separate migration scope requiring Odoo Finance configuration.
Denticon
External Referral Link
Odoo CRM
crm.lead + ir.attachment
1:1Denticon external referral form data and attachments map to crm.lead notes and ir.attachment records. The referral form URL and form-submission metadata transfer as custom fields on the lead. Any attachments included in the referral are downloaded and re-uploaded to Odoo's ir_attachment table.
Denticon
Custom Fields (User Setup)
Odoo CRM
ir.model.fields
1:1Denticon's two alphanumeric custom fields on User Setup screens (Setup → Office, Provider, Referral, Account) migrate as custom Char fields on the corresponding Odoo models. These require Odoo Studio (Enterprise) or direct model XML modification (Community) to create before data import.
Denticon
PGID / Organization
Odoo CRM
res.company + parent_id
1:1The Denticon PGID organization name maps to a top-level res.company in Odoo. If the Denticon setup uses the PGID Split feature to separate offices, each split office becomes a child res.company via parent_id. The top-level company holds global settings; child companies hold location-specific configurations.
| Denticon | Odoo CRM | Compatibility | |
|---|---|---|---|
| Patient | res.partner1:1 | Fully supported | |
| Patient | res.partner + custom fields1:1 | Fully supported | |
| Appointment | crm.lead + mail.message1:1 | Fully supported | |
| Provider | res.users1:1 | Fully supported | |
| Provider | res.partner1:1 | Fully supported | |
| Practice / Office (OID) | res.company1:1 | Fully supported | |
| Referral (Incoming) | utm.source + custom field on crm.lead1:1 | Fully supported | |
| Account / AR | account.move1:1 | Fully supported | |
| External Referral Link | crm.lead + ir.attachment1:1 | Fully supported | |
| Custom Fields (User Setup) | ir.model.fields1:1 | Fully supported | |
| PGID / Organization | res.company + parent_id1: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.
Denticon gotchas
PGID Split requires signed agreements and coordination between buyer and seller
Chrome cache and bad shortcuts corrupt patient context between sessions
Custom fields are severely limited to two fields of 25 characters
API writeback scope is limited to specific endpoints
Automated campaign quiet hours restrict message delivery timing
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
Inventory Denticon data via API and map to Odoo schema
We connect to Denticon using your API credentials (Patients API v0, Appointments API v0, Practices API v0) and pull a full export of patient records, appointment histories, provider profiles, and referral sources. We cross-reference the Denticon office list (OIDs) against your intended Odoo multi-company structure and identify any provider records without email addresses. The output is a data map document showing every Denticon object, its Odoo destination model, and any custom fields that need pre-creation in Odoo Studio or via XML.
Configure Odoo companies, users, and custom fields
Before data moves, your Odoo admin (or our team) creates res.company records for each Denticon office, sets the multi-company parent hierarchy, and creates the custom fields identified in the data map (insurance fields, referral cost, production type, NPI, original create date). Providers without existing Odoo user accounts are flagged for account creation so appointment activities have an owner. This step is completed before any import runs to ensure foreign keys resolve on first pass.
Run sample migration on 200–500 patient records
A representative slice of patient records — spanning multiple offices, patients with and without insurance data, and records linked to referred appointments — migrates first. We generate a field-level diff showing every mapped field value in Denticon and the corresponding Odoo res.partner field value. You verify patient name formatting, address parsing, insurance field population, and referral source linkage before the full run commits. Adjustments to transformation rules are made at this stage.
Execute full migration with delta-pickup window
All patient records, providers, appointments, and referrals import into Odoo via XML-RPC in dependency order: res.company first, then res.partner (providers), then res.partner (patients), then crm.lead (referrals), then mail.message activity logs. A 24–48 hour delta-pickup window captures any patient or appointment records modified in Denticon during the cutover. FlitStack generates an audit log of every import operation, and one-click rollback reverts all changes if reconciliation against the Denticon source data fails.
Deliver reconciliation report and rebuild reference export
Post-migration, we generate a row-by-row reconciliation report comparing total patient count, appointment count, and referral count between Denticon and Odoo. Any records that failed import or landed with null required fields are listed with error reasons. We also export your Denticon automation rule definitions (recalls, reminders, eligibility checks) as a documented reference file so your Odoo admin can rebuild equivalent automation rules using Odoo Studio or server actions.
Platform deep dives
Denticon
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 Denticon 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
Denticon: Not publicly documented in either the legacy reference (api.denticon.com) or the new developer portal pages indexable without authentication. Confirm at partner onboarding..
Data volume sensitivity
Denticon 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 Denticon to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your Denticon 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 Denticon
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.