CRM migration
Field-level mapping, validation, and rollback between Bright and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
Bright
Source
Odoo CRM
Destination
Compatibility
11 of 11
objects map 1:1 between Bright and Odoo CRM.
Complexity
BStandard
Timeline
48–72 hours
Overview
Bright CRM stores contacts, companies, and deals in a flat property-value model where custom fields are first-class objects and pipeline stages are per-organization. Odoo CRM uses a relational PostgreSQL-backed model: crm.lead for leads and opportunities (with a polymorphic type field distinguishing each), res.partner for contacts and companies (a unified model), and custom fields created via Odoo Studio on the res.partner or crm.lead model. The migration maps Bright's contacts to res.partner records, Bright's companies to res.partner records of type 'company', and Bright's deals to crm.lead records where type='opportunity'. Bright's custom fields migrate as Odoo custom fields on the corresponding model — these must be pre-created in Odoo Studio before the migration run. Owner resolution uses email matching against Odoo res.users records. Bright workflow definitions, automation rules, and sequence logic do not transfer; we export them as JSON rebuild references for your Odoo administrator to reconstruct using Odoo Studio actions or server actions. The migration uses Odoo's xmlrpc/JSON-RPC API for record creation, respecting the 1 request/second rate limit on the Odoo External API for Custom-plan instances.
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 Bright 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.
Bright
Contact
Odoo CRM
res.partner (type='contact')
1:1Bright contacts map directly to Odoo res.partner records with type='contact'. The company_id field is set by resolving Bright's primary company association via the contact-to-company link table. If a Bright contact has no associated company, the contact lands as a standalone res.partner with no parent_id set. Email and name fields are transferred as-is to maintain contact identity.
Bright
Company
Odoo CRM
res.partner (type='company')
1:1Bright companies map to Odoo res.partner records with type='company'. The company_id on child contacts points to this record's id. Parent-child company hierarchies in Bright map via res.partner's parent_id field, preserving organizational structure. Industry, website, and employee count are transferred to the corresponding Odoo fields on the res.partner record.
Bright
Deal
Odoo CRM
crm.lead (type='opportunity')
1:1Bright deals map to Odoo crm.lead records where type='opportunity'. The crm.lead.name field holds the deal name, expected_revenue holds the amount, and team_id routes the record to the correct Odoo sales team. Close date maps to date_deadline, and probability values are transferred to maintain deal scoring consistency across the migration.
Bright
Lead (pre-deal contact)
Odoo CRM
crm.lead (type='lead')
1:1Bright contacts that have not yet entered a deal map to Odoo crm.lead records with type='lead'. These records can later be converted to opportunities via Odoo's 'Convert to Opportunity' action, which creates a res.partner if needed and links the lead to the new opportunity record. Original Bright lifecycle_stage values are preserved in a custom field for reference.
Bright
Pipeline
Odoo CRM
crm.team
1:1Each Bright pipeline becomes an Odoo crm.team. The crm.team defines the sales team, its member list, and the pipeline view. Stage records (crm.stage) are created under each team with the Bright stage names as stage names. Team_id on crm.lead records routes opportunities to the correct team-based Kanban view in Odoo.
Bright
Pipeline Stage
Odoo CRM
crm.stage
1:1Bright stage names map to Odoo crm.stage records by team. Probability values and sequence orders are preserved. Custom stage colors from Bright are not transferable and must be reconfigured in Odoo's Studio. Stage IDs are recorded in the migration config for explicit mapping during the lead migration phase.
Bright
Activity (call, email, meeting)
Odoo CRM
crm.activity + mail.message
1:1Bright activity records map to Odoo crm.activity entries logged against the crm.lead, and mail.message records for the communication history. Original timestamps and owner_id are preserved via the Odoo mail.message model. Activity type (call, email, meeting) is stored in the crm.activity.activity_type_id field using Odoo's activity type configuration.
Bright
Note
Odoo CRM
mail.message (note subtype)
1:1Bright notes migrate as Odoo mail.message records with subtype='note' attached to the corresponding res.partner or crm.lead. Rich-text formatting is preserved as HTML in the body field. Author information is set to the migrated Odoo user who owns the note, with create_date matching the original Bright note timestamp for audit continuity.
Bright
Attachment / File
Odoo CRM
ir.attachment
1:1Bright file attachments are downloaded and re-uploaded to Odoo as ir.attachment records with res_model set to 'crm.lead' or 'res.partner' and res_id referencing the target record. The original filename and file content are preserved. Attachment metadata including create_date and author is transferred to maintain document provenance in the Odoo filestore.
Bright
Custom Field (Bright-specific)
Odoo CRM
ir.model.fields (custom)
1:1Bright custom fields must be pre-created in Odoo Studio before migration. FlitStack generates a field creation plan naming each custom field's Odoo model (crm.lead or res.partner), field type (char, selection, float, etc.), and any required selection values. Data is then mapped into these custom fields during the migration run. Selection field values include the full Bright pick-list options for dropdown compatibility.
Bright
User / Owner
Odoo CRM
res.users
1:1Bright owner IDs are resolved by email matching against Odoo res.users records. Unmatched owners are flagged before migration; your team either invites them to Odoo first or assigns records to a fallback Odoo user designated during pre-flight. Owner resolution failures prevent data integrity issues by ensuring every migrated record has a valid user_id reference.
| Bright | Odoo CRM | Compatibility | |
|---|---|---|---|
| Contact | res.partner (type='contact')1:1 | Fully supported | |
| Company | res.partner (type='company')1:1 | Fully supported | |
| Deal | crm.lead (type='opportunity')1:1 | Fully supported | |
| Lead (pre-deal contact) | crm.lead (type='lead')1:1 | Fully supported | |
| Pipeline | crm.team1:1 | Fully supported | |
| Pipeline Stage | crm.stage1:1 | Fully supported | |
| Activity (call, email, meeting) | crm.activity + mail.message1:1 | Fully supported | |
| Note | mail.message (note subtype)1:1 | Fully supported | |
| Attachment / File | ir.attachment1:1 | Fully supported | |
| Custom Field (Bright-specific) | ir.model.fields (custom)1:1 | Fully supported | |
| User / 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.
Bright gotchas
CIS deduction rates are employee-specific and must transfer as discrete fields
No bulk document export API forces manual file downloads
Leave entitlement balances require separate export alongside the request history
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
Export Bright data via API and generate Odoo field creation plan
FlitStack extracts all Bright contacts, companies, deals, activities, and attachments via the Bright REST API. We generate a field-level extraction including custom field definitions. Simultaneously, we produce an Odoo field creation plan listing every custom field to be created via Studio (model name, field label, field type, selection values) so your Odoo administrator can pre-build the schema before the migration run. No data moves until the schema is confirmed.
Resolve owners and create crm.team / crm.stage structure
Bright owner IDs are matched against Odoo res.users records by email address. Unmatched owners are flagged in a pre-flight report; your team either creates the Odoo user first or designates a fallback owner. We also create the Odoo crm.team and crm.stage records using Bright pipeline names and stage labels, applying any Bright stage probabilities to the Odoo stage probability field.
Migrate companies and contacts in dependency order
Odoo's relational model requires companies (res.partner type='company') to exist before contacts (res.partner type='contact') can reference them via company_id. We sequence the migration carefully: companies first, establishing the parent records; then contacts with company_id resolved to the migrated company id; then deals with partner_id and company_id resolved to their corresponding Odoo records. Parent-company references are resolved using foreign key ordering so no orphaned records land in Odoo. This dependency chain prevents referential integrity violations during the write phase.
Run a sample migration with field-level diff
A representative slice — typically 100–500 records spanning contacts, companies, deals, and activities — is migrated first. We generate a field-level diff showing the exact value in Bright versus the value written to Odoo for every mapped field. This diff lets you verify stage mapping accuracy, confirm owner resolution is working, and validate custom field population. You approve the sample before the full run commits, catching mapping errors early rather than discovering them after processing thousands of records.
Full migration with delta-pickup window and rollback readiness
The full migration runs against your Odoo instance using the validated mappings from the sample phase. A delta-pickup window of 24–48 hours captures any records created or modified in Bright during the cutover period. Every operation is logged to an audit trail tracking source record, destination record, and field mappings applied. If reconciliation reveals unexpected gaps or data quality issues, one-click rollback reverts the Odoo instance to its pre-migration state using the audit log, allowing you to correct mappings and re-run without leaving residual data in the system.
Platform deep dives
Bright
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. All 8 core objects map 1:1 between Bright and Odoo CRM.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Bright and Odoo CRM.
Object compatibility
All 8 core objects map 1:1 between Bright 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
Bright: Not publicly documented.
Data volume sensitivity
Bright 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 Bright to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your Bright 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 Bright
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.