CRM migration
Field-level mapping, validation, and rollback between Brevo Marketing Platform and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
Brevo Marketing Platform
Source
Odoo CRM
Destination
Compatibility
8 of 13
objects map 1:1 between Brevo Marketing Platform and Odoo CRM.
Complexity
BStandard
Timeline
3-5 weeks
Overview
Moving from Brevo Marketing Platform to Odoo CRM is a shift from a multi-channel marketing SaaS tool to an open-source ERP with a built-in CRM module. Brevo organizes data around Contacts, Companies, and Deals with pipeline and stage support; Odoo uses Contacts, Companies, and Opportunities with a pipeline kanban view, activity log, and Server Action automations. We map Deals to Opportunities, preserve stage assignments in the Odoo pipeline configuration, and transfer tag assignments as Odoo tags against each Contact. Brevo's automation workflows (Journeys) do not migrate as code — they require rebuilding in Odoo Studio or via server-side Python actions, and we deliver a written inventory documenting every active workflow for your admin. Brevo's daily export feature was deprecated on May 30th, 2025, which means non-Enterprise accounts must use the Contacts API with pagination or one-off UI exports for data extraction. Custom object records from Enterprise and Pro Brevo accounts map to Odoo custom fields on the Contact or an Odoo custom model created during schema setup.
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 Brevo Marketing Platform 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.
Brevo Marketing Platform
Contact
Odoo CRM
Contact (res.partner)
1:1Brevo Contact records map directly to Odoo res.partner records with partner_type set to 'contact'. The contact email is the dedupe key. Standard Brevo attributes (first name, last name, phone, mobile, city, country, birthday) map to the corresponding Odoo contact fields. Brevo custom attributes (attributes array) migrate as Odoo custom fields on res.partner created in Odoo Studio before migration. Brevo tag assignments migrate as Odoo tags (mail.message.subtype) linked to the Contact via mail.followers. Any Brevo contact with no email address is held in a reconciliation queue because Odoo requires an email for partner deduplication.
Brevo Marketing Platform
Company
Odoo CRM
Company (res.partner with partner_type = 'company')
1:1Brevo Company records map to Odoo res.partner with partner_type = 'company' and is_company = True. The company name maps to name, domain maps to website, and Brevo address fields map to Odoo address fields on the related partner record. Odoo allows multiple contacts (employees) to be linked to a single company partner, matching Brevo's contact-to-company relationship. Company is created before any contact import so that the child contact can reference the parent company via parent_id.
Brevo Marketing Platform
Deal
Odoo CRM
Opportunity (crm.lead)
1:1Brevo Deal records map to Odoo crm.lead (Opportunity). The deal name becomes the Opportunity name, amount becomes expected_revenue, expected_close_date maps to date_deadline, and the Brevo pipeline and stage map to the Odoo pipeline and stage in the crm.lead record. Brevo deal contacts and companies link to the crm.lead's partner_id (primary contact) and partner_ids (multi-contact link) fields. Lost Deals migrate with the lost reason preserved as a note.
Brevo Marketing Platform
Pipeline
Odoo CRM
Team Pipeline
lossyBrevo pipelines map to Odoo Sales Teams (crm.team), each with its own pipeline kanban view. We create Odoo Teams during schema setup, naming them to match the Brevo pipeline labels. Each Team's crm.lead.pipeline records get the corresponding stage columns created in Odoo's pipeline view. The Odoo team_id field on crm.lead is populated from the Brevo pipeline assignment.
Brevo Marketing Platform
Stage
Odoo CRM
Stage (crm.stage)
lossyBrevo stage names migrate as Odoo crm.stage records attached to each Odoo team. Stage probability percentages map from Brevo to Odoo's probability field, rounded to the nearest integer. Stage sequence order is preserved for kanban column ordering. Custom stage colors in Brevo do not transfer; Odoo stage colors are configured by the admin post-migration.
Brevo Marketing Platform
Automation Workflow
Odoo CRM
Server Action / Automated Action (Studio)
1:1Brevo automation workflows (Journeys) do not migrate as code because the trigger-action model differs fundamentally from Odoo's Server Actions and Automated Actions. We deliver a written inventory of every active Brevo automation with its trigger type, conditions, actions, and a recommended Odoo Studio equivalent. Odoo's Studio Automated Actions support record-triggered, time-based, and cron-triggered automations, but Python-level Server Actions require developer involvement. Brevo workflow steps that cannot be represented in Odoo Studio are explicitly flagged in the inventory.
Brevo Marketing Platform
Custom Object
Odoo CRM
Custom Model or Custom Fields on Contact
lossyBrevo Custom Objects (Enterprise and Pro only) require pre-migration schema design in Odoo. If the destination Odoo instance uses the same custom object concept, we create a matching Odoo model via Studio or Python and populate it with Brevo's Custom Object records via the Odoo XML-RPC API. If the destination Odoo does not have custom model support enabled, we map the custom object attributes to custom fields on the Odoo res.partner record. All custom fields are created before data import begins.
Brevo Marketing Platform
Email Campaign
Odoo CRM
Mail Message / Mass Mailing Campaign
1:1Brevo email campaign metadata (name, subject, sender name, sender email, send date, status) migrate as Odoo mass.mailings records within a corresponding Odoo crm.tag or utm.campaign record for tracking. Campaign HTML content migrates as a template in Odoo's email template system. We do not migrate Brevo campaign delivery statistics (open rate, click rate) as Odoo does not store these natively — we deliver them as a CSV alongside the migration for the customer to import into a BI tool or spreadsheet.
Brevo Marketing Platform
SMS Campaign
Odoo CRM
SMS Message records
1:1Brevo SMS campaign metadata migrates to Odoo sms.sms records. SMS credits are not migratable — the destination Odoo instance must have its own SMS provider (Odoo's SMS module requires a Twilio or OVH integration). Sender ID and phone number formats are validated against the destination SMS provider's requirements during mapping. Brevo SMS content migrates as Odoo sms.sms body text.
Brevo Marketing Platform
Tag
Odoo CRM
Tag (mail.followers subtype or crm.tag)
lossyBrevo tags stored as flat key-value labels on Contacts migrate as Odoo tags. We create the tag records in Odoo first (via the tag model's create API), then link them to the corresponding Contact records via mail.followers. The tag name is the dedupe key; tags with the same name across different Brevo lists are merged in Odoo. Tags with no contact assignments are still created but flagged in the reconciliation report.
Brevo Marketing Platform
Segment
Odoo CRM
UTM Campaign or CRM Tag Group
lossyBrevo dynamic segments defined by filter conditions (e.g., 'contacts with city = London AND opened email in last 30 days') do not have a direct Odoo equivalent because Odoo segments are static groups updated manually or via a scheduled action. We export the segment filter logic as a written definition and recommend recreating it as an Odoo Automated Action that runs a search on the same criteria on a daily schedule. The segment name becomes an Odoo crm.tag group label.
Brevo Marketing Platform
Transactional Email Event
Odoo CRM
Mail Message / Note on Contact
1:1Brevo transactional email event logs (delivered, bounced, complaint, deferred) are exported as a CSV with contact reference. In Odoo, these events are stored as mail.message records linked to the Contact partner record, with the event type in the message body and the timestamp preserved. We do not migrate webhook event data into Odoo's native tracking tables because Odoo does not expose a transactional email event API equivalent; the CSV is the system of record for delivery metrics post-migration.
Brevo Marketing Platform
User
Odoo CRM
User
1:1Brevo user records (name, email, role) export for administrative reference. User provisioning in Odoo is a separate step — the customer creates Odoo users with matching email addresses before migration, and we match Brevo owner assignments by email. Any Brevo user without a matching Odoo User is flagged in the reconciliation report. Brevo marketing seat billing ($9/month) does not map to Odoo user records; Odoo CRM users are provisioned based on the customer's Odoo subscription tier.
| Brevo Marketing Platform | Odoo CRM | Compatibility | |
|---|---|---|---|
| Contact | Contact (res.partner)1:1 | Fully supported | |
| Company | Company (res.partner with partner_type = 'company')1:1 | Fully supported | |
| Deal | Opportunity (crm.lead)1:1 | Fully supported | |
| Pipeline | Team Pipelinelossy | Fully supported | |
| Stage | Stage (crm.stage)lossy | Fully supported | |
| Automation Workflow | Server Action / Automated Action (Studio)1:1 | Fully supported | |
| Custom Object | Custom Model or Custom Fields on Contactlossy | Fully supported | |
| Email Campaign | Mail Message / Mass Mailing Campaign1:1 | Fully supported | |
| SMS Campaign | SMS Message records1:1 | Fully supported | |
| Tag | Tag (mail.followers subtype or crm.tag)lossy | Fully supported | |
| Segment | UTM Campaign or CRM Tag Grouplossy | Fully supported | |
| Transactional Email Event | Mail Message / Note on Contact1:1 | Fully supported | |
| User | User1: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.
Brevo Marketing Platform gotchas
Daily exports deprecated since May 30th, 2025
Contact storage limits tied to email volume tier, not plan name
Custom Objects only available on Enterprise or Pro plans
Automation workflow migration marks unsupported steps inactive
List IDs can change unexpectedly on Brevo's side
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
Discovery and export method confirmation
We audit the source Brevo account across plan tier, contact count, company count, deal count, pipeline count, active automation workflows, custom object schemas (if Enterprise/Pro), tag count, and segment definitions. We confirm the export method: Enterprise accounts use the Customer Data Platform or API; Starter and Standard accounts use the Contacts API with pagination. We also confirm the destination Odoo edition, installed apps, and existing custom fields so we can design the Odoo schema before any data moves.
Odoo schema design and pipeline configuration
We design the destination schema in Odoo. This includes creating custom fields on res.partner and crm.lead to match Brevo custom attributes, creating Odoo Teams (crm.team) to match Brevo pipelines, creating crm.stage records to match Brevo stage names with correct probabilities, and creating custom models for Brevo Custom Objects if the destination Odoo edition supports them. Tags are pre-created in Odoo. Schema changes are deployed in a test Odoo database first.
Sandbox migration and reconciliation
We run a full migration into an Odoo test database using a representative data sample (typically 10-20% of production volume). The customer's Odoo admin reviews record counts, spot-checks 25-50 records against the Brevo source, verifies pipeline and stage assignments, and confirms tag mappings. The sign-off on the sandbox migration is required before the production migration begins. Any field mapping corrections happen in this phase.
Owner and user reconciliation
We extract every distinct Brevo Owner referenced on Deals, Contacts, and Companies and match them by email against the destination Odoo User list. Brevo users without matching Odoo users are held in a reconciliation queue. The customer's Odoo admin provisions any missing users (active status matching whether the original Brevo user is still active). Migration cannot proceed past this step because Odoo's crm.lead requires an assigned user_id.
Production migration in dependency order
We run production migration in record-dependency order: Companies (as company-type partners), Contacts (with parent_id resolved to the company partner), Deals (as crm.lead with partner_id, team_id, and stage_id resolved), Tags (linked via mail.followers to each Contact), Custom Objects (last, with lookups to the parent Contact), Email and SMS campaign metadata (as Odoo mass.mailings and sms.sms records). Each phase emits a row-count reconciliation report before the next phase begins. Brevo automation workflows are not migrated — they are delivered as a written inventory after the data migration is complete.
Cutover, validation, and automation rebuild handoff
We freeze Brevo writes during the cutover window, run a final delta migration of any records modified during migration, then enable Odoo as the system of record. We deliver the automation rebuild inventory document to the customer's admin team. We support a one-week hypercare window where we resolve any reconciliation issues raised by the customer's team. We do not rebuild Brevo automations in Odoo Studio as part of the standard migration scope — that is a separate engagement or an internal Odoo developer task.
Platform deep dives
Brevo Marketing Platform
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 Brevo Marketing Platform 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
Brevo Marketing Platform: Documented per-endpoint quotas; general rate limits apply per org.
Data volume sensitivity
Brevo Marketing Platform 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 Brevo Marketing Platform to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your Brevo Marketing Platform 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 Brevo Marketing Platform
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.