CRM migration
Field-level mapping, validation, and rollback between crmConnect and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
crmConnect
Source
Odoo CRM
Destination
Compatibility
12 of 15
objects map 1:1 between crmConnect and Odoo CRM.
Complexity
BStandard
Timeline
2-4 weeks
Overview
Moving from crmConnect to Odoo CRM is a platform-type migration that changes both the data model and the operational model. crmConnect uses a flat-rate unlimited-user model with feature gating on Standard ($97/month) versus Professional ($127/month) tiers, while Odoo CRM uses per-user licensing at $24/month for the CRM app with optional ERP modules for accounting, inventory, and manufacturing. The most significant structural difference is that crmConnect Standard offers one pipeline with up to five opportunities while Odoo CRM's out-of-box configuration supports one pipeline per database with unlimited stages per pipeline. We resolve this constraint during scoping by mapping each crmConnect pipeline to a distinct Odoo CRM sales team or record type where the customer requires multiple pipelines. Because crmConnect has no documented API, we extract data through sequenced multi-file CSV exports from the UI, deduplicate across files, and validate record counts before Odoo import. Automations, workflows, email sequences, and landing page content do not migrate as code; we deliver a written inventory for Odoo Studio rebuild post-migration.
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 crmConnect 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.
crmConnect
Contact
Odoo CRM
Res.partner
1:1crmConnect Contacts map directly to Odoo res.partner records with partner_type set to 'contact'. The crmConnect contact's email becomes the partner's email field (used as dedupe key), phone maps to phone, first name and last name concatenate from crmConnect's name field. We resolve crmConnect owner assignments to Odoo user records by email match; any unmatched owners go to a reconciliation queue for the customer's admin to provision before contact import begins.
crmConnect
Pipeline
Odoo CRM
Crm.lead (with sales team or stage configuration)
lossycrmConnect's one-pipeline-per-account model on Standard (or unlimited pipelines on Professional) requires Odoo configuration. For customers with a single crmConnect pipeline, we map it to Odoo's default crm.lead pipeline with stages renamed to match crmConnect stage names. For customers with multiple crmConnect pipelines, we configure multiple Odoo sales teams (crm.team) and assign pipeline visibility per team, or document the requirement for Odoo multi-database deployment if complete pipeline isolation is required. Probability percentages migrate from crmConnect to Odoo stage probability settings.
crmConnect
Opportunity
Odoo CRM
Crm.lead
1:1crmConnect Opportunities map to Odoo crm.lead records. The opportunity's name becomes the lead's name field, amount maps to planned_revenue, stage maps to stage_id (resolved against the pipeline stage configuration), and contact_id references the migrated res.partner. Expected_close_date migrates to date_deadline. Owner assignments resolve via email-to-user lookup against the Odoo user table.
crmConnect
Company / Account
Odoo CRM
Res.partner (partner_type = 'company')
1:1crmConnect's Company records (if present as a separate object from Contacts) map to Odoo res.partner with partner_type = 'company'. Company name becomes the partner's name, website maps to website, and address fields map to street, city, state_id, country_id, and zip. We create the Company partner record before Contact records so that the child Contact records can reference parent_id on the Company partner.
crmConnect
Calendar / Event
Odoo CRM
Calendar.event
1:1crmConnect calendar events with sync to Google or Outlook migrate to Odoo calendar.event records. Event name, start datetime, end datetime, location, and attendee list migrate. Attendees resolve by email to migrated res.partner records. crmConnect's calendar-to-contact linkage migrates as calendar.attendee records pointing at the corresponding crm.lead or res.partner. Standard tier's single-calendar limit maps to one Odoo calendar; Professional's unlimited calendars map to multiple Odoo calendar.event records per user.
crmConnect
Engagement: Email
Odoo CRM
Mail.message
1:1crmConnect email engagement records (send history, not the email content itself) migrate to Odoo mail.message records linked to the parent crm.lead or res.partner via model and res_id. The email subject becomes the message subject, body becomes the body, and date_sent maps to date. Note that crmConnect email templates do not migrate as templates; we document the template structure for manual Odoo email template recreation in mail.template.
crmConnect
Engagement: Call
Odoo CRM
Crm.phone.call
1:1crmConnect call engagements migrate to Odoo crm.phone.call records (available when Odoo CRM phone integration is enabled). Call duration, disposition, and timestamp migrate to the corresponding fields. The call links to the related crm.lead or res.partner by res_id. If crmConnect stores call recordings as URLs, these migrate to a custom Char field for manual link access in Odoo.
crmConnect
Engagement: Meeting
Odoo CRM
Calendar.event
1:1crmConnect meeting engagements with attendees and locations map to Odoo calendar.event records. Meeting title, description, start, end, and location migrate. Attendee email addresses resolve to migrated res.partner records via calendar.attendee. Meeting notes or agenda text migrate as the event description.
crmConnect
Engagement: Note
Odoo CRM
Note
1:1crmConnect notes migrate to Odoo note.record (if using Odoo Notes app) or as mail.message records with no email (internal note). The note body migrates as text, author resolves to the Odoo user matching the crmConnect owner email, and date imports as the note creation timestamp. Notes linked to specific Contacts or Opportunities resolve via res_id and model references.
crmConnect
Engagement: Task
Odoo CRM
Project.task
1:1crmConnect tasks migrate to Odoo project.task records. Task title, description, due date, status (open/closed), priority, and assignee resolve by email to the Odoo user table. Tasks linked to specific Contacts or Opportunities in crmConnect reference the migrated crm.lead or res.partner via project.task's relation fields. Recurring tasks document recurrence pattern for manual Odoo recurring task configuration.
crmConnect
Membership / Course
Odoo CRM
Custom object (member, enrollment)
1:manycrmConnect membership portal records and course enrollment records do not have a direct Odoo equivalent. We migrate membership status, enrollment dates, student name, and course name as custom fields on a dedicated Odoo custom object (created via Odoo Studio before migration). The membership portal structure and course hierarchy are documented as JSON for the customer's admin to reassemble in Odoo eLearning or custom modules post-migration.
crmConnect
E-commerce Product
Odoo CRM
Product.product
1:1crmConnect Professional e-commerce products (up to 6 on Professional tier) map to Odoo product.product records. Product name, price, SKU (if present), and description migrate. Product associations to Contacts (as order history) map to Odoo sale.order and sale.order.line records if the customer enables the Odoo Sales app. If Odoo Inventory app is enabled, product variants and stock locations configure during migration.
crmConnect
Invoice / Payment
Odoo CRM
Account.move
1:1crmConnect Professional text-to-pay invoices migrate to Odoo account.move records (invoices) when the Odoo Accounting app is present. Invoice number, date, line items, amounts, and payment status migrate. Text-to-pay URL associations are documented as notes for Odoo payment provider reconfiguration (Odoo supports Stripe, PayPal, and SEPA direct debit as payment acquirers). Without Odoo Accounting, invoice data migrates as custom fields on a migrated Contact record for reference.
crmConnect
Tag / Segment
Odoo CRM
Crm.tag
1:1crmConnect contact tags and segment membership lists migrate to Odoo crm.tag records and crm.lead.tag.rel junction table entries. Tag names map directly. For segments that represent static contact lists, we create Odoo mailing.contact lists (if Odoo Mass Mailing is enabled) or document the list membership for manual Odoo list reconstruction.
crmConnect
Custom Properties
Odoo CRM
Custom fields (ir.model.fields)
lossycrmConnect custom contact properties and custom opportunity properties do not have a documented schema endpoint, so we discover them during the export phase by reviewing the CSV column headers. Each discovered custom property is created as a custom field on res.partner (for contact properties) or crm.lead (for opportunity properties) via Odoo Studio before import. Field types are inferred from data values: numeric strings become Float or Integer fields, dates become Date fields, and text values become Char or Text fields.
| crmConnect | Odoo CRM | Compatibility | |
|---|---|---|---|
| Contact | Res.partner1:1 | Fully supported | |
| Pipeline | Crm.lead (with sales team or stage configuration)lossy | Fully supported | |
| Opportunity | Crm.lead1:1 | Fully supported | |
| Company / Account | Res.partner (partner_type = 'company')1:1 | Fully supported | |
| Calendar / Event | Calendar.event1:1 | Fully supported | |
| Engagement: Email | Mail.message1:1 | Fully supported | |
| Engagement: Call | Crm.phone.call1:1 | Fully supported | |
| Engagement: Meeting | Calendar.event1:1 | Fully supported | |
| Engagement: Note | Note1:1 | Fully supported | |
| Engagement: Task | Project.task1:1 | Fully supported | |
| Membership / Course | Custom object (member, enrollment)1:many | Fully supported | |
| E-commerce Product | Product.product1:1 | Fully supported | |
| Invoice / Payment | Account.move1:1 | Fully supported | |
| Tag / Segment | Crm.tag1:1 | Fully supported | |
| Custom Properties | Custom fields (ir.model.fields)lossy | Mapping required |
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.
crmConnect gotchas
Standard tier caps contact storage and pipeline access
No publicly documented API for programmatic export
Setup fees ($500) add upfront switching cost
Automations are not directly transferable between CRMs
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
Discovery and export sequencing
We audit the crmConnect account across tier (Standard/Professional), contact volume, pipeline count, opportunity count, engagement history volume (emails, calls, meetings, tasks), custom properties, automations, membership and course records, and e-commerce products. Because crmConnect has no API, we map the exact CSV export sequence: which objects export first, which files contain relationship identifiers, and which fields serve as dedupe keys. We confirm the target Odoo edition (Community free, or Enterprise with paid apps), confirm which Odoo apps are active (CRM, Sales, Accounting, Inventory, eLearning), and scope the multi-pipeline requirement if the customer uses more than one crmConnect pipeline.
Odoo schema preparation
We create the destination Odoo schema before any data import. This includes provisioning custom fields on res.partner and crm.lead via Odoo Studio to receive crmConnect custom properties, configuring pipeline stages with probability percentages matching crmConnect stages, setting up sales teams (crm.team) if multiple pipelines are required, configuring Odoo users to match crmConnect owner email addresses, and enabling the relevant Odoo apps (CRM, Calendar, Project for tasks, Sales for orders, Accounting for invoices). Schema changes deploy into the target Odoo database before the first migration run.
Multi-file CSV export and deduplication
We guide the customer through crmConnect's UI-based CSV export for each object in dependency order: Contacts first, then Companies, then Opportunities, then Activities. We deduplicate across multiple export files using email as the primary dedupe key and flag duplicate records in a reconciliation report. We reconstruct parent-child relationships (Contact-to-Company, Opportunity-to-Contact) by joining on shared identifiers across export files. Record counts are validated against crmConnect's UI totals before the cleaned dataset is staged for Odoo import.
Staging migration and reconciliation
We run a full migration into the customer's Odoo environment using a staging dataset (or sandbox if available). We validate record counts for every object, spot-check 25-50 records against the crmConnect source, and confirm that pipeline stages, probability percentages, and owner assignments render correctly in Odoo. Any field mapping corrections, missing custom fields, or relationship resolution failures are fixed in this phase. The customer reviews the staging environment and signs off before production migration begins.
Production migration in dependency order
We run production migration in record-dependency order: res.partner (Companies), res.partner (Contacts with parent_id resolved to Company), crm.lead (Opportunities with partner_id and user_id resolved), calendar.event (Events and Meetings), crm.phone.call (Calls), project.task (Tasks), mail.message (Emails and Notes), crm.tag (Tags), custom membership/enrollment records, product.product (Products), and account.move (Invoices). Each phase emits a row-count reconciliation report. We freeze crmConnect writes during the final cutover window and run a delta migration of any records modified during the window before declaring the migration complete.
Cutover, validation, and automation handoff
We validate critical Odoo records post-cutover: pipeline stage distribution, opportunity amounts, contact-to-account linkage, and activity timeline completeness. We deliver the automation inventory document (with Odoo Studio equivalents for each crmConnect automation), the custom field mapping reference, and the Odoo email sync configuration guide. We support a one-week hypercare window for reconciliation issues. We do not rebuild crmConnect automations in Odoo Studio as part of the migration scope; that is a separate engagement or an internal admin task.
Platform deep dives
crmConnect
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. All 8 core objects map 1:1 between crmConnect and Odoo CRM.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across crmConnect and Odoo CRM.
Object compatibility
All 8 core objects map 1:1 between crmConnect 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
crmConnect: Not publicly documented.
Data volume sensitivity
crmConnect 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 crmConnect to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your crmConnect 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 crmConnect
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.