CRM migration
Field-level mapping, validation, and rollback between Clarify CRM and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
Clarify CRM
Source
Odoo CRM
Destination
Compatibility
9 of 12
objects map 1:1 between Clarify CRM and Odoo CRM.
Complexity
BStandard
Timeline
3-5 weeks
Overview
Moving from Clarify CRM to Odoo CRM is a structural migration from an AI-autonomous, credit-priced SaaS tool to a modular open-source ERP with an integrated CRM layer. Clarify stores Contacts and Companies as separate objects enriched by autonomous AI field population; Odoo uses a unified res.partner model that conflates individuals and organizations under one table with a is_company boolean flag, requiring a schema decomposition during migration. Clarify Deals map to Odoo crm.lead with a pipeline_id and stage_id. Activity history (calls, emails, meetings, notes) migrates as Odoo mail.message and mail.activity records linked via model and res_id references. We flag every AI-enriched field before migration so the customer decides whether to preserve autonomous summaries or strip them. Workflows, sequences, and automation rules in Clarify do not migrate; we deliver a written inventory of these for the customer's Odoo partner to rebuild in Studio or custom Python modules. Odoo's per-user licensing model replaces Clarify's credit-based pricing, which typically reduces cost unpredictability for established sales teams that have already scaled past the free-tier credit ceiling.
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 Clarify 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.
Clarify CRM
Contact
Odoo CRM
res.partner
1:1Clarify Contact records map to Odoo res.partner with is_company=False and partner_latitude/longitude fields preserved. Email maps to email, phone to phone, and job_title to function. We set the commercial_partner_id to the linked Company record's res.partner ID at migration time. All standard contact fields migrate directly; AI-enriched custom fields are flagged during scoping for the customer to review before import.
Clarify CRM
Company
Odoo CRM
res.partner (is_company=True)
1:1Clarify Company records map to Odoo res.partner with is_company=True. Domain-based enrichment from Clarify populates the website field. We set parent_id=null on company records and use the commercial_partner_id for hierarchy (company as parent of individual contacts). Company-specific fields like industry, employee_count, and annual_revenue map to custom res.partner fields that we pre-create in the destination Odoo database.
Clarify CRM
Deal
Odoo CRM
crm.lead (type=opportunity)
1:1Clarify Deal records map to Odoo crm.lead with type='opportunity'. Deal value maps to planned_revenue, close_date maps to date_deadline, and deal name maps to name. The linked Company res.partner becomes the partner_id on crm.lead; the linked Contact res.partner becomes the contact_id. We set active=True and probability based on the mapped stage_id probability value.
Clarify CRM
Pipeline Stage
Odoo CRM
crm.stage
lossyClarify pipeline stages map to Odoo crm.stage records within a crm.pipeline. We capture the full stage sequence, custom stage names, and probability percentages from Clarify and create equivalent stages in Odoo with corresponding sequence order and is_won/is_lost flags. Stage names are normalized to Odoo's slug-style naming convention for kanban display.
Clarify CRM
Pipeline
Odoo CRM
crm.pipeline
lossyEach Clarify pipeline maps to an Odoo cdoo.pipeline record. Odoo allows multiple pipelines visible in separate kanban views. We create one pipeline per Clarify pipeline and assign the corresponding stage sequence. The pipeline's team_id maps to an Odoo crm.team that we provision during migration.
Clarify CRM
Tag
Odoo CRM
crm.tag
1:1Clarify tags migrate to Odoo crm.tag records, and tag assignments migrate to crm.tag_rel linking crm.lead to crm.tag. Tags used on Clarify Company records are stored as res.partner category_id entries (using res.partner.category). We deduplicate tag names before import to avoid Odoo raising unique constraint violations on tag creation.
Clarify CRM
Activity: Call
Odoo CRM
mail.activity (activity_type_id=Call)
1:1Clarify call activities map to Odoo mail.activity records with activity_type_id='Call'. Activity date, duration, and outcome notes from Clarify populate mail.activity date_deadline, summary, and note fields. The activity's res_model is set to crm.lead and res_id to the migrated crm.lead id.
Clarify CRM
Activity: Email
Odoo CRM
mail.message
1:1Clarify email engagement records migrate to Odoo mail.message with message_type='email'. Body content migrates as HTML body, subject as subject. We link mail.message to the migrated res.partner record via model='res.partner' and res_id. Email from/to addresses map to email_from and recipient_ids.
Clarify CRM
Activity: Meeting
Odoo CRM
calendar.event
1:1Clarify meeting activities map to Odoo calendar.event records with start, stop, and location fields populated. Attendees from Clarify meeting records resolve to res.partner attendees via partner_ids on the calendar.event. We preserve the original meeting timestamp in calendar.event start_datetime.
Clarify CRM
Activity: Note
Odoo CRM
mail.message (internal)
1:1Clarify note activities and standalone notes migrate to Odoo mail.message with message_type='notification' and subtype='mt_note'. AI-generated meeting summaries stored as note content are migrated as mail.message body text, flagged with a migration note in the message metadata so the customer knows which content was autonomous-generated in Clarify.
Clarify CRM
Custom Fields
Odoo CRM
ir.model.fields (custom)
lossyClarify custom fields on Contact, Company, and Deal objects require pre-creation in Odoo as ir.model.fields before data import. We extract the field type from Clarify (text, number, date, currency, multi-select) and map to the nearest Odoo field type (char, float, datetime, monetary, selection). Many-to-many and multi-select fields on Contact map to res.partner.tag_ids if appropriate, otherwise we create dedicated custom selection or char fields.
Clarify CRM
Owner
Odoo CRM
res.users
1:1Clarify Owner records map to Odoo res.users by email match. We extract every distinct owner referenced on Contact, Company, Deal, and Activity and match against res.users in the destination Odoo database. Owners without a matching user are held in a reconciliation queue for the customer's Odoo admin to provision before record import resumes.
| Clarify CRM | Odoo CRM | Compatibility | |
|---|---|---|---|
| Contact | res.partner1:1 | Fully supported | |
| Company | res.partner (is_company=True)1:1 | Fully supported | |
| Deal | crm.lead (type=opportunity)1:1 | Fully supported | |
| Pipeline Stage | crm.stagelossy | Fully supported | |
| Pipeline | crm.pipelinelossy | Fully supported | |
| Tag | crm.tag1:1 | Fully supported | |
| Activity: Call | mail.activity (activity_type_id=Call)1:1 | Fully supported | |
| Activity: Email | mail.message1:1 | Fully supported | |
| Activity: Meeting | calendar.event1:1 | Fully supported | |
| Activity: Note | mail.message (internal)1:1 | Fully supported | |
| Custom Fields | ir.model.fields (custom)lossy | Mapping required | |
| Owner | 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.
Clarify CRM gotchas
Credit-based billing requires usage audit before migration
15 req/s API rate limit applies universally
AI summaries export as linked notes, not structured records
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
Credit audit and migration scope definition
We audit the Clarify account for credit consumption across AI action types, record counts per object, active pipeline count, custom field definitions, tag usage, and engagement volume. We produce a written scope document that defines which records carry AI-enriched data, which the customer wants to preserve or strip, and the full object-level mapping to Odoo CRM. We also confirm the Odoo edition (Starter, Professional, or Odoo.sh), user count, and any existing Odoo database that will receive the migrated data. This step gates all downstream work.
Odoo res.partner schema design and stage configuration
We design the destination schema in Odoo. For res.partner, we create the distinction between is_company=True partners (from Clarify Companies) and is_company=False partners (from Clarify Contacts) and define the parent_id hierarchy. Custom fields from Clarify are pre-created as ir.model.fields in Odoo with correct types (char, datetime, selection, many2many). We configure crm.pipeline records matching Clarify pipeline count and create crm.stage entries with correct sequence, probability, and is_won/is_lost flags. Odoo Studio or a Python migration script handles schema deployment into the target database.
Export under Clarify API rate limits
We extract data from Clarify in dependency order: Companies first (to resolve res.partner parent IDs), then Contacts (with parent_id resolved to Companies), then Deals (with partner_id resolved), then Pipeline stages and tags (for denormalization), then Activity records (calls, emails, meetings, notes). Each export run stays under the 15 req/s limit using sub-batching and exponential backoff. AI-enriched field values are exported with their source flags intact so the customer can identify which fields were autonomously populated in Clarify.
Data transformation and partner deduplication
We transform Clarify records into Odoo schema format. This includes splitting Clarify Contact and Company into two res.partner records per organization, mapping Clarify tags to crm.tag entries and crm.tag_rel associations, converting Clarify activity timestamps to Odoo datetime format, and resolving parent_id references between Contact and Company partner records. Any tag name collisions are deduplicated before Odoo import. Custom field values are validated against the pre-created Odoo field types to prevent import rejection.
Odoo import with parent-record resolution
We import data into Odoo via XML-RPC in dependency order: res.partner (companies first, then contacts with parent_id resolved), crm.tag (before Deals so tag_rel is satisfied), crm.lead (with partner_id, contact_id, stage_id, and pipeline_id resolved), then mail.activity and mail.message for activity history. Owner resolution maps Clarify owner email to res.users login. Each import phase emits a row-count reconciliation report before the next phase begins. Validation rules and Odoo record uniqueness constraints are reviewed with the customer's admin before import to prevent batch rejections.
Cutover, validation, and automation rebuild handoff
We freeze Clarify writes during the cutover window, run a final delta migration of any records modified during the migration, then enable Odoo as the system of record. We validate record counts, spot-check 25-50 records against the Clarify source, and deliver the Workflow and Automation Inventory document to the customer's Odoo partner or admin. We support a five-business-day hypercare window for reconciliation issues. Workflow rebuild, Odoo automated actions, and Studio-based process redesign are outside the migration scope and are documented as a separate engagement.
Platform deep dives
Clarify CRM
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 2 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 Clarify CRM and Odoo CRM.
Object compatibility
2 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
Clarify CRM: 15 requests per second (universal, all plans).
Data volume sensitivity
Clarify 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 Clarify CRM to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your Clarify 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 Clarify 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.