CRM migration
Field-level mapping, validation, and rollback between Cordis CRM and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
Cordis CRM
Source
Odoo CRM
Destination
Compatibility
8 of 12
objects map 1:1 between Cordis CRM and Odoo CRM.
Complexity
BStandard
Timeline
3-5 weeks
Overview
Moving from Cordis CRM to Odoo CRM is a migration from a standalone SMB CRM with limited API visibility to a modular open-source ERP platform where CRM is one of many integrated applications. Cordis CRM does not publish a documented REST or bulk-export API; customers must request a scoped data export from Cordis support or perform a manual CSV extraction. We normalize that export, resolve contact-company relationships, map Cordis pipeline stages to Odoo stages, and load via Odoo's XML-RPC or web service interface. We do not migrate Cordis automations, document version histories, or Google Workspace email threads as these either lack export paths or require separate extraction vectors. Odoo CRM's strength is its ERP ecosystem depth; teams moving to Odoo typically intend to activate accounting, inventory, or project modules alongside CRM, which means the migration scope often extends beyond standalone CRM data into partner and product records.
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 Cordis CRM 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.
Cordis CRM
Contact
Odoo CRM
res.partner
1:1Cordis CRM Contacts map to Odoo res.partner records with partner_type set to 'contact'. The Cordis contact profile fields (name, email, phone, address) map to Odoo's standard partner fields. Interaction history and custom contact properties transfer to Odoo partner fields or custom res.partner fields created during schema setup. We resolve the company linkage using Cordis's company relationship graph and assign partner_id (the company contact record) in Odoo.
Cordis CRM
Company
Odoo CRM
res.partner (company type)
1:1Cordis CRM Company records map to Odoo res.partner with is_company=True. The company name maps to name, website from Cordis's domain field, and any industry or revenue data to custom fields. Company is created before contact import so that the partner_id lookup is satisfied at the moment of contact insert.
Cordis CRM
Pipeline
Odoo CRM
crm.lead (stage + team)
lossyCordis CRM pipeline stages map to Odoo crm.lead stage_id values within the appropriate sales team (crm.team). Each Cordis pipeline becomes a separate Odoo sales team or a stage category, with stage order and probability percentages preserved. We create the Odoo stage configuration before migration and assign stage_ids during lead import.
Cordis CRM
Pipeline Stage
Odoo CRM
crm.stage
lossyCordis stage names and probabilities migrate to Odoo crm.stage records within the relevant crm.team. Stage probability percentages map to Odoo's probability field on crm.lead. Stage order is preserved using Odoo's sequence field on stage.
Cordis CRM
Deal
Odoo CRM
crm.lead (opp type)
1:1Cordis CRM Deals map to Odoo crm.lead records with type='opportunity'. The Cordis deal amount, close date, and stage map to Odoo's expected_revenue, date_closed, and stage_id. The associated contact and company resolve to Odoo res.partner records via the ID mapping table created during earlier import phases.
Cordis CRM
Task (automated and manual)
Odoo CRM
project.task or calendar.event
1:1Cordis CRM Tasks map to Odoo project.task records (for project-tied tasks) or calendar.event records (for scheduled activities). Task status, due date, and assigned owner migrate. Recurrence rules from Cordis do not transfer automatically; we document recurrence patterns in the handoff inventory for manual reconfiguration in Odoo's activity plan scheduling.
Cordis CRM
Document
Odoo CRM
ir.attachment
1:1Cordis CRM documents linked to contact or company records migrate as Odoo ir.attachment records attached to the corresponding res.partner. We export the latest version of each document, preserve the filename, and re-associate via the record ID mapping table. Document version history (lineage) is not guaranteed to migrate; we flag multi-version documents in the scope document for customer review.
Cordis CRM
Campaign
Odoo CRM
crm.tag or utm.mixin
lossyCordis CRM Campaign records and membership data map to Odoo utm.mixin tracking fields on crm.lead (source_id, campaign_id, medium_id) plus crm.tag records for campaign categorization. Campaign engagement metrics are noted in the handoff inventory for Odoo reporting configuration.
Cordis CRM
Custom Fields
Odoo CRM
ir.model.field (custom)
lossyCordis CRM custom contact and company fields are surveyed during scoping and created as custom ir.model.field records on res.partner in Odoo before import. Field data types are mapped: text to char, numeric to float or integer, date to date, dropdown to selection. Custom field values on records migrate with field-to-field mapping per the scoping survey output.
Cordis CRM
Attachment
Odoo CRM
ir.attachment
1:1File attachments linked to Cordis CRM records export individually with filename preservation. We re-associate them to Odoo records (res.partner, crm.lead) using the ID mapping table generated during import. Attachments without a resolvable parent record are placed in an attachments queue for customer admin resolution.
Cordis CRM
Owner
Odoo CRM
res.users
1:1Cordis CRM Owners resolve by email match against Odoo res.users in the destination database. Owners without a matching Odoo user go to a reconciliation queue for the customer's admin to provision or map before record import resumes. Owner mapping must complete before opportunity and task import to satisfy assignment fields.
Cordis CRM
Activity History (emails, calls, meetings)
Odoo CRM
mail.message + calendar.event
1:1Cordis CRM interaction history (emails, call logs, meeting records) migrates to Odoo mail.message records linked to the parent res.partner or crm.lead via the ID mapping table. Email content attaches as mail.message body text; call duration and disposition become custom fields. Note that Cordis Google Workspace email history is not auto-exported; we extract from Gmail directly where the customer authorizes access rather than relying on the CRM export.
| Cordis CRM | Odoo CRM | Compatibility | |
|---|---|---|---|
| Contact | res.partner1:1 | Fully supported | |
| Company | res.partner (company type)1:1 | Fully supported | |
| Pipeline | crm.lead (stage + team)lossy | Fully supported | |
| Pipeline Stage | crm.stagelossy | Fully supported | |
| Deal | crm.lead (opp type)1:1 | Fully supported | |
| Task (automated and manual) | project.task or calendar.event1:1 | Fully supported | |
| Document | ir.attachment1:1 | Fully supported | |
| Campaign | crm.tag or utm.mixinlossy | Fully supported | |
| Custom Fields | ir.model.field (custom)lossy | Mapping required | |
| Attachment | ir.attachment1:1 | Fully supported | |
| Owner | res.users1:1 | Fully supported | |
| Activity History (emails, calls, meetings) | mail.message + calendar.event1: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.
Cordis CRM gotchas
No documented public API for self-service bulk export
Google Workspace integration does not auto-export email history
Document version history may not export cleanly
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
Export coordination and scoping
We audit the Cordis CRM instance across contacts, companies, pipelines, stages, tasks, documents, campaigns, and custom fields. Because Cordis lacks a self-service API, we coordinate with the customer to submit a vendor-assisted export request to Cordis support or prepare a manual CSV extraction. We validate the export completeness against the scoping survey and normalize the format (UTF-8 encoding, consistent date formats, dedupe of duplicates) before loading into our migration pipeline. Any gaps trigger a re-export request before migration begins.
Odoo schema design and configuration
We design the destination Odoo schema including custom fields on res.partner and crm.lead (ir.model.field creation), Odoo sales team configuration (crm.team), stage definitions (crm.stage with probability and sequence), and custom field visibility settings. If the customer plans to activate Odoo accounting or inventory alongside CRM, we extend the schema to include product records (product.template), currency configuration, and warehouse settings at this stage. Schema is deployed to a staging database for validation before production migration.
Staging migration and reconciliation
We run a full migration into a staging Odoo database using the exported Cordis data at representative volume. The customer reconciles record counts (partners, leads, opportunities, tasks, attachments), spot-checks 20-30 records for field-level accuracy against the Cordis source, and validates that pipeline stage order and probability assignments match. Mapping corrections happen in this phase. Owner resolution (email matching to res.users) also completes here with a reconciliation queue for any unmapped owners.
Document and email history extraction
We extract documents from Cordis CRM records and prepare them for ir.attachment loading. For email history, we coordinate Gmail extraction where the customer authorizes access, separate from the Cordis export, and prepare mail.message records for loading. Document version lineage is noted; only the latest version migrates unless the customer specifically requests earlier versions be included in the scope. The document inventory is matched against the ID mapping table to establish parent record links.
Production migration in dependency order
We run production migration in record-dependency order: res.partner companies first (is_company=True), then res.partner contacts with parent_id resolved, crm.team and crm.stage configuration, crm.lead opportunities with partner_id and stage_id resolved, project.task and calendar.event activity records, ir.attachment document records, and mail.message engagement history. Each phase emits a row-count reconciliation report before the next phase begins. We use Odoo's XML-RPC or web service API with batch chunking and rate-limit handling.
Cutover, validation, and handoff
We freeze Cordis CRM writes during the cutover window, run a final delta migration of records modified since the initial export, then mark Odoo as the system of record. We deliver the handoff inventory covering active task status, pipeline stage mapping, document version flags, email extraction status, and automation rebuild recommendations. We do not rebuild Cordis automations as Odoo server actions; that work is documented separately for the customer's admin. We support a five-day hypercare window for reconciliation issues.
Platform deep dives
Cordis CRM
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 3 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 Cordis CRM and Odoo CRM.
Object compatibility
3 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
Cordis CRM: Not applicable — no public API..
Data volume sensitivity
Cordis CRM 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 Cordis CRM to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your Cordis CRM 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 Cordis CRM
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.