CRM migration
Field-level mapping, validation, and rollback between Plumb5 and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
Plumb5
Source
Odoo CRM
Destination
Compatibility
8 of 12
objects map 1:1 between Plumb5 and Odoo CRM.
Complexity
BStandard
Timeline
4-6 weeks
Overview
Moving from Plumb5 to Odoo CRM is a structural migration from a behavioral intelligence platform into a full ERP-embedded CRM. Plumb5 organizes data around unified customer profiles enriched with real-time behavioral events, session data, channel attribution, and auto-segmentation scoring; Odoo CRM organizes data around Leads, Contacts, Opportunities, and Tasks via the crm.lead and res.partner models. We resolve that structural difference during scoping by mapping Plumb5 profiles to Odoo Leads (for unqualified prospects) or Contacts (for qualified accounts), preserving Plumb5 scoring values as custom float fields on the appropriate record type. Behavioral events and session data migrate to Odoo as a linked activity log or custom activity extension. Plumb5's absence of a publicly documented bulk export API means we begin every engagement by inspecting the live instance's API surface during discovery; we cannot confirm migration scope until that inspection completes. Odoo does not have a native equivalent to Plumb5's auto-segmentation or behavioral scoring engine, so we document the score definitions and segment membership as static properties for the customer's Odoo admin to re-implement using Odoo automation rules. Workflows, campaign automation models, and scoring rules do not migrate as executable logic; we deliver a written inventory for the admin to rebuild.
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 Plumb5 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.
Plumb5
Customer Profiles
Odoo CRM
Lead or Contact (split by lifecycle stage)
1:manyPlumb5 unified profiles with lifecycle stages of anonymous visitor, lead, or marketing qualified lead map to Odoo CRM Lead. Profiles with lifecycle stages of sales qualified lead, customer, or evangelist map to Odoo Contact attached to a Company (res.partner). We compute the split using Plumb5's lifecycle_stage property and preserve the original stage value in a custom Char field plumb5_lifecycle__c on both Lead and Contact for post-migration reference.
Plumb5
Customer Profiles
Odoo CRM
res.partner (Company)
1:1Plumb5 profiles associated with organizations (identified by domain or a company_name property) map to Odoo res.partner records with is_company=True. The Plumb5 company identifier becomes the partner's name, and the domain becomes the website field. This parent Company record is created before any Contact import so that individual Contact records can reference it via parent_id.
Plumb5
Behavioral Events
Odoo CRM
mail.message or crm.lead.activity
lossyPlumb5 behavioral events (web visits, email opens, form submissions, app interactions) migrate as Odoo mail.message records linked to the corresponding Lead or Contact via model and res_id. Event type becomes the message's subject prefix, timestamp is preserved as message_date, and the event payload (page URL, referrer, duration) migrates as body text. We configure a custom Odoo module to register the mail.message extension so the migration user can query events by type after import.
Plumb5
Session Data
Odoo CRM
Custom activity fields on Lead/Contact
1:1Plumb5 session records containing device type, geography, referrer URL, and session duration map to custom Char and Integer fields on the Odoo Lead or Contact: plumb5_last_device__c, plumb5_last_country__c, plumb5_last_referrer__c, and plumb5_session_duration__c. Odoo does not store raw session data natively, so we flatten the most recent session values as read-only properties on the record.
Plumb5
Channel Sources
Odoo CRM
crm.tag or res.partner.category
1:1Plumb5 channel attribution (organic search, paid search, social, email, direct, referral) stored as a property on each profile migrates to Odoo crm.tag records with a 'channel:' prefix. TagAssignment records link each Lead or Contact to its Plumb5 channel source. If the customer uses Plumb5's UTM-based channel tracking, we preserve utm_source, utm_medium, and utm_campaign as separate custom fields.
Plumb5
Scoring Models (score values)
Odoo CRM
Custom Float field on Lead/Contact
1:1Plumb5 behavioral score values stored per profile migrate as a custom Float field plumb5_score__c on the Lead or Contact object. The score logic itself (auto-segmentation rules and threshold definitions) does not migrate as executable rules because Odoo has no native scoring engine. We document the Plumb5 score definition table during discovery so the customer's Odoo admin can rebuild thresholds using Odoo automation rules or a custom Python compute method.
Plumb5
Segmentation Rules (membership lists)
Odoo CRM
Static crm.tag assignments
1:1Plumb5 auto-segmentation generates dynamic segment membership lists. Since Odoo handles dynamic segmentation differently (usingFilters and domain-based searches rather than pre-computed lists), we migrate segment membership as static crm.tag records on each Lead or Contact. We tag records with the Plumb5 segment name as a static tag, preserving the membership at migration time. The customer's admin rebuilds the dynamic behavior in Odoo using saved Filters and domain views.
Plumb5
Campaigns
Odoo CRM
crm.lead.tag or utm.campaign
1:1Plumb5 marketing campaigns with associated audiences and goals migrate as Odoo crm.lead.tag records with a 'campaign:' prefix, linked to each Lead or Contact that was a member of that Plumb5 campaign. Campaign performance metrics (reach, opens, clicks) do not migrate as Odoo reports because Odoo's campaign tracking lives in the Marketing app rather than CRM. We deliver a campaign membership export as a supplemental CSV for the customer's marketing team to reference when rebuilding campaign analytics in Odoo Marketing.
Plumb5
Engagement Metrics
Odoo CRM
Custom fields on Lead/Contact
1:1Plumb5 derived KPIs per customer (recency, frequency, monetary value, sentiment scores) migrate as read-only custom fields on the Odoo Lead or Contact: plumb5_recency_days__c, plumb5_frequency__c, plumb5_monetary_value__c, plumb5_sentiment_score__c. These are preserved as static properties; Odoo does not compute RFM (recency, frequency, monetary) natively in CRM without custom development.
Plumb5
Lifecycle Stages
Odoo CRM
Lead Status or custom Char field
lossyPlumb5 lifecycle stages (anonymous visitor through brand advocate) do not map 1:1 to Odoo's Lead Status values (New, Assigned, Qualified, etc.). We map the closest equivalent: Plumb5 'lead' maps to Odoo Lead with Status 'New'; Plumb5 'customer' maps to a Contact record rather than a Lead. Stages with no Odoo equivalent (brand advocate, inactive) are preserved in the plumb5_lifecycle__c custom field for the customer's admin to decide on post-migration naming conventions.
Plumb5
Custom Properties
Odoo CRM
Custom fields via Odoo module
lossyPlumb5 user-defined profile fields require a named Odoo custom module before they can receive data. We develop a lightweight Python module (plumb5_migrate) that defines all discovered Plumb5 custom properties as typed Odoo fields (Char, Integer, Float, Boolean, Date, Datetime, Selection) on the res.partner and crm.lead models, then deploy it to the target Odoo instance before migration begins. The module is handed off to the customer post-migration for ongoing maintenance.
Plumb5
Owner
Odoo CRM
res.users
1:1Plumb5 Owners map to Odoo res.users records by email match. Any Plumb5 Owner without a matching Odoo User is held in a reconciliation queue for the customer's admin to provision before record import resumes. Owner assignment on Leads and Contacts migrates as Odoo's user_id field. If the customer uses Plumb5's team-based routing, we map team membership to Odoo Odoo Sales Team (crm.team) via the resource.calendar relationship.
| Plumb5 | Odoo CRM | Compatibility | |
|---|---|---|---|
| Customer Profiles | Lead or Contact (split by lifecycle stage)1:many | Fully supported | |
| Customer Profiles | res.partner (Company)1:1 | Fully supported | |
| Behavioral Events | mail.message or crm.lead.activitylossy | Fully supported | |
| Session Data | Custom activity fields on Lead/Contact1:1 | Mapping required | |
| Channel Sources | crm.tag or res.partner.category1:1 | Fully supported | |
| Scoring Models (score values) | Custom Float field on Lead/Contact1:1 | Fully supported | |
| Segmentation Rules (membership lists) | Static crm.tag assignments1:1 | Fully supported | |
| Campaigns | crm.lead.tag or utm.campaign1:1 | Fully supported | |
| Engagement Metrics | Custom fields on Lead/Contact1:1 | Mapping required | |
| Lifecycle Stages | Lead Status or custom Char fieldlossy | Mapping required | |
| Custom Properties | Custom fields via Odoo modulelossy | 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.
Plumb5 gotchas
No publicly documented bulk export API
Data-consumption billing model affects migration sizing
Behavioral scoring models do not transfer as executable rules
Lifecycle stage definitions may not map 1:1
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 discovery and export feasibility assessment
We request Plumb5 API credentials and inspect the live instance's read endpoints during a one-to-two-week discovery phase. We test profile export, event export, campaign membership export, and custom property discovery. If the API is restricted by plan tier, we surface this immediately so the customer can upgrade Plumb5 access or arrange a manual data export. We do not confirm final migration scope until this inspection is complete.
Odoo custom module development for custom fields
We develop a Python Odoo module (plumb5_migrate) that defines all discovered Plumb5 custom properties as typed fields on res.partner and crm.lead. We define Char, Integer, Float, Boolean, Date, Datetime, and Selection fields based on the Plumb5 schema audit. The module is tested in an Odoo staging environment, deployed to the target instance, and installed before any data import begins.
Schema design and lifecycle split rule
We design the Odoo CRM schema: Record Types for Lead and Contact if needed, Sales Team structure, Lead Status values, and the lifecycle stage split rule (which Plumb5 stages map to Odoo Lead versus Contact). We configure crm.tag records for channel sources and campaign membership. Schema is validated in Odoo staging before production migration begins.
Sandbox migration and reconciliation
We run a full migration into the Odoo production environment (or a Full Copy sandbox if available) using production-like data volume. The customer's Odoo admin reconciles record counts, spot-checks 25-50 random profiles against the Plumb5 source, and validates custom field values. Any mapping corrections happen at this stage. This step typically runs over one to two weeks depending on data volume.
Owner and user provisioning reconciliation
We extract every distinct Plumb5 Owner referenced on profiles, campaigns, and engagement records and match by email against the Odoo res.users table. Owners without a matching Odoo User go to a reconciliation queue. The customer's Odoo admin provisions any missing users. Migration cannot proceed past this step because Odoo's user_id field is required on Lead and Contact records.
Production migration in dependency order
We run production migration in record-dependency order: Companies (res.partner with is_company=True) from Plumb5 organization profiles, then Contacts and Leads with the lifecycle split applied and parent_id resolved to the Company record, then scoring and engagement metric custom fields, then campaign membership tags, then behavioral event history via batched XML-RPC calls. Each phase emits a row-count reconciliation report before the next phase begins.
Cutover, validation, and automation rebuild handoff
We freeze writes to Plumb5 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 Plumb5 scoring definition document and segment membership export to the customer's Odoo admin team with recommendations for rebuilding automation rules using Odoo Studio or server actions. We support a one-week hypercare window for reconciliation issues. We do not rebuild Plumb5 segmentation models as Odoo automation rules inside the migration scope; that is a separate engagement.
Platform deep dives
Plumb5
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. All 8 core objects map 1:1 between Plumb5 and Odoo CRM.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Plumb5 and Odoo CRM.
Object compatibility
All 8 core objects map 1:1 between Plumb5 and Odoo CRM.
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
Plumb5: Not publicly documented — typical SaaS limits assumed and confirmed during scoping.
Data volume sensitivity
Plumb5 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 Plumb5 to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your Plumb5 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 Plumb5
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.