CRM migration
Field-level mapping, validation, and rollback between Odoo Marketing Automation and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
Odoo Marketing Automation
Source
Odoo CRM
Destination
Compatibility
9 of 12
objects map 1:1 between Odoo Marketing Automation and Odoo CRM.
Complexity
BStandard
Timeline
2-4 weeks
Overview
Moving from Odoo Marketing Automation to Odoo CRM is an intra-platform consolidation, not a cross-vendor migration. Both modules share Odoo's core partner model (Contacts and Leads), the same XML-RPC API surface, and the same Custom-plan API availability gating. The primary migration challenge is that Automation Rules, Workflow Activities, and Campaign Trace logs have no direct Odoo CRM equivalent because CRM focuses on pipeline management rather than marketing campaign orchestration. We extract the full rule structure (triggers, conditions, action chains, email templates), document it as a written inventory, and deliver it alongside the migrated records so your Odoo admin can rebuild automation inside CRM's Automated Actions. Email Templates migrate as reusable records. Mass Mailing history migrates as a reference object. Attachments do not migrate. Standard-plan customers without API access require CSV-based export and import, which we accommodate by pre-formatting source exports and pre-mapping destination import columns.
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 Odoo Marketing Automation 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.
Odoo Marketing Automation
Contact
Odoo CRM
Contact
1:1Odoo Marketing Automation reads from the same res.partner model that Odoo CRM uses for Contacts. We migrate name, email, phone, company (partner_id), tags, and custom fields from the source partner records. The internal id from the source database is preserved in a custom migration_ref field so that Campaign traces can be reconciled against the original contact records after migration.
Odoo Marketing Automation
Lead
Odoo CRM
Lead
1:1Leads in Odoo Marketing Automation and Odoo CRM share the crm.lead model. We migrate lead name, email, phone, company name, stage_id, priority, source, expected closing date, and tags. Stage names vary by database and require a mapping table built during scoping. Owner (user_id) migrates by email match against the Odoo destination User table.
Odoo Marketing Automation
Opportunity
Odoo CRM
Opportunity
1:1Opportunities can be enrollment targets in Marketing Automation via domain filters. We migrate opportunity name, partner_id, stage_id, expected revenue, probability, lost reason, and close date. Opportunities referenced in Automation Rule domain filters are preserved as CRM Opportunities after migration, and the domain filter logic is included in the automation inventory document for manual rebuild.
Odoo Marketing Automation
Campaign
Odoo CRM
Campaign (reference object)
1:1Marketing Automation Campaigns have no direct CRM equivalent. CRM does not have a campaign object for marketing orchestration. We migrate Campaign name, target model (Contact, Lead, or Sales Order), audience domain filter, and campaign state as a reference record stored in a custom CRM_Campaign migration table. The customer's Odoo admin uses this as the lookup reference when rebuilding automation inside CRM Automated Actions.
Odoo Marketing Automation
Automation Rule
Odoo CRM
Automated Action (inventory only)
lossyAutomation Rules are the workflow definitions in Marketing Automation (trigger, filter domain, action chain). These do not have a direct CRM equivalent and cannot be replayed on the destination because CRM Automated Actions have a different trigger model and action set. We extract every Automation Rule with its name, trigger_type (time-based, email event, server action, record creation), filter_domain, and action chain, and present it as a written inventory document with recommended CRM Automated Action equivalents. Python Code activities are flagged separately as manual-rebuild items.
Odoo Marketing Automation
Workflow Activity
Odoo CRM
Automated Action Action (inventory only)
lossyWorkflow Activities are the individual steps within an Automation Rule (Send Email, Update Record, Create Task, Server Action). We extract activity type, timing (wait_days, interval_type), template reference, and child activity links as part of the Automation Rule inventory. Send Email activities map to CRM Email Templates and can be reused; Update Record activities map to CRM Automated Action field updates; Create Task activities map to CRM Project tasks or CRM activities.
Odoo Marketing Automation
Mass Mailing
Odoo CRM
Email (reference object)
1:1Mass Mailings tracked in the Email Marketing app (mailing.mailing records) are migrated as reference objects in a custom CRM_MassMailing migration table with subject, body (HTML), scheduled_date, recipient count, and mailing statistics (sent, delivered, opened, clicked). The email body HTML is preserved for re-use inside CRM Email Templates if the customer rebuilds a campaign send in CRM.
Odoo Marketing Automation
Email Template
Odoo CRM
Email Template
1:1Email Templates from the Email Marketing app (mail.template records) migrate to CRM Email Templates. We migrate template name, subject, body HTML, and inline image references. Variable placeholders (mail_merge_model fields) are preserved with a note that they require reconfiguration inside CRM because CRM uses a different merge model than Marketing Automation.
Odoo Marketing Automation
Tag
Odoo CRM
Tag
1:1Tags on Contacts, Leads, and Opportunities in Marketing Automation are stored in the ir.model.data pattern shared with CRM. We migrate tag names as string arrays and reassign by name on the destination. Duplicate tag names across source objects are merged into a single tag list per CRM convention.
Odoo Marketing Automation
Custom Field
Odoo CRM
Custom Field
lossyCustom fields added via Odoo Studio or ir.model.fields on Contact, Lead, and Opportunity are migrated as key-value pairs on the parent record. We inspect the ir.model.fields metadata to determine field type (char, integer, many2one, date, etc.) and create equivalent custom fields in the destination CRM database before importing data. Many2one fields require lookup resolution against the referenced model.
Odoo Marketing Automation
User / Owner
Odoo CRM
User
1:1Odoo user accounts are referenced as create_uid, write_uid, and assignees on CRM and marketing records. We map user login, name, and active status by email match against the destination Odoo User table. Any source user without a matching destination user is flagged for the customer admin to provision before record migration begins.
Odoo Marketing Automation
Campaign Trace
Odoo CRM
Activity Log (reference)
1:1Campaign Trace records (marketing_trace records linked to contacts and leads) capture enrollment events in Marketing Automation. CRM has no trace log equivalent. We migrate trace data as reference records in a custom CRM_CampaignTrace migration table keyed to the original contact and campaign IDs, allowing the customer admin to reconstruct trace history inside CRM Activities or a custom model post-migration.
| Odoo Marketing Automation | Odoo CRM | Compatibility | |
|---|---|---|---|
| Contact | Contact1:1 | Fully supported | |
| Lead | Lead1:1 | Fully supported | |
| Opportunity | Opportunity1:1 | Fully supported | |
| Campaign | Campaign (reference object)1:1 | Fully supported | |
| Automation Rule | Automated Action (inventory only)lossy | Fully supported | |
| Workflow Activity | Automated Action Action (inventory only)lossy | Fully supported | |
| Mass Mailing | Email (reference object)1:1 | Fully supported | |
| Email Template | Email Template1:1 | Fully supported | |
| Tag | Tag1:1 | Fully supported | |
| Custom Field | Custom Fieldlossy | Fully supported | |
| User / Owner | User1:1 | Fully supported | |
| Campaign Trace | Activity Log (reference)1: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.
Odoo Marketing Automation gotchas
External API access is gated behind the Custom plan
Automation rules with Python server actions cannot replay on non-Odoo destinations
No native conversion tracking within Marketing Automation
Two dependent apps must both be installed for full feature access
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 app inventory
We audit the source Odoo database to confirm which apps are installed (Marketing Automation, Email Marketing, SMS Marketing, CRM), estimate record counts per object (Contacts, Leads, Opportunities, Campaigns, Automation Rules, Mass Mailings, Email Templates), and determine API access tier (Standard or Custom plan). We extract a full list of Automation Rules and Workflow Activities with their trigger types, filter domains, and action chains. This scoping call typically runs 60-90 minutes with the customer's Odoo admin and produces a written migration scope document.
Extraction method selection
If the source is on the Custom plan, we use XML-RPC to extract Contacts, Leads, Opportunities, Email Templates, Campaigns, Mass Mailings, Automation Rules, and Workflow Activities in structured JSON batches. If the source is on the Standard plan, we use CSV export from list views, pre-formatting the export columns and mapping them to the destination schema before import. We extract Tags and Custom Fields separately from ir.model.fields and ir.attachment metadata to ensure custom field types and names are preserved.
Automation rule and campaign inventory
We extract every Marketing Automation Rule and Workflow Activity as a structured JSON document including rule name, trigger type, filter domain, action chain (with activity type, timing, template reference, and child activity links), and any Python Code activity blocks. We cross-reference Campaign trace logs against Contact and Lead IDs to build the CRM_CampaignTrace migration table. The inventory is delivered as a written document with each rule on a separate page showing the full trigger-to-action chain and a recommended CRM Automated Action equivalent. Python Code activities are flagged as manual-rebuild items.
Schema preparation in destination CRM
We create any missing custom fields in the destination CRM database that correspond to source custom fields on Contact, Lead, and Opportunity. We pre-create the CRM_Campaign and CRM_CampaignTrace migration reference tables if the customer wants historical campaign data accessible post-migration. We configure tag records in the destination so tag name matching works during import. User mapping is validated against the destination Odoo User table to confirm all source owner references have a matching destination user.
Staged import in dependency order
We import into Odoo CRM in dependency order: Users (validated, not migrated), Tags (first, to avoid orphan tags), Contacts (with custom field data), Leads (with stage mapping applied), Opportunities (with partner_id and owner_id resolved), Email Templates (as reusable CRM templates), then the CRM_Campaign and CRM_CampaignTrace reference tables. After each phase we emit a reconciliation report comparing source record count to destination record count and flag any records that failed import with the error reason.
Cutover, validation, and automation rebuild handoff
We run a delta migration for any records modified during the import window, then hand off to the customer's Odoo admin to validate a random sample of migrated records. We deliver the Automation Rule inventory document and schedule a 60-minute handoff call to walk through each rule's recommended CRM Automated Action equivalent. We do not rebuild Automation Rules as CRM Automated Actions inside the migration scope; that work is handled by the customer's Odoo admin or an Odoo implementation partner. We offer a one-week hypercare window for reconciliation issues.
Platform deep dives
Odoo Marketing Automation
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 1 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 Odoo Marketing Automation and Odoo CRM.
Object compatibility
1 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
Odoo Marketing Automation: Not publicly documented by Odoo.
Data volume sensitivity
Odoo Marketing Automation 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 Odoo Marketing Automation to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your Odoo Marketing Automation 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 Odoo Marketing Automation
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.