CRM migration
Field-level mapping, validation, and rollback between Rubi CRM and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
Rubi CRM
Source
Odoo CRM
Destination
Compatibility
8 of 12
objects map 1:1 between Rubi CRM and Odoo CRM.
Complexity
BStandard
Timeline
3-5 weeks
Overview
Rubi CRM and Odoo CRM serve different data models that require explicit transformation at migration time. Rubi CRM uses distinct Member and Membership record types tied to a membership module, with Events and Training bookings linked to Contacts or Members. Odoo CRM uses a unified Contact model (res.partner) with a partner_categories tag system for membership segmentation, and a separate event.event module for registrations. We resolve the Member-to-Contact mapping during scoping, preserve membership tier names and renewal dates as custom fields, and map Events with their booking registrations as Odoo event.registration records. Sales Pipeline stages in Rubi CRM are stored as user-defined custom fields against deal records rather than a native pipeline object; we extract the stage values during the scoping call and deliver them as a stage-configuration worksheet for Odoo CRM pipeline setup. Workflows, automations, and the Outlook email plugin configuration do not migrate; we deliver a written inventory of these for the customer's admin to rebuild in Odoo.
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 Rubi 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.
Rubi CRM
Contact
Odoo CRM
Contact (res.partner)
1:1Rubi CRM Contacts map directly to Odoo res.partner records with partner_type set to contact. Standard fields (name, email, phone, street, city, country) migrate 1:1. Custom contact properties discovered during scoping are created as ir.model.fields on res.partner before import. The Contact-Company relationship in Rubi CRM maps to the parent_id reference on res.partner, which Odoo uses to build the company-contact hierarchy.
Rubi CRM
Company
Odoo CRM
Company (res.partner with is_company=True)
1:1Rubi CRM Company records map to Odoo res.partner with is_company=True. Company name becomes the partner name, and associated Contacts are linked via parent_id to the newly created company partner. We run company deduplication by name and domain before import to prevent duplicate Odoo partners. Company-level custom fields migrate as custom fields on the is_company partner record.
Rubi CRM
Member
Odoo CRM
Contact (res.partner) with custom fields
1:1Rubi CRM Member records are distinct from Contacts and store membership-specific identifiers and status. We map Member ID to a custom field rubi_member_id__c on res.partner, and membership status (Active, Expired, Cancelled) to a selection field rubi_membership_status__c. The original Member record is matched to an existing Contact by email where a correspondence exists, or created as a new res.partner if no Contact link is found.
Rubi CRM
Membership
Odoo CRM
Custom fields on res.partner + partner_tags
lossyMembership records in Rubi CRM track individual subscriptions against Member profiles, including start dates, end dates, and tier names. We map start_date to rubi_membership_start__c, end_date to rubi_membership_end__c, and tier_name to both a selection field rubi_membership_tier__c and a partner_tag in Odoo's tag system (res.partner.category). The tag system allows Odoo to filter members by tier in list views and kanban without requiring a custom object. Rubi CRM does not export full subscription history in a single pass; multi-period subscription records require a separate export run from the membership module.
Rubi CRM
Events and Training
Odoo CRM
Events (event.event) + Registrations (event.registration)
1:manyRubi CRM Events are objects with bookings tied to Contacts or Members. We map event name, start_date, end_date, and location to Odoo event.event. Each Rubi CRM booking (Attendee) becomes an event.registration record linked to the Odoo event.event via event_id and to the corresponding res.partner via partner_id. Booking status (Confirmed, Waitlist, Cancelled) maps to Odoo's registration state field. Multi-session training courses are mapped to Odoo event.event with is recurring=True and session lines.
Rubi CRM
Sales Pipeline (Kanban stages)
Odoo CRM
CRM Pipeline (crm.lead with stage_id)
lossyRubi CRM's Kanban pipeline is a view with stage names stored as user-defined custom field values against deal records rather than a native pipeline object. We extract the distinct stage values from Rubi CRM deal records during the scoping call and deliver a stage-configuration worksheet mapping each Rubi CRM stage name to an Odoo CRM stage in the default sales team pipeline. Stage probability percentages are documented for entry into Odoo's stage configuration. This is a configuration handoff, not a data migration; the customer's Odoo admin applies the stage names post-migration.
Rubi CRM
Deal
Odoo CRM
Opportunity (crm.lead with type=opportunity)
1:1Rubi CRM Deals map to Odoo crm.lead records with type=opportunity. The deal name becomes the lead name, amount maps to planned_revenue, and expected_close_date maps to date_deadline. Stage name from the custom field maps to stage_id via the stage-configuration worksheet. Partner_id is resolved via Contact-Company matching. We create crm.lead records before linking them to event registrations if any Deals are tied to event bookings.
Rubi CRM
Activities (Outlook email logs)
Odoo CRM
Mail Messages (mail.message)
1:1Email interactions logged via Rubi CRM's Outlook plugin are stored as Activities linked to Contacts. We export activity timestamps, subject, and body text to Odoo mail.message records linked to the corresponding res.partner via model=res.partner and res_id. Thread-level threading from the original email is not preserved; messages land as individual entries rather than a threaded conversation view. This is a known limitation of the Rubi CRM export format.
Rubi CRM
Tasks
Odoo CRM
Project Tasks (project.task) or CRM Tasks (mail.activity)
1:1Rubi CRM Tasks map to Odoo project.task if the customer uses the Odoo Project module, or to mail.activity if tasks are scoped to CRM-only. Task owner resolves via email match to Odoo res.users. Due date and status map directly. We confirm the target model during scoping based on whether the customer intends to use Odoo Project alongside CRM or keep task management within the CRM module.
Rubi CRM
Custom Fields
Odoo CRM
Custom Fields (ir.model.fields)
lossyRubi CRM allows custom fields per record type but does not expose a schema endpoint. We discover custom field names and types during the export scoping phase by inspecting a sample export. We create matching fields in Odoo via ir.model.fields before any data import begins. Field types are mapped: text to char, number to float or integer, date to date, checkbox to boolean, dropdown to selection. Custom fields on Rubi CRM custom objects are handled as additional custom fields on the mapped Odoo object.
Rubi CRM
Reports and Audit Logs
Odoo CRM
Not migrated
1:1Rubi CRM's Report Builder exports data snapshots and its Audit log tracks user actions. Neither contains transactional CRM records. We do not migrate these objects as they are point-in-time exports not suitable as migration sources. We recommend exporting any reports the customer relies on as CSV from Rubi CRM before decommissioning and rebuilding them as Odoo custom reports or Excel imports post-migration.
Rubi CRM
Saved Reports
Odoo CRM
Not migrated
1:1Rubi CRM Saved Reports are flat snapshot exports and do not contain relational data suitable for Odoo import. We audit the customer's saved reports during scoping and flag those that contain operational data (pipeline summaries, membership renewal lists) for recreation as Odoo custom searches, saved filters, or Excel exports from the migrated data. Odoo Reporting (Flectra) or a BI tool like Metabase can rebuild historical analytics if the customer requires it.
| Rubi CRM | Odoo CRM | Compatibility | |
|---|---|---|---|
| Contact | Contact (res.partner)1:1 | Fully supported | |
| Company | Company (res.partner with is_company=True)1:1 | Fully supported | |
| Member | Contact (res.partner) with custom fields1:1 | Fully supported | |
| Membership | Custom fields on res.partner + partner_tagslossy | Fully supported | |
| Events and Training | Events (event.event) + Registrations (event.registration)1:many | Mapping required | |
| Sales Pipeline (Kanban stages) | CRM Pipeline (crm.lead with stage_id)lossy | Fully supported | |
| Deal | Opportunity (crm.lead with type=opportunity)1:1 | Fully supported | |
| Activities (Outlook email logs) | Mail Messages (mail.message)1:1 | Fully supported | |
| Tasks | Project Tasks (project.task) or CRM Tasks (mail.activity)1:1 | Fully supported | |
| Custom Fields | Custom Fields (ir.model.fields)lossy | Mapping required | |
| Reports and Audit Logs | Not migrated1:1 | Not supported | |
| Saved Reports | Not migrated1: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.
Rubi CRM gotchas
Pipeline stages are stored as user-defined custom field values, not a native pipeline object
Outlook plugin does not preserve email thread continuity
Memberships and Events require separate export passes
Acquisition by Sapling Multi Ventures introduces roadmap uncertainty
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
Scoped data discovery and Rubi CRM export
We audit the Rubi CRM instance across Contacts, Companies, Members, Memberships, Events, Training bookings, Sales Pipeline records, Tasks, and any custom fields or custom objects in use. We run sample exports per object type to verify field coverage and identify any records without an email match (orphaned Members with no linked Contact). We document the full object inventory, record counts per object, and any export limitations (multi-period subscription exports, event registration export separation). We also extract the Kanban stage names from deal records during this phase for the stage-configuration worksheet.
Odoo instance preparation
We confirm the Odoo plan tier (Standard at $24.90/user/month covers CRM, Sales, and Accounting; Enterprise adds support and advanced features) and provision the Odoo instance if not already active. We create all required custom fields on res.partner (rubi_member_id, rubi_membership_status, rubi_membership_tier, rubi_membership_start, rubi_membership_end) via Settings > Technical > Custom Fields before any data import. We configure CRM pipeline stages using the Rubi CRM stage names delivered from scoping and set probability percentages per stage. We enable the Events module if the customer has event data and verify that partner_tags (res.partner.category) are available for membership tier tagging.
Sandbox migration and reconciliation
We run a full migration into an Odoo test database using production-like data volume. The customer's operations lead reconciles record counts across all objects, spot-checks 25-50 records per object type against the Rubi CRM source, and verifies that membership tier tags appear correctly on Contact records. Any field mapping corrections, custom field type adjustments, or stage name updates are applied here before production migration. This step typically takes one to two weeks depending on the customer's review capacity.
Partner deduplication and company-contact linking
Before importing Contacts and Members, we run a deduplication pass on email addresses to prevent duplicate res.partner records. Rubi CRM Company records are imported as is_company=True partners first, then Contact records are imported with parent_id resolved to the matching Company partner. Member records without an existing Contact correspondence are imported as new res.partner records with the membership custom fields populated. This ordering satisfies Odoo's partner hierarchy requirements and prevents orphaned Contact records.
Production migration in dependency order
We run production migration in record-dependency order: Companies (is_company=True partners), Contacts (with parent_id resolved), Members (matched to Contacts by email or created as new partners), Events (event.event records), Event Registrations (event.registration linked to event and partner), Deals (crm.lead with stage_id resolved from the configuration worksheet), Tasks (project.task or mail.activity), and custom field data. Each phase emits a row-count reconciliation report. Activities from the Outlook plugin import as mail.message records in a separate pass after Contacts are confirmed in Odoo.
Cutover, validation, and automation inventory handoff
We freeze Rubi CRM 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 validate that membership tier tags appear on the correct Contact records, that event registrations match booking counts, and that pipeline stage names match the Rubi CRM Kanban view. We deliver the automation inventory document listing any Rubi CRM workflows or automations that require rebuild in Odoo (server actions, scheduled actions, or mail templates). We do not rebuild automations as part of the migration scope; that is a separate engagement or an internal admin task.
Platform deep dives
Rubi 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 Rubi 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
Rubi CRM: Not publicly documented.
Data volume sensitivity
Rubi 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 Rubi CRM to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your Rubi 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 Rubi 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.