CRM migration
Field-level mapping, validation, and rollback between Krayin CRM and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
Krayin CRM
Source
Odoo CRM
Destination
Compatibility
11 of 14
objects map 1:1 between Krayin CRM and Odoo CRM.
Complexity
BStandard
Timeline
2-4 weeks
Overview
Moving from Krayin CRM to Odoo CRM is a structural migration that resolves fundamental differences in object models. Krayin uses Persons (unified contact records) and Leads as separate objects; Odoo splits prospects into Leads and qualified buyers into Contacts attached to Accounts. We design the mapping rule during discovery, preserving the original Krayin record type as a custom field in Odoo for audit. Activity history (calls, meetings, tasks, notes) migrates through Odoo's XMLRPC API with parent-record resolution to preserve the timeline against the correct Lead, Contact, or Opportunity. Krayin's attachment storage on the filesystem, undocumented API rate limits, and absence of workflow export require manual handling: file re-upload post-migration, conservative throughput testing, and a written automation inventory for Odoo's Workflow Builder rebuild. Odoo's modular ERP depth means the CRM module can be extended to accounting, inventory, or project management post-migration, which is a common driver for the switch.
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 Krayin 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.
Krayin CRM
Lead
Odoo CRM
Lead
1:1Krayin Leads map directly to Odoo CRM Lead. The Krayin lead_id migrates as a custom reference field (x_krayin_lead_id) for audit traceability. Lead status values map to Odoo stage names, with Krayin pipeline stages configured as Odoo stages under the Lead's Kanban view. Any Krayin lead score values migrate to a custom float field in Odoo since Odoo's native lead scoring is AI-driven and requires Odoo Enterprise or a third-party module.
Krayin CRM
Person
Odoo CRM
Contact
1:1Krayin Persons map to Odoo Contacts. We map name, email, phone, and address fields directly, and resolve the Krayin company_id (Persons linked to Companies) by matching on company name to an Odoo Account created first in the load order. Krayin tags on Persons migrate to Odoo Tags (x_tags or the native tag_ids if the customer enables Tags in Odoo Settings). Custom attribute values on Persons migrate to Odoo custom fields created during schema design.
Krayin CRM
Company
Odoo CRM
Account
1:1Krayin Company records map to Odoo CRM Account. The company name becomes the Account name, website migrates to the Account website field, and any custom address fields map to the Account's contact address. Account is created before Person import so that the parent account lookup on Contact is satisfied at the moment of insert. Krayin company phone and industry values map to Odoo Account custom fields when no direct field exists.
Krayin CRM
Deal
Odoo CRM
Opportunity
1:1Krayin Deals map to Odoo CRM Opportunity. The Krayin deal amount, probability (stored as a percentage), expected close date, and stage name map to Odoo's expected_revenue, probability, date_deadline, and stage_id. The Krayin lead_id or person_id attached to the Deal resolves to the corresponding Odoo Lead or Contact via the reference fields preserved during import. Closed-Lost and Closed-Won reason values from Krayin custom fields map to Odoo Opportunity custom fields.
Krayin CRM
Quote
Odoo CRM
Sale Order (Quotation)
1:1Krayin Quotes map to Odoo Sale Orders in the Quotation state. Line items map to Sale Order Lines with product, quantity, unit price, and discount preserved. The Krayin Person or Company on the Quote resolves to an Odoo Partner (Contact or Account) and a Contact (for bill-to/ship-to). Custom quote templates, approval workflows, and e-signature status from Krayin do not migrate; we document them in the scope deliverable for manual rebuild in Odoo Sales.
Krayin CRM
Product
Odoo CRM
Product Template
1:1Krayin Products map to Odoo Product Templates. SKU maps to the Odoo product.default_code field, name maps to the template name, price maps to the Odoo list_price, and cost maps to the standard_price if populated in Krayin. Product type (goods vs. services) maps to the Odoo product type field (storable vs. consumable vs. service). Inventory quantities migrate if Odoo inventory is activated; otherwise products import as service or consumable type.
Krayin CRM
Activity: Call
Odoo CRM
Task (Subtype = Call)
1:1Krayin call activities map to Odoo CRM Next Activities on the Lead or Opportunity, represented as Task records with activity_type set to Call. Duration, disposition, and notes from Krayin migrate to custom fields on the Odoo activity. The original Krayin activity timestamp migrates as the Odoo activity's create_date for timeline ordering.
Krayin CRM
Activity: Meeting
Odoo CRM
Event (Calendar)
1:1Krayin meeting activities map to Odoo Calendar Event records. Start datetime, end datetime, location, and description migrate directly. Attendee resolution links the meeting to the Krayin-linked Person or Deal by resolving the Krayin person_id to the Odoo Contact and lead_id to the Odoo Lead via the preserved reference fields.
Krayin CRM
Activity: Task
Odoo CRM
Task
1:1Krayin task activities map to Odoo CRM Task records on the related Lead or Opportunity. Task title, description, due date, and status (open/closed) migrate. Krayin task assignments migrate by matching the Krayin user_id to an Odoo User record by email.
Krayin CRM
Activity: Note
Odoo CRM
Mail Message (Note)
1:1Krayin note activities map to Odoo Mail Message records with message_type = notification (displayed as a note in the chatter). Note body migrates as plain text with the original Krayin timestamp preserved. Notes linked to Deals map to the Odoo Opportunity chatter; notes linked to Persons map to the Contact chatter.
Krayin CRM
Pipeline
Odoo CRM
Stage (Kanban configuration)
lossyKrayin pipeline definitions and their custom stages migrate as Odoo CRM Stage configurations under the Leads and Opportunities Kanban views. Each Krayin pipeline becomes a separate Kanban column set in Odoo. Stage probabilities migrate from Krayin to Odoo stage probability values, and stage order is preserved. Automation rules per stage in Krayin (which cannot be exported) are documented in the scope deliverable for rebuild in Odoo Workflow Builder or Automated Actions.
Krayin CRM
User
Odoo CRM
User (Employee)
1:1Krayin Users map to Odoo Users. We match by email address and import name, email, and role. Krayin role and permission sets require manual reconfiguration in Odoo's Access Rights settings (Settings > Users > Access Rights) because Krayin and Odoo use different permission models. Active/inactive status migrates as-is; the customer's Odoo admin activates new users post-migration.
Krayin CRM
Tag
Odoo CRM
Tag (x_krayin_tag_ids)
lossyKrayin tag assignments on Leads, Persons, and Deals migrate as tag string arrays stored in a custom multi-value field x_krayin_tags on the corresponding Odoo record. If the customer has activated Odoo's native Tags (available in CRM Settings), we map to the native tag_ids field instead. Tags with no equivalent in Odoo are preserved as string values for post-migration cleanup.
Krayin CRM
Custom Attribute
Odoo CRM
Custom Field (x_ prefix)
lossyKrayin custom attributes on Leads, Persons, Companies, Deals, and Products migrate to Odoo custom fields. We probe the Krayin custom_attributes database table during discovery since not all custom attribute types are exposed via the REST API. Dropdown and multi-select attributes in Krayin map to Odoo selection fields or many2many tags depending on cardinality. Date and datetime attributes migrate as Odoo date/datetime fields. The Odoo custom fields are created before migration in a staging environment for validation.
| Krayin CRM | Odoo CRM | Compatibility | |
|---|---|---|---|
| Lead | Lead1:1 | Fully supported | |
| Person | Contact1:1 | Fully supported | |
| Company | Account1:1 | Fully supported | |
| Deal | Opportunity1:1 | Fully supported | |
| Quote | Sale Order (Quotation)1:1 | Fully supported | |
| Product | Product Template1:1 | Fully supported | |
| Activity: Call | Task (Subtype = Call)1:1 | Fully supported | |
| Activity: Meeting | Event (Calendar)1:1 | Fully supported | |
| Activity: Task | Task1:1 | Fully supported | |
| Activity: Note | Mail Message (Note)1:1 | Fully supported | |
| Pipeline | Stage (Kanban configuration)lossy | Fully supported | |
| User | User (Employee)1:1 | Fully supported | |
| Tag | Tag (x_krayin_tag_ids)lossy | Fully supported | |
| Custom Attribute | Custom Field (x_ prefix)lossy | 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.
Krayin CRM gotchas
Attachments stored on filesystem, not accessible via API
Workflows have no export mechanism
No publicly documented API rate limits
Self-hosting cost illusion masks true TCO
Custom attribute fields not always exposed via API
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 instance assessment
We audit the source Krayin instance via REST API and direct database query, capturing record counts per object (Leads, Persons, Companies, Deals, Activities, Products, Quotes), active workflow definitions, custom attribute field definitions and types, pipeline count and stage definitions, tag taxonomy, and file attachment inventory (for manual export guidance). We also assess the destination Odoo edition: Odoo Community (LGPL, free self-hosted) for teams with no need for Odoo Studio or enterprise features; Odoo SaaS Starter ($24/user/month) for teams preferring managed hosting with Odoo.sh. The discovery output is a written migration scope, data volume summary, and Odoo edition recommendation.
Schema design and custom field provisioning
We design the Odoo destination schema before any data moves. This includes creating custom fields (x_krayin_lead_id, x_krayin_tags, x_original_lifecycle, and any custom fields mapped from Krayin attributes), configuring CRM stage names and probabilities to match Krayin pipeline stages, setting up Sales Teams if the Krayin instance uses team-based lead routing, and enabling the Tags feature in Odoo CRM Settings if the customer chooses to use native tagging. Schema is deployed to an Odoo Sandbox or test database first for validation. Custom field API names use the x_ prefix for compatibility with both Odoo Community and SaaS.
Staging migration and reconciliation
We run a full migration into an Odoo staging environment using production-like data volume. The customer's CRM lead or admin reconciles record counts (Leads in, Contacts in, Accounts in, Opportunities in, Activities in), spot-checks 25-50 records against the Krayin source, and validates that pipeline stage assignments, tag assignments, and custom attribute values arrived correctly. Any field mapping corrections, transformation rule adjustments, or data quality issues (duplicate emails, missing required fields) are resolved in staging before production migration begins.
Owner reconciliation and Odoo User provisioning
We extract every distinct Krayin User referenced on Leads, Persons, Deals, and Activities and match by email against the Odoo destination instance's User table. Any Krayin Owner without a matching Odoo User goes to a reconciliation queue. The customer's Odoo admin provisions missing Users (active or inactive depending on the original Krayin user's status). Migration cannot proceed past the record import phase because OwnerId references are required on most standard CRM objects. Krayin role and permission sets are documented for manual reconfiguration in Odoo Access Rights.
Production migration in dependency order
We run production migration in record-dependency order: Accounts (from Krayin Companies, first so they satisfy parent lookups), Contacts (from Krayin Persons with AccountId resolved), Leads (with x_krayin_lead_id and tag values resolved), Opportunities (with PartnerId, LeadId, and stage_id resolved), Products and Product Variants (required before Quote line items), Sale Orders (from Krayin Quotes in draft/quotation state), Activity history (Tasks, Events, Mail Messages via Odoo's XMLRPC API with parent-record resolution), and Custom Attributes (last pass, applying custom field values to each object). Each phase emits a row-count reconciliation report before the next phase begins.
Cutover, validation, and automation rebuild handoff
We freeze Krayin writes during cutover, run a final delta migration of any records modified during the migration window, then enable Odoo as the system of record. We deliver the file export and import instructions for the customer to re-upload Krayin attachments to Odoo document management. We deliver the Krayin workflow inventory document to the customer's admin team with recommended Odoo Workflow Builder or Automated Actions equivalents. We support a one-week hypercare window where we resolve any reconciliation issues. Workflow rebuild, attachment re-upload, and permission reconfiguration are separate post-migration workstreams not included in the standard migration scope.
Platform deep dives
Krayin CRM
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 Krayin CRM 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
Krayin CRM: Not publicly documented.
Data volume sensitivity
Krayin 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 Krayin CRM to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your Krayin 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 Krayin 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.