CRM migration
Field-level mapping, validation, and rollback between Kordeva and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
Kordeva
Source
Odoo CRM
Destination
Compatibility
10 of 12
objects map 1:1 between Kordeva and Odoo CRM.
Complexity
BStandard
Timeline
2-3 weeks
Overview
Moving from Kordeva to Odoo CRM is a migration from a niche bundled platform with sparse API documentation to the world's most deployed open-source business suite with over 5 million users. Odoo CRM ships as a module within Odoo's modular ERP stack starting at $24.90/user/month. We migrate Contacts, Companies, Deals, and Activities using Odoo's XML-RPC API with batch chunking and parent-record lookup resolution. Kordeva's Custom Fields API lets us carry extended resource attributes into Odoo's custom field system. Odoo's data model splits what Kordeva may bundle as a single Contact into Lead and Contact objects; we resolve that split during scoping using Kordeva's lifecycle or status properties as the split criteria. Workflow configurations, Intelligent Workflow automation, and In-Depth Reporting are Premium-tier in Kordeva and do not migrate; we deliver a written automation inventory for Odoo Studio or automated action rebuild. Campus Management and Call Center records are excluded as separate product lines outside the CRM schema.
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 Kordeva 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.
Kordeva
Contact
Odoo CRM
Lead or Contact (split required)
1:manyKordeva Contacts with a defined lifecycle or status property split into Odoo CRM Lead (unqualified prospects) and Contact (qualified buyers attached to a Company). We apply the split rule during scoping using Kordeva's contact status or custom lifecycle field as the criterion, and store the original Kordeva lifecycle value in a custom field on the Odoo Lead or Contact for historical audit. If no lifecycle property exists, all Contacts migrate to Odoo Lead by default and the customer decides which records to convert to Contact post-migration.
Kordeva
Company
Odoo CRM
Company
1:1Kordeva Company records map directly to Odoo CRM Company. The company name becomes the Odoo Company name field, and any Kordeva custom company-level fields migrate to Odoo custom fields on the res.partner model. Company-contact associations preserve as Odoo's child-partner relationships under the parent Company.
Kordeva
Deal
Odoo CRM
Opportunity
1:1Kordeva Deals map to Odoo CRM Opportunity. The deal name maps to opportunity name, deal amount maps to Odoo's expected_revenue and planned_revenue fields, and Kordeva pipeline stage names map to Odoo stage values. We create Odoo stages matching Kordeva's pipeline stages before migration and configure probability percentages per stage.
Kordeva
Deal Stage
Odoo CRM
Opportunity Stage
lossyEach Kordeva deal pipeline maps to an Odoo CRM team with its own stage sequence. Stage names migrate verbatim or are renamed during scoping if the customer wants a cleaner Odoo stage label set. Stage probabilities transfer as integer percentages on each Odoo stage record.
Kordeva
Custom Fields
Odoo CRM
Custom Fields
1:1Kordeva Custom Fields API exposes extended attributes on Contacts, Companies, Deals, and Activities. We enumerate every custom field definition during discovery, preserve field type (text, number, date, picklist, checkbox), and recreate each as an Odoo custom field on the matching model before data import. Multi-select picklists in Kordeva map to Odoo selection fields or many2many tags depending on the field cardinality.
Kordeva
Owner
Odoo CRM
User
1:1Kordeva Owners (the assigned user on Contact, Company, Deal, and Activity) map to Odoo CRM User by email match. We extract every distinct owner referenced on migrating records and match against Odoo user records. Any Kordeva Owner without a matching Odoo User enters a reconciliation queue for the customer's admin to provision before record import resumes.
Kordeva
Engagement: Email
Odoo CRM
mail.message (via mail.thread)
1:1Kordeva email engagements (email logs against a Contact or Deal) migrate to Odoo mail.message records linked via the mail.thread model to the corresponding Odoo Lead, Contact, Company, or Opportunity. Email body, subject, sender, and timestamp transfer. Odoo's mail.tracking.value model preserves tracking status if Kordeva provides it.
Kordeva
Engagement: Call
Odoo CRM
Note (Call subtype)
1:1Kordeva call engagements map to Odoo Note records with a call subtype tag. Call duration, disposition, and recording URL (if stored as a URL reference in Kordeva) migrate to Odoo note body fields. Odoo's phone module fields (x_phone_call_duration__c) are created during schema setup if structured call data is present.
Kordeva
Engagement: Meeting
Odoo CRM
Calendar.Event
1:1Kordeva meeting engagements map to Odoo Calendar.Event records. Meeting title, start and end datetime, location, and attendee list transfer. Odoo Calendar attendee links (res.partner records) are resolved by email match against the migrated Contact or Lead records.
Kordeva
Engagement: Task
Odoo CRM
Project.Task (CRM project)
1:1Kordeva task engagements map to Odoo CRM project tasks within the default CRM project. Task name, description, due date, priority, and assigned user transfer. Status mapping aligns Kordeva task states to Odoo stage values on the CRM task project. If Kordeva task hierarchy (subtasks) exists, we flatten to top-level tasks in Odoo with a parent task reference in the notes field.
Kordeva
Engagement: Note
Odoo CRM
Note
1:1Kordeva free-text notes logged against Contacts, Companies, or Deals migrate to Odoo Note records. Notes attach to the Odoo record via Odoo's res_id/res_model referencing the migrated Lead, Contact, Company, or Opportunity. Rich text content transfers as-is; attachments migrate as Odoo IrAttachment records linked to the Note.
Kordeva
Accounts and Invoicing
Odoo CRM
res.partner (Accounting flag)
1:1Kordeva invoice records, line items, and payment status transfer to Odoo as res.partner records with an accounting flag indicating billing relationship. Odoo's full Accounting module (Invoicing) is a separate module from CRM; invoice records requiring full invoice schema (invoice number, date, amount, tax, payment terms) are migrated separately as Odoo account.move records only if the customer activates the Odoo Accounting module. Without Accounting active, invoice metadata migrates as structured note fields on the Contact for accounts receivable context.
| Kordeva | Odoo CRM | Compatibility | |
|---|---|---|---|
| Contact | Lead or Contact (split required)1:many | Fully supported | |
| Company | Company1:1 | Fully supported | |
| Deal | Opportunity1:1 | Fully supported | |
| Deal Stage | Opportunity Stagelossy | Fully supported | |
| Custom Fields | Custom Fields1:1 | Fully supported | |
| Owner | User1:1 | Fully supported | |
| Engagement: Email | mail.message (via mail.thread)1:1 | Fully supported | |
| Engagement: Call | Note (Call subtype)1:1 | Fully supported | |
| Engagement: Meeting | Calendar.Event1:1 | Fully supported | |
| Engagement: Task | Project.Task (CRM project)1:1 | Fully supported | |
| Engagement: Note | Note1:1 | Fully supported | |
| Accounts and Invoicing | res.partner (Accounting flag)1:1 | 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.
Kordeva gotchas
Sparse public API documentation limits migration tooling confidence
Premium-tier feature boundary affects what data exists to migrate
Single verified review on G2 creates information asymmetry
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
API connectivity test and extraction method selection
We request Kordeva API credentials (client ID, secret, and base URL) and run a connectivity test against the Custom Fields API and base CRM endpoints. We attempt to retrieve a sample of Contact, Company, Deal, and Activity records via API. If API access is confirmed and returns structured data, we plan XML-RPC batch extraction. If API access fails or returns incomplete data, we fall back to CSV export from the Kordeva UI and document which fields (particularly custom fields and activity history) may be unavailable. The extraction method is locked before schema design begins.
Discovery and schema design
We audit the Kordeva CRM environment: tier (Regular or Premium), object counts per type, custom field definitions and their Kordeva data types, pipeline and stage names, owner distribution, and activity volume by type. We pair this with Odoo CRM module activation decisions: whether the customer needs the Accounting module for invoice migration, whether Projects is required for task hierarchy, and which Odoo CRM team(s) will own the migrated data. We design the Odoo schema (Lead/Contact split rule, custom fields, stage sequences, team structure) and deploy it to an Odoo test database via XML-RPC before any production migration.
Data quality audit and deduplication
We run a data quality audit on extracted Kordeva records: duplicate contacts (same email, different records), incomplete fields (Contacts with no name or email), inconsistent phone number formats, and orphaned Deals (Deals with no associated Contact or Company). We provide the customer with a data quality report and a deduplication recommendation. We do not auto-delete records; we flag duplicates and let the customer's admin decide which record to keep or merge before migration.
Owner reconciliation and User provisioning
We extract every distinct Kordeva Owner referenced on Contacts, Companies, Deals, and Activities and match by email against Odoo User records. Owners without a matching Odoo User enter a reconciliation queue. The customer's admin provisions any missing Odoo Users (active or inactive depending on whether the original Kordeva owner is still employed). Migration cannot proceed past the Owner step because Odoo requires a valid res.users reference on record assignment fields.
Production migration in dependency order
We run production migration in record-dependency order: Odoo Users (manual provisioning validated), Companies (from Kordeva Company records), Leads and Contacts (with the Kordeva lifecycle-based split applied and Company lookup resolved), Opportunities (with Lead/Contact lookup and Owner resolved), Custom Fields data (as x_custom_field__c on the relevant model), Activity history (emails, calls, meetings, tasks as mail.message and Note records via XML-RPC batch), and Invoice records (if Odoo Accounting module is active). Each phase emits a row-count reconciliation report before the next phase begins.
Cutover, validation, and automation handoff
We freeze Kordeva write access during cutover, run a final delta migration of any records modified during the migration window, then validate Odoo as the system of record. We reconcile record counts against the Kordeva export baseline and spot-check 20-30 random records for field accuracy. We deliver the Intelligent Workflow inventory document (Premium tier) and the automation rebuild guide for Odoo Automated Actions. We support a five-business-day hypercare window where we resolve data issues. We do not rebuild Kordeva Intelligent Workflow configurations inside the migration scope; that is a separate engagement.
Platform deep dives
Kordeva
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 Kordeva 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
Kordeva: Not publicly documented.
Data volume sensitivity
Kordeva 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 Kordeva to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your Kordeva 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 Kordeva
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.