CRM migration
Field-level mapping, validation, and rollback between Click and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
Click
Source
Odoo CRM
Destination
Compatibility
9 of 12
objects map 1:1 between Click and Odoo CRM.
Complexity
BStandard
Timeline
3-5 weeks
Overview
Migrating from ClickDimensions to Odoo CRM requires a two-system extraction strategy because ClickDimensions does not store contacts independently — it annotates records in Microsoft Dynamics 365. We first pull the base CRM objects (Contacts, Accounts, Leads, Opportunities) from the source Dynamics instance, then overlay the ClickDimensions marketing layer (Email Sends, Event Registrations, Survey Responses, Web Tracking Events, and Custom Fields) onto those records. At Odoo, we split Dynamics-style combined Contact-Account records into Odoo's separate res.partner records for companies and individuals, preserve ClickDimensions custom field data as Odoo custom fields or ir.config_parameter values, and attach marketing activity records as mail.message entries on the relevant Partner. We do not migrate ClickDimensions Workflows, Sequences, or email templates as code; we deliver a written inventory for the customer's Odoo admin to rebuild using Odoo's Studio or workflow builder.
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 Click 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.
Click
Contact (Dynamics CRM)
Odoo CRM
res.partner (individual)
1:1Dynamics CRM Contacts migrate to Odoo res.partner records with partner_type = contact. We use email address as the dedupe key and preserve full name, phone, mobile, address fields, and any Contact-specific custom fields. The original Dynamics Contact ID is stored as a legacy_id field for audit trail. Company linkage is resolved by matching the parentcustomerid field to the Account migration.
Click
Account (Dynamics CRM)
Odoo CRM
res.partner (company)
1:1Dynamics CRM Accounts migrate to Odoo res.partner records with partner_type = company. We map accountname to name, website, industrycode, numberofemployees, and annualrevenue. Company identification number and custom fields migrate as Odoo custom fields or ir.config_parameter values. This is created before Contact import so that the commercial_partner_id lookup is satisfied at Contact insert time.
Click
Lead (Dynamics CRM)
Odoo CRM
crm.lead
1:1Dynamics CRM Leads migrate to Odoo crm.lead. The leadsubject, leadsourcecode, description, estimatedvalue, and pipeline stage fields map to crm.lead fields. We preserve the original leadscore from ClickDimensions custom fields as a custom crm.lead field. Lead status (open, qualified, disqualified) maps to Odoo lead stage values. The lead-to-opportunity split is configurable: leads can remain as Odoo leads pending qualification or be converted during migration based on customer preference.
Click
Opportunity (Dynamics CRM)
Odoo CRM
crm.lead (stage = Opportunity)
1:1Dynamics CRM Opportunities migrate to Odoo crm.lead records with type = opportunity. The estimatedvalue maps to Odoo expected_revenue, closeprobability maps to probability, and closedate maps to date_deadline. Opportunity fields that have no direct Odoo equivalent become custom fields on crm.lead. Product line items from Dynamics migrate as crm.lead.line records or a separate sale order depending on whether the Odoo Sale app is active.
Click
Email Send (ClickDimensions)
Odoo CRM
mail.message
1:1ClickDimensions Email Sends migrate to Odoo mail.message records linked to the relevant res.partner. We map send date, campaign name, email subject, and send status (sent, bounced, failed) to mail.message fields and custom fields on the record. Individual open and click events are stored as Odoo mail.tracking.value records or custom activity log fields. Email content bodies migrate as mail.message body HTML.
Click
Event Registration (ClickDimensions)
Odoo CRM
event.registration
1:1ClickDimensions Event Registrations migrate to Odoo event.registration records. We map registration name, email, session choices, registration date, and registration status (registered, attended, cancelled) to the Odoo event.registration fields. The associated Dynamics Contact resolves to the Odoo res.partner via email match. If Odoo Event app is not active, registrations migrate as custom fields on res.partner or a dedicated crm.lead tag.
Click
Web Tracking Event (ClickDimensions)
Odoo CRM
website.event or custom Partner fields
lossyClickDimensions Web Tracking Events for known contacts (email-identified) migrate to Odoo as custom fields on res.partner recording last website visit, page views count, and campaign attribution. Anonymous visitor events are optionally migrated as aggregate statistics on the relevant marketing campaign record. The mapping depends on whether Odoo Website or Marketing app is active at the destination.
Click
Survey Response (ClickDimensions)
Odoo CRM
survey.user_input or res.partner custom fields
lossyClickDimensions Survey Responses migrate to Odoo survey.user_input records if the Odoo Survey app is active, with survey questions mapped to Odoo survey.question answers. Responses linked to known contacts attach to the corresponding res.partner. If Odoo Survey is not active, response data migrates as custom fields or a notes section on the res.partner record.
Click
ClickDimensions Custom Fields
Odoo CRM
res.partner, crm.lead, event.registration custom fields
lossyClickDimensions custom field values migrate to Odoo custom fields created via Studio or model inheritance. We map the custom field name and data type to the closest Odoo field type (char, integer, float, date, boolean, selection). The Free Forever plan's 60-use write limit is checked during scoping; if the customer is on Free plan, we flag any overflow and advise on upgrade or manual population for excess records.
Click
Activity (Dynamics CRM Tasks, Phone Calls, Appointments)
Odoo CRM
mail.activity
1:1Dynamics CRM activities (tasks, phone calls, appointments, letters) migrate to Odoo mail.activity records linked to the relevant res.partner or crm.lead. Phone call duration and disposition map to custom activity fields; appointment start and end times map to Odoo activity date and duration. Activity status (open, completed, cancelled) maps to Odoo activity state.
Click
Note (Dynamics CRM)
Odoo CRM
mail.message (note type)
1:1Dynamics CRM Notes migrate to Odoo mail.message records with message_type = comment (internal note). The notebody text maps to the message body. Notes attached to specific records link via Odoo's res_id and res_model referencing the correct crm.lead or res.partner. File attachments on notes migrate as ir.attachment records linked to the same res_id and res_model.
Click
Owner/User (Dynamics CRM)
Odoo CRM
res.users
1:1Dynamics CRM Users referenced as record owners map to Odoo res.users by email address match. We extract distinct owner values from all migrating records during discovery and match against the destination Odoo instance's user list. Any owner without a matching Odoo user goes to a reconciliation queue for the customer's admin to provision before record import begins.
| Click | Odoo CRM | Compatibility | |
|---|---|---|---|
| Contact (Dynamics CRM) | res.partner (individual)1:1 | Fully supported | |
| Account (Dynamics CRM) | res.partner (company)1:1 | Fully supported | |
| Lead (Dynamics CRM) | crm.lead1:1 | Fully supported | |
| Opportunity (Dynamics CRM) | crm.lead (stage = Opportunity)1:1 | Fully supported | |
| Email Send (ClickDimensions) | mail.message1:1 | Fully supported | |
| Event Registration (ClickDimensions) | event.registration1:1 | Fully supported | |
| Web Tracking Event (ClickDimensions) | website.event or custom Partner fieldslossy | Fully supported | |
| Survey Response (ClickDimensions) | survey.user_input or res.partner custom fieldslossy | Fully supported | |
| ClickDimensions Custom Fields | res.partner, crm.lead, event.registration custom fieldslossy | Fully supported | |
| Activity (Dynamics CRM Tasks, Phone Calls, Appointments) | mail.activity1:1 | Fully supported | |
| Note (Dynamics CRM) | mail.message (note type)1:1 | Fully supported | |
| Owner/User (Dynamics CRM) | res.users1: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.
Click gotchas
Custom Field write limit on Free Forever plans
ClickDimensions does not store contacts independently
Export and Import tools move Click records between Dynamics environments
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
Source environment discovery
We identify and authenticate against the source Microsoft Dynamics 365 instance (the ClickDimensions host environment) and the ClickDimensions API endpoints. We audit the Dynamics CRM schema for Contact, Account, Lead, Opportunity, Activity, and Note entities, and the ClickDimensions entities for Email Send, Event Registration, Web Tracking Events, and Survey Response volumes. We confirm the ClickDimensions plan tier to determine the custom field write budget. The discovery output is a written data inventory with record counts, schema field lists, and a migration feasibility assessment.
Odoo destination schema design
We design the destination schema in the Odoo instance. This includes installing required apps (CRM, Event, Survey, Mail, Contacts), creating custom fields on res.partner, crm.lead, and event.registration via Studio or model inheritance, configuring the crm.lead stage pipeline to match the source Dynamics pipeline stages, and setting up Partner address_type distinctions for the Contact-Account split. If Odoo Survey or Event app is not active at the destination, we agree on a custom field strategy for survey and event data before migration begins.
Sandbox migration and mapping validation
We run a full migration into an Odoo test database or sandbox environment using a representative data sample (at least 10% of total volume). We validate the Contact-Account split logic, confirm that ClickDimensions Email Sends, Event Registrations, and Survey Responses attach to the correct res.partner records, spot-check 25-50 records against the source Dynamics and ClickDimensions data, and resolve any field mapping gaps. The customer reviews the test environment and signs off the mapping before production migration proceeds.
Owner and user reconciliation
We extract every distinct record owner from the source Dynamics CRM across all migrating entity types and match by email against the Odoo destination's res.users table. Any owner without a matching Odoo user is placed in a reconciliation queue for the customer's admin to provision or flag as inactive. Migration cannot complete owner resolution for records assigned to unprovisioned users until this step is resolved because OwnerId is a required field on crm.lead and mail.activity.
Production migration in dependency order
We run production migration in record-dependency sequence: res.partner (companies, from Dynamics Accounts), res.partner (contacts, from Dynamics Contacts with parentcompany linkage via commercial_partner_id), crm.lead (from Dynamics Leads and Opportunities), event.registration (from ClickDimensions Event Registrations with partner resolution), mail.message activity records (from ClickDimensions Email Sends and Dynamics Notes), web tracking data (as custom fields on res.partner), and survey responses (as custom fields or survey.user_input). Each phase emits a row-count reconciliation report before the next phase begins.
Cutover, validation, and marketing automation handoff
We freeze source system writes during cutover, run a final delta migration of any records modified during the migration window, and enable Odoo CRM as the system of record. We deliver the ClickDimensions marketing workflow and email template inventory document to the customer's Odoo admin for rebuild using Odoo Email Marketing and Studio. We support a one-week post-cutover window to resolve any reconciliation issues reported by the customer's team.
Platform deep dives
Click
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 Click 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
Click: Inherits Microsoft Dataverse and Power Platform service-protection limits (per-user request quotas published by Microsoft). The vendor does not publish Click-specific limits beyond those..
Data volume sensitivity
Click exposes a bulk API — large-volume migrations stream efficiently.
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 Click to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your Click 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 Click
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.