CRM migration
Field-level mapping, validation, and rollback between Essential MD Software Suite and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
Essential MD Software Suite
Source
Odoo CRM
Destination
Compatibility
12 of 12
objects map 1:1 between Essential MD Software Suite and Odoo CRM.
Complexity
BStandard
Timeline
48–72 hours
Overview
Teams migrate from Essential MD Software Suite to Odoo CRM seeking Odoo's modular all-in-one architecture, lower per-user pricing at small-team scale, and native integration between CRM, sales orders, and accounting. The migration carries all records stored natively in Essential MD — contacts, companies, deals, activities, notes, and custom fields — into Odoo's PostgreSQL-backed data model using the XML-RPC API. Essential MD's standard contact and account objects map directly to Odoo's res.partner record, while deals map to crm.lead (used as Opportunities in Odoo's CRM terminology). The primary translation challenges are mapping Essential MD's pipeline stage definitions to Odoo's crm.stage Kanban stages, preserving custom medical-office properties as Odoo custom fields on the partner model, and resolving owner assignments by email match against Odoo system users. Workflows, automations, and email templates in Essential MD do not transfer — FlitStack exports those definitions as a rebuild reference for Odoo's automation framework. The migration runs in a scoped read-only window against Essential MD, then writes to Odoo via API with a 24–48 hour delta-pickup covering in-flight changes.
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 Essential MD Software Suite 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.
Essential MD Software Suite
Contact
Odoo CRM
res.partner
1:1Essential MD contacts migrate as Odoo res.partner records. Odoo merges person-type contacts and company-type records into a single model — the is_company boolean on partner distinguishes them. Partner addresses and phone/email fields map directly via XML-RPC write. Birthdate and specialty fields require custom fields on res.partner.
Essential MD Software Suite
Company
Odoo CRM
res.partner (is_company=True)
1:1Essential MD company records map directly to Odoo res.partner records with is_company=True flag. Parent-child company hierarchies in Essential MD translate to parent_id relationships on res.partner — the parent company must migrate before child companies to satisfy the PostgreSQL foreign-key constraint. Multi-address companies are decomposed into child partner records, each representing a distinct location or office.
Essential MD Software Suite
Contact-Company association
Odoo CRM
res.partner (contact) + parent_id
1:1Essential MD's N:1 contact-to-company link transforms into res.partner.parent_id pointing to the company partner record. The primary company association is determined by most-recent-modification date or an explicit primary-flag in Essential MD. Secondary company associations are preserved in a custom Many2many field or stored as a structured note field on the contact record for later reconciliation.
Essential MD Software Suite
Deal
Odoo CRM
crm.lead (as Opportunity)
1:1Essential MD deals migrate as Odoo crm.lead records. In Odoo's CRM module, leads and opportunities share the crm.lead model — the type field distinguishes 'lead' from 'opportunity'. The deal name becomes crm.lead.name; amount maps to planned_revenue; close date maps to date_deadline.
Essential MD Software Suite
Pipeline
Odoo CRM
crm.stage + crm.team
1:1Essential MD pipelines map to Odoo crm.stage records scoped by crm_team_id. Each Essential MD stage name becomes a crm.stage record with a sequence number and probability percentage matching the source. Teams in Essential MD map to crm.team records so stage ownership is preserved.
Essential MD Software Suite
Pipeline Stage
Odoo CRM
crm.stage
1:1Stage names are mapped one-to-one to Odoo crm.stage records per team. Probability values are translated from Essential MD percentages to Odoo's stage probability field. Stage-entered timestamps are stored as custom datetime fields on crm.lead since Odoo does not track stage-entry history natively.
Essential MD Software Suite
Activity (call, email, meeting, note)
Odoo CRM
mail.message + crm.activity
1:1Essential MD call, email, and meeting activities map to Odoo mail.message records linked to res.partner or crm.lead. The message_type field is set to 'comment' for calls/notes, 'email' for emails, and 'notification' for meetings. Original timestamps and owner IDs are preserved on the message record.
Essential MD Software Suite
Attachment / File
Odoo CRM
ir.attachment
1:1Essential MD file attachments re-upload to Odoo as ir.attachment records linked to the target res.partner or crm.lead via res_model and res_id reference fields. Odoo's filestore serves the files through the web interface. Large files exceeding Odoo's default attachment size limit are flagged and reported before migration begins so the team can decide whether to proceed or archive them separately.
Essential MD Software Suite
Custom Property (generic extension)
Odoo CRM
x_ custom field on res.partner / crm.lead
1:1Essential MD custom properties become Odoo custom fields on the target model (res.partner or crm.lead). FlitStack creates the ir.model.fields records with the correct type (char, selection, float, date) matching the Essential MD property data type before writing data. Type mismatches are flagged in the sample migration.
Essential MD Software Suite
Owner / User
Odoo CRM
res.users
1:1Essential MD owner IDs are resolved by email match against Odoo res.users. Unmatched owners are flagged before migration — the team either creates Odoo user records first or records are assigned to a fallback user. Owner history is preserved in a custom field on the target record.
Essential MD Software Suite
Workflow / Automation
Odoo CRM
Not migratable
1:1Essential MD workflows, sequences, and automation rules do not transfer to Odoo. These are expressed in Essential MD's proprietary rule engine and have no Odoo equivalent. FlitStack exports workflow definitions as a structured JSON document for Odoo Studio or custom Python automation to reference during the rebuild phase.
Essential MD Software Suite
Email Template
Odoo CRM
Not migratable
1:1Essential MD email and notification templates are not migrated due to incompatible merge field syntax and internal ID references that have no Odoo counterpart. FlitStack exports template bodies as HTML text files along with variable mapping documentation for manual recreation using Odoo's email templates editor and mail.merge.fields mechanism.
| Essential MD Software Suite | Odoo CRM | Compatibility | |
|---|---|---|---|
| Contact | res.partner1:1 | Fully supported | |
| Company | res.partner (is_company=True)1:1 | Fully supported | |
| Contact-Company association | res.partner (contact) + parent_id1:1 | Fully supported | |
| Deal | crm.lead (as Opportunity)1:1 | Fully supported | |
| Pipeline | crm.stage + crm.team1:1 | Fully supported | |
| Pipeline Stage | crm.stage1:1 | Fully supported | |
| Activity (call, email, meeting, note) | mail.message + crm.activity1:1 | Fully supported | |
| Attachment / File | ir.attachment1:1 | Fully supported | |
| Custom Property (generic extension) | x_ custom field on res.partner / crm.lead1:1 | Fully supported | |
| Owner / User | res.users1:1 | Fully supported | |
| Workflow / Automation | Not migratable1:1 | Fully supported | |
| Email Template | Not migratable1: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.
Essential MD Software Suite gotchas
Patient ID remapping risk at migration time
Encounter-to-billing linkage integrity
Custom field schema discovery requires manual enumeration
Document export format and size limits
Insurance payer name inconsistency between exports and destination
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
Profile Essential MD data and create Odoo schema
FlitStack reads your Essential MD data via its API using scoped read access — no write permissions are requested. We profile every object (contacts, companies, deals, activities, custom properties) and generate a field-by-field inventory. For each pipeline in Essential MD, we generate a crm.team + crm.stage creation script for Odoo. Custom properties are analyzed for type consistency, and Odoo's ir.model.fields are pre-created as x_ fields before any data is written. Your Odoo admin reviews and approves the schema plan before FlitStack touches Odoo.
Resolve owner and user mappings by email
Essential MD owner IDs are mapped to Odoo res.users by matching the email address on the owner record against res.users.login. FlitStack generates an owner-resolution report listing matched users, new users to create, and any Essential MD owner without an email address (flagged as high priority). This step runs before any record migration so no crm.lead lands without a valid user_id. Owner history is preserved as a custom field on each migrated record.
Migrate companies and contacts in dependency order
Odoo requires res.partner company records to exist before contacts can reference them via parent_id. FlitStack sequences the migration as: (1) companies → res.partner with is_company=True, (2) contacts → res.partner with parent_id pointing to the company partner, (3) contact-company secondary associations stored in a custom x_secondary_companies field. This ordering ensures foreign-key integrity during the write phase and avoids orphaned parent references in Odoo's PostgreSQL model.
Run sample migration with field-level diff
A representative slice — typically 100–500 records across contacts, companies, deals, and activities — migrates first into a dedicated Odoo test database. FlitStack generates a field-level diff report comparing source values against destination field values, flagging any mapping discrepancies before the full run commits. You review the diff and approve mapping corrections. This step is critical when Essential MD custom properties have mixed data types or when pipeline-stage names require manual stage ID assignment in Odoo.
Execute full migration with delta-pickup
The full migration runs against your Odoo production instance via XML-RPC API writes. A delta-pickup window (typically 24–48 hours from migration start) captures any records created or modified in Essential MD during the cutover window. FlitStack logs every API write operation to an audit trail. If reconciliation reveals record-count discrepancies or field-level mismatches, one-click rollback reverts all Odoo writes so the full run can be re-executed with corrected mapping logic.
Deliver migration report and rebuild reference package
FlitStack delivers a structured JSON migration report covering record counts by object, owner-resolution statistics, unmapped custom properties, and failed-write records. The rebuild reference package contains Essential MD workflow definitions as JSON, email template bodies as HTML text, and a stage-mapping configuration file for your Odoo admin to use when recreating automations in Odoo Studio. Post-migration support is available for 30 days to address any data-quality issues surfaced during reconciliation.
Platform deep dives
Essential MD Software Suite
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 Essential MD Software Suite 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
Essential MD Software Suite: Not publicly documented.
Data volume sensitivity
Essential MD Software Suite 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 Essential MD Software Suite to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your Essential MD Software Suite 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 Essential MD Software Suite
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.