CRM migration
Field-level mapping, validation, and rollback between bxp software and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
bxp software
Source
Odoo CRM
Destination
Compatibility
5 of 12
objects map 1:1 between bxp software and Odoo CRM.
Complexity
BStandard
Timeline
4-8 weeks
Overview
Moving from bxp software to Odoo CRM is a migration from a bespoke, contact-centre-first deployment to an open-source ERP platform where CRM is one module among many. bxp's core data model centres on Forms (arbitrary field containers) and Contacts, with every client instance carrying a unique schema built per their workflows. Odoo uses a standard object model (res.partner, crm.lead, crm.lead.line, crm.activity) with a custom fields framework. We begin every engagement by enumerating the specific Forms and custom fields in the source bxp instance, building a field-level map to Odoo equivalents, and parsing any CDA/CCL archive exports before loading. Agent metrics, QA evaluation scores, and eLearning completion records are bespoke contact-centre data types that have no native Odoo equivalent; we export them as structured custom field data or a dedicated Odoo custom module. Workflows, automations, and IVR configurations do not migrate; we deliver a written inventory for the customer's admin to rebuild in Odoo's workflow builder.
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 bxp software 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.
bxp software
Contact
Odoo CRM
res.partner
1:1bxp Contacts map to Odoo res.partner records. We resolve the Contact record by email (the dedupe key) and preserve the original bxp contact_id in a custom Char field bxpid__c for cross-system reference. Custom fields attached to the bxp Contact (industry classification, territory, segment flags) are created as ir.model.field entries in Odoo before import and mapped by name. Any bxp contact-centre agent assignment is preserved in a custom res.partner field for reporting.
bxp software
Form
Odoo CRM
crm.lead, account.move, or custom model
1:manybxp Forms are the primary data container and can hold arbitrary field configurations per client instance. Each Form maps to an Odoo model based on its function: sales-oriented Forms map to crm.lead (the Odoo CRM lead object), financial Forms map to account.move or account.invoice, and bespoke Forms map to a custom model we create during schema provisioning. The mapping is determined during scoping by enumerating every Form in the source instance and classifying by purpose. This enumeration step cannot be skipped because bxp's value proposition is that no two instances share the same Form set.
bxp software
Custom Fields (bxp instance-specific)
Odoo CRM
ir.model.field (custom fields)
lossybxp custom fields are enumerated during scoping and recreated in Odoo using the Settings > Technical > Custom Fields interface (Enterprise) or via Python module development (Community). Field types are mapped: bxp text to Char, bxp number to Float or Integer, bxp date to Date, bxp dropdown to Selection, bxp multi-select to Char (comma-separated) or Many2many tags. Each custom field receives a bxpid__c reference back to the original bxp field name for audit traceability.
bxp software
Activities (call logs, agent interactions)
Odoo CRM
crm.activity
1:1bxp call activities and agent interactions log against Contact records. These map to Odoo crm.activity records linked to the res.partner via the res_id and model fields. Call duration, wrap time, and disposition codes from bxp become custom fields on the crm.activity record. The original bxp timestamp is preserved as activity_date for timeline ordering. Odoo's crm.activity model stores activity type (call, email, meeting, todo) with optional duration and description fields.
bxp software
Custom Archive: CDA Format
Odoo CRM
Parsed CSV or JSON for custom model
lossyCDA (Custom Data Archive) is a proprietary bxp export format that must be parsed before loading into Odoo. We convert CDA exports to structured CSV or JSON using a format-specific parser developed during scoping. The parsed records are mapped to an Odoo custom model (e.g., bxp_agent_metrics or bxp_custom_archive) created specifically for the migrated data. CDA records are loaded after the standard res.partner and crm.lead migration phases are validated.
bxp software
Custom Archive: CCL Format
Odoo CRM
Parsed CSV or JSON for custom model
lossyCCL (Contact Centre Log) is a proprietary bxp archive format used for detailed call-centre activity exports. Like CDA, CCL requires format-specific parsing before migration. We convert CCL exports to structured records and load them into the same custom Odoo model used for CDA data, with a record_type field distinguishing CCL call logs from CDA data. CCL call timestamps become the crm.activity activity_date; disposition codes map to a custom selection field.
bxp software
Agent Metrics
Odoo CRM
Custom model (bxp_agent_metrics)
lossybxp stores contact-centre agent metrics including call duration, wrap time, QA scores, and target attainment. These have no native Odoo CRM equivalent. We create a custom bxp_agent_metrics model in Odoo with fields for each metric type (call_duration_seconds, wrap_time_seconds, qa_score, target_attainment_pct). The model links to res.partner (for agent) and crm.activity (for associated call). This custom model is provisioned before the main migration and loaded after res.partner and crm.activity phases are validated.
bxp software
Quality Assurance Records
Odoo CRM
Custom model (bxp_qa_record)
lossybxp QA evaluations are tied to specific call records and agents. The QA schema varies by client deployment (bespoke evaluation forms). We enumerate every QA field during scoping, create a custom bxp_qa_record model in Odoo with the specific evaluation criteria as fields, and link each QA record to the associated crm.activity (call) and res.partner (agent). Evaluation scores and outcome flags are preserved as custom Float and Selection fields on the custom model.
bxp software
eLearning Records
Odoo CRM
Custom model (bxp_elearning_record) or attachments
lossybxp eLearning module stores training completion records, module scores, and assignment data. Odoo has no native eLearning module in its base CRM. We export eLearning records as structured data loaded into a custom bxp_elearning_record model (module_name, completion_date, score, status) linked to res.partner (the trainee). Alternatively, for read-only historical records, we export as PDF or CSV attachments on the relevant res.partner record. The customer chooses the preferred approach during scoping.
bxp software
Owner (bxp User)
Odoo CRM
res.users
1:1bxp Users (agents, supervisors, admins) map to Odoo res.users by email match. We extract every distinct bxp user referenced on Contact, Activity, and Form records and match by email against the destination Odoo instance's res.users table. Any bxp user without a matching Odoo user goes to a reconciliation queue for the customer's admin to provision before record import resumes. User active status, name, and email migrate directly.
bxp software
Form Submissions (historical)
Odoo CRM
crm.lead or custom model
1:1Historical Form submissions in bxp (submissions stored against Contacts with timestamp and field values) map to crm.lead records if they represent lead intake, or to a custom model if they represent operational data types. The mapping is determined by the Form classification in the scoping enumeration. Submission timestamps become the crm.lead create_date; field values map to crm.lead standard fields (name, email_from, phone, description) or custom fields.
bxp software
Notes and Attachments
Odoo CRM
ir.attachment + mail.message
1:1bxp notes and file attachments linked to Contact or Form records migrate to Odoo ir.attachment records linked via the res_model and res_id fields to the corresponding res.partner or crm.lead. Attachments are uploaded via Odoo's ir.attachment API. Notes migrate as mail.message records of type comment with body text preserved, linked to the parent record for activity timeline display.
| bxp software | Odoo CRM | Compatibility | |
|---|---|---|---|
| Contact | res.partner1:1 | Fully supported | |
| Form | crm.lead, account.move, or custom model1:many | Fully supported | |
| Custom Fields (bxp instance-specific) | ir.model.field (custom fields)lossy | Fully supported | |
| Activities (call logs, agent interactions) | crm.activity1:1 | Fully supported | |
| Custom Archive: CDA Format | Parsed CSV or JSON for custom modellossy | Fully supported | |
| Custom Archive: CCL Format | Parsed CSV or JSON for custom modellossy | Fully supported | |
| Agent Metrics | Custom model (bxp_agent_metrics)lossy | Mapping required | |
| Quality Assurance Records | Custom model (bxp_qa_record)lossy | Mapping required | |
| eLearning Records | Custom model (bxp_elearning_record) or attachmentslossy | Mapping required | |
| Owner (bxp User) | res.users1:1 | Fully supported | |
| Form Submissions (historical) | crm.lead or custom model1:1 | Fully supported | |
| Notes and Attachments | ir.attachment + mail.message1: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.
bxp software gotchas
BXP has no published public API documentation
Every BXP instance has a unique data schema
No list pricing creates budget uncertainty
Small review corpus limits due diligence
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
Schema enumeration and instance profiling
We audit the source bxp instance by enumerating every Form, every custom field, every CDA/CCL archive available, and every relationship between Forms and Contacts. We test connectivity to the bxp API v6 using the credentials the customer provides and request the internal API documentation PDF from bxp. We catalogue the bxp user list (agents, supervisors, admins) by email for the res.users reconciliation step. The output is a written source schema document that becomes the basis for the field-level mapping spec — this document is unique to each bxp instance and cannot be templated.
Destination schema provisioning in Odoo
We create the destination schema in Odoo based on the enumerated bxp Forms schema. This includes: custom res.partner fields for bxp Contact custom fields, custom crm.lead fields for Form submission data, custom selection fields for bxp dropdown and multi-select fields, custom models (bxp_agent_metrics, bxp_qa_record, bxp_elearning_record) for contact-centre data types, and custom ir.model.field entries for each bxp custom field mapped during enumeration. Schema is provisioned in an Odoo test database first for validation before production migration begins.
CDA/CCL parsing and data transformation
We develop a format-specific parser for the bxp CDA and CCL archive exports. The parser reads the proprietary binary or structured text format, extracts record fields, and outputs standard CSV or JSON that can be loaded via Odoo's data import tools or API. The parsed output is validated against the source CDA/CCL file record count before loading. This step runs in parallel with the API export phase and may require multiple iterations if the archive format contains undocumented field types.
Sandbox migration and reconciliation
We run a full migration into an Odoo test database using production-like data volume. The customer's Odoo admin reconciles record counts (Contacts in, Forms mapped, Activities in, CDA/CCL records in), spot-checks 25-50 random records against the bxp source, and validates that custom field values have transferred correctly. Any mapping corrections — wrong field type, missed custom field, incorrect Form-to-model assignment — happen here. The customer signs off the mapping spec before production migration begins.
User provisioning and Owner reconciliation
We extract every distinct bxp user referenced on Contact, Activity, Form, and archive records and match by email against the destination Odoo instance's res.users table. Users without a matching Odoo account go to a reconciliation queue. The customer's Odoo admin provisions any missing users and sets appropriate access rights (Agent, User, Manager) based on their bxp role. Migration cannot proceed past this step because res.partner user_id and res.users references are required on most imported records.
Production migration in dependency order
We run production migration in record-dependency order: res.users (manual provisioning validated), res.partner (from bxp Contacts), crm.lead (from bxp Forms classified as leads), custom model records (bxp_agent_metrics, bxp_qa_record, bxp_elearning_record from parsed CDA/CCL), crm.activity (call logs and agent interactions), ir.attachment and mail.message (notes and files). Each phase emits a row-count reconciliation report before the next phase begins. We freeze bxp writes during the cutover window and run a final delta migration of any records created or modified during the window.
Cutover, validation, and workflow rebuild handoff
We enable Odoo as the system of record after the final delta migration and reconciliation report is signed off. We deliver the bxp Workflow and Automation inventory document to the customer's admin team — this lists every bxp workflow, IVR configuration, and automation rule that requires rebuilding in Odoo's studio workflow builder. We do not rebuild bxp workflows as Odoo automated actions inside the migration scope; that work is scoped separately or handled by the customer's Odoo admin using Odoo's built-in studio tools.
Platform deep dives
bxp software
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 bxp software 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
bxp software: Not publicly documented.
Data volume sensitivity
bxp software 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 bxp software to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your bxp software 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 bxp software
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.