CRM migration
Field-level mapping, validation, and rollback between Bloomr and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
Bloomr
Source
Odoo CRM
Destination
Compatibility
10 of 15
objects map 1:1 between Bloomr and Odoo CRM.
Complexity
BStandard
Timeline
3-5 weeks
Overview
Moving from Bloomr to Odoo CRM is a migration from a minimal, small-team CRM with no public API documentation to a full-stack open-source platform with a mature REST API. Bloomr stores Contacts, Companies, Deals, Activities, and any custom fields in a schema that requires live API exploration to confirm endpoint availability and pagination behavior before extraction begins. Odoo CRM uses a crm.lead model that conflates leads and opportunities with a type field, a res.partner record that serves as both contact and company depending on address book context, and a crm.lead.team field for pipeline ownership. We resolve the Bloomr-to-Odoo schema mapping during data profiling, map deal stages to Odoo stage names and probabilities, and preserve custom field values in Odoo custom fields post-migration. Workflows, automations, and any file attachments are not migratable from Bloomr under standard scope; we deliver a written audit template so the customer's Odoo admin can rebuild automations in Odoo's built-in Automations or Server Actions module.
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 Bloomr 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.
Bloomr
Contact
Odoo CRM
res.partner
1:1Bloomr Contacts map to Odoo res.partner records. The mapping uses name, email, phone, and any custom fields discovered during profiling as direct field-to-field transfers. In Odoo, res.partner serves as both individual contact and organization depending on the is_company flag; we set this to False for person-type records and resolve any company affiliation through Bloomr's Company association. Address fields (street, city, state, zip, country) map to partner fields directly if present in Bloomr's schema. The Bloomr contact ID is preserved in a custom Char field x_bloomr_id for dedupe and audit purposes.
Bloomr
Company/Account
Odoo CRM
res.partner (is_company=True)
1:1Bloomr Companies map to Odoo res.partner records with is_company set to True. Fields including company name, domain, industry, size, and address map to their Odoo equivalents (name, website, industry_id, employee_size, street, city, state_id, country_id). Custom company properties discovered during Bloomr profiling become custom fields on the res.partner model using Odoo's Studio or direct ir.model.fields creation. Parent-company hierarchy in Bloomr maps to Odoo's parent_id field on res.partner for subsidiary relationships.
Bloomr
Deal/Opportunity
Odoo CRM
crm.lead
1:1Bloomr Deals map to Odoo crm.lead records with type set to opportunity. The deal name becomes crm.lead.name, deal value maps to planned_revenue, and stage maps to stage_id with Odoo stage probability applied from Bloomr's stage configuration. Owner assignment maps from Bloomr owner ID to Odoo user_id on crm.lead. Expected close date maps to date_deadline. Bloomr's deal-to-contact association maps to Odoo's partner_id on crm.lead (the primary contact) and partner_mobile/phone for contact details. We preserve the original Bloomr deal ID in x_bloomr_deal_id.
Bloomr
Deal Stage
Odoo CRM
crm.lead.stage
lossyEach Bloomr deal stage maps to an Odoo crm.lead.stage record created in the destination database before migration. Stage name and sequence order migrate directly. Probability percentage per stage migrates to Odoo's stage probability field, rounded to the nearest integer per Odoo's field type. If Bloomr stages include custom fields (closed-won reason, closed-lost reason), we create corresponding custom fields on crm.lead and migrate values during the Deal phase.
Bloomr
User/Team Member
Odoo CRM
res.users
1:1Bloomr Users map to Odoo res.users records. We resolve Bloomr owner assignments on Deals, Contacts, and Activities by matching the Bloomr user email to the Odoo res.users login. Any Bloomr user without a matching Odoo user is held in a reconciliation queue; the customer's Odoo admin provisions missing users before the migration proceeds. Role and permission data from Bloomr maps to Odoo access groups and record rules if the customer has Odoo Access Controls enabled beyond the default.
Bloomr
Activity/Call
Odoo CRM
crm.phonecall
1:1Bloomr activity records of type call map to Odoo crm.phonecall. We use Odoo's crm_phone module (part of the CRM app) or the base phone module if installed. Call duration, disposition, and timestamp map to duration, state, and date_created on crm.phonecall. The phonecall is linked to the resolved res.partner (contact) via the partner_id field. If the crm.phonecall model is not available in the customer's Odoo version, call records migrate to crm.lead activity history as a note with custom fields capturing duration and disposition.
Bloomr
Activity/Meeting
Odoo CRM
calendar.event
1:1Bloomr meeting activities map to Odoo calendar.event records. Subject maps to name, start and end time map to start_datetime and stop_datetime, and location maps to location. Attendees (Bloomr contacts associated with the meeting) map to calendar.attendee records linked to the event. We preserve the Bloomr meeting description as the event description. If the customer does not have Odoo's calendar module activated, meetings migrate as notes attached to the related crm.lead or res.partner.
Bloomr
Activity/Email
Odoo CRM
mail.message
1:1Bloomr email engagement records map to Odoo mail.message records linked to the resolved crm.lead or res.partner via model and res_id. Email subject maps to subject, body to body (HTML preserved), and timestamp to date. The author is resolved to a res.partner record; if the sender email has no matching partner, we create a one-off partner record for the author. Odoo's mail.thread mechanism threads messages by parent_id if a reply-to message_id is present in Bloomr's data.
Bloomr
Activity/Task
Odoo CRM
project.task or crm.lead
1:1Bloomr task activities map to project.task if the customer has Odoo Project installed, or to crm.lead activity history if only CRM is active. Task subject maps to name, due date maps to date_deadline, status maps to stage_id or state, and assignment maps to user_id. Description migrates as body text. If the task has a Bloomr deal association, we link the Odoo task to the corresponding crm.lead record via the project_id and task_id relationship or a direct many2one field if Project is not installed.
Bloomr
Custom Fields (on Contact)
Odoo CRM
Custom fields on res.partner
lossyBloomr custom fields on Contacts map to Odoo custom fields on res.partner created before migration via ir.model.fields or Odoo Studio. Field type mapping follows Odoo's field types: text fields become char or text, numeric fields become float or integer, date fields become date, checkbox fields become boolean. Selection fields from Bloomr map to Odoo selection fields with the same option values. We preserve the Bloomr custom field name as the Odoo field label with x_bloomr_cf_ prefix on the technical field name.
Bloomr
Custom Fields (on Company)
Odoo CRM
Custom fields on res.partner (company context)
lossyBloomr custom fields on Companies map to Odoo custom fields on res.partner (is_company=True) using the same type-mapping logic as Contact custom fields. We scope custom field creation to the res.partner model and set the applies_to context to company-type records during field definition to avoid confusion with individual contact records. Any company-specific taxonomy (industry classification, employee range, annual revenue) that has no Odoo equivalent is created as a custom field.
Bloomr
Custom Fields (on Deal)
Odoo CRM
Custom fields on crm.lead
lossyBloomr custom fields on Deals map to Odoo custom fields on crm.lead. We create the fields before the Deal migration phase begins, using Odoo's field type system (selection, char, text, float, integer, date, boolean) to match Bloomr's field types discovered during profiling. Lookup relationships from Bloomr custom fields (e.g., a custom field referencing a Contact or Company) map to Odoo many2one fields if the related model exists in the destination database.
Bloomr
Attachments/Files
Odoo CRM
ir.attachment
1:1Attachment handling in Bloomr is not confirmed through any documented API or export mechanism. We do not include attachment migration in the standard scope. If live API exploration during data profiling confirms attachment endpoint availability, pagination behavior, and file access, we revise scope to include ir.attachment migration linked to the parent res.partner, crm.lead, or related record via res_model and res_id. Until confirmed, we flag this as out-of-scope and recommend manual UI export from Bloomr for any critical attachments.
Bloomr
Workflows/Automations
Odoo CRM
None (not migratable)
1:1Bloomr workflow rules, automation triggers, and sequence configurations are not accessible via any documented export endpoint. We cannot migrate automated workflows as structured data. We deliver a workflow audit template during scoping that captures Bloomr workflow name, trigger conditions, actions, and sequence order for the customer's Odoo admin to rebuild in Odoo's Automations module (available from the base CRM app) or via Studio-based server actions and automated actions. This is an out-of-scope item disclosed in the migration agreement before engagement.
Bloomr
Tags/Labels
Odoo CRM
crm.tag or res.partner.category
lossyBloomr tags on Contacts and Companies map to Odoo crm.tag records for deal tagging and res.partner.category for contact/company categorization. Tags are stored as many2many relationships; we create the tag records in Odoo before migration and link them via the appropriate many2many field (tag_ids on crm.lead, category_id on res.partner). The customer chooses during scoping whether to use crm.tag, partner category, or a custom multi-select field for their tagging strategy.
| Bloomr | Odoo CRM | Compatibility | |
|---|---|---|---|
| Contact | res.partner1:1 | Fully supported | |
| Company/Account | res.partner (is_company=True)1:1 | Fully supported | |
| Deal/Opportunity | crm.lead1:1 | Fully supported | |
| Deal Stage | crm.lead.stagelossy | Fully supported | |
| User/Team Member | res.users1:1 | Fully supported | |
| Activity/Call | crm.phonecall1:1 | Fully supported | |
| Activity/Meeting | calendar.event1:1 | Fully supported | |
| Activity/Email | mail.message1:1 | Fully supported | |
| Activity/Task | project.task or crm.lead1:1 | Fully supported | |
| Custom Fields (on Contact) | Custom fields on res.partnerlossy | Fully supported | |
| Custom Fields (on Company) | Custom fields on res.partner (company context)lossy | Fully supported | |
| Custom Fields (on Deal) | Custom fields on crm.leadlossy | Fully supported | |
| Attachments/Files | ir.attachment1:1 | Not supported | |
| Workflows/Automations | None (not migratable)1:1 | Not supported | |
| Tags/Labels | crm.tag or res.partner.categorylossy | 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.
Bloomr gotchas
No publicly documented API or export endpoints
Workflow and automation data is not exportable
Attachment and file storage access is unconfirmed
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
Live API profiling and data audit
We begin every Bloomr engagement by probing the live API to confirm authentication method (API key, OAuth, or session-based), available endpoints for Contacts, Companies, Deals, Activities, and custom objects, pagination behavior, rate limits, and any file attachment endpoints. If the API is inaccessible, we document the manual CSV export path from the Bloomr UI and flag any fields or records not covered by export. The profiling output is a written data inventory: object counts, custom field list, activity volume, and API accessibility assessment. This phase takes one to two weeks and must complete before a migration timeline is committed.
Schema design and custom field provisioning
We design the Odoo destination schema before any data extraction. This includes creating custom fields on res.partner (for Contact and Company custom properties), crm.lead (for Deal custom properties), and crm.lead.stage (for stage-level custom data). We create the crm.tag records for any Bloomr tags and configure the crm.team records for pipeline ownership if Odoo's team selling is active. Schema is deployed into a staging Odoo database first. We define the Lead versus Opportunity split strategy during this phase based on Bloomr's data distribution and the customer's sales process.
Staging migration and reconciliation
We run a full migration into a staging Odoo environment using production-like data volume. The customer's Odoo admin or RevOps lead reviews record counts (Contacts in, Companies in, Deals in, Activities in), spot-checks 25-50 random records against the Bloomr source for field accuracy, and validates that custom fields populated correctly. We resolve any mapping corrections and re-run the staging migration until reconciliation passes. This step prevents schema or mapping corrections from happening in the production environment and typically takes one to two weeks depending on record volume.
Owner and user reconciliation
We extract every distinct Bloomr owner referenced on Deals, Contacts, and Activities and match by email against the Odoo destination's res.users table. Any Bloomr owner without a matching Odoo user is held in a reconciliation queue. The customer's Odoo admin provisions missing users (active or inactive based on whether the original Bloomr user is still employed) before production migration begins. OwnerId references on crm.lead and res.partner are required for Odoo's activity assignment tracking; migration cannot complete past this step without resolved owner mapping.
Production migration in dependency order
We run production migration in record-dependency order: res.partner records for Companies first (with is_company=True), res.partner records for Contacts second (with is_company=False and parent_id resolved to the company record), crm.lead.stage configuration records, crm.lead for Deals (with partner_id, user_id, and stage_id resolved), crm.tag records for tag migration, activity history (crm.phonecall, calendar.event, mail.message, project.task) last because they reference parent records. Each phase emits a row-count reconciliation report. Custom field population is validated per phase before proceeding.
Cutover, validation, and workflow rebuild handoff
We freeze Bloomr write access 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 Bloomr workflow audit template (completed during discovery) to the customer's Odoo admin team, documenting each Bloomr automation with trigger, conditions, and recommended Odoo Automation or Server Action equivalent. We support a one-week hypercare window for reconciliation issues. Workflow rebuilds, sequence reconfiguration, and Odoo Studio customization beyond field creation are outside standard scope and require a separate engagement.
Platform deep dives
Bloomr
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 Bloomr 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
Bloomr: Not publicly documented.
Data volume sensitivity
Bloomr 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 Bloomr to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your Bloomr 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 Bloomr
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.